微服务系列(2)--注册中心

在博文:微服务系列(1)里我们提到过注册中心的概念,简单来说微服务注册中心是一个用于存储和管理微服务实例信息的组件,它提供了服务注册、服务发现、服务健康检查等功能,以确保微服务之间的稳定通信。在微服务架构中,各个服务实例将自己的信息注册到注册中心,同时从中心获取其他服务的实例信息以进行通信。当一个服务实例发生故障或下线时,注册中心会自动将其从服务列表中移除,从而确保其他服务实例获取到的服务列表始终是可用的。

举个栗子:

有两个服务,consumer和provider,各自都采用了多副本部署。一般来说,consumer在调用provider时,会访问provider服务所暴露出来的负载均衡ip,一旦负载均衡ip改变了,开发者就不得不采用一些手段修改客户端服务的请求地址。
但如果我们引入了注册中心这个中间层,provider服务在每一次启动时,都会向注册中心注册自己的信息(名称、地址、端口、标签等matedata),这样,consumer侧就无需在意provider侧的ip变化,只需要每次向注册中心“拿”就可以了。

微服务的注册中心目前主流的有以下四种:

  • Zookeeper
  • Eureka
  • Consul
  • Kubernetes

(由于本人工作和consul打交道更多,这里我们主要聊consul)

consul

consul的介绍

Consul是由HashiCorp公司推出的一款开源工具,是一个分布式的、高可用的、高性能的服务注册与发现系统,它提供了服务注册、服务发现、健康检查、KV存储等功能。

consul的工作原理

概述

  1. 节点类型
    Consul主要由以下两种节点组成:
    Server节点:Server节点负责存储服务实例的注册信息、健康检查状态等元数据。一个Consul集群通常包含3个或5个Server节点,以实现高可用性。Server节点之间通过Raft协议进行数据同步和选举Leader。
    Client节点:Client节点负责转发服务注册、查询等请求到Server节点,并缓存部分数据以提高查询性能。Client节点通常部署在每台微服务所在的主机上,以实现服务实例与Consul的紧密集成。
    Agent:在Consul集群的每一个节点,都会运行一个Agent进程,agent分为client和server两种模式。以后细说。

  2. 服务注册
    微服务实例可以通过HTTP API或者配置文件的方式将自己的信息注册到Consul中。注册信息包括服务名称、地址、端口、标签等元数据。Client节点会将服务实例的注册信息转发到Server节点,并存储在内部的数据结构中。

  3. 服务发现
    当一个服务实例需要与另一个服务进行通信时,它可以通过查询Consul获取目标服务的实例信息。

  4. 健康检查
    Consul支持的健康检查类型包括http,tcp,script。
    HTTP检查:注册中心定期向服务实例的指定HTTP端点发送请求,根据HTTP响应状态码判断服务实例是否健康;
    TCP检查:注册中心定期尝试与服务实例的指定TCP端口建立连接,根据连接是否成功判断服务实例是否健康;
    命令行检查:定期执行命名(比如:ls/ifconfig),退出状态码为0表示服务实例健康。

  5. 数据同步
    Consul使用Raft协议确保Server节点之间的数据同步。通过Raft协议,Consul可以在多个Server节点之间复制数据,实现强一致性。此外,Raft协议还用于选举Leader节点,以确保集群中只有一个节点负责处理写请求。

  6. Gossip协议
    Gossip协议是一种基于UDP的轻量级通信协议,consul使用Gossip协议实现集群节点之间的成员关系管理和事件传播。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66887.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】ICMP协议——网络层

ICMP协议 ICMP(Internet Control Message Protoco)Internet控制报文协议,用于在IP主机、路由器之间传递控制信息,是一个TCP/IP协议。该协议是用来检测网络传输的问题,相当于维修人员的工具。 ICMP协议的定位 在TCP/IP…

【vue3】解决scope.row.id套标签太多无法随着点击按钮而变化

实现要求:再点击每一行的修改按钮时,动态拿取该行的id传给后端作为pk(主键)实现数据库数据的修改,并显示在vue前端; 我遇到的问题:在2处使用 scope 作用域插槽拿取每一行的数据,在3处,删除按钮那一行代码&a…

机器学习 | Python实现KNN(K近邻)模型实践

机器学习 | Python实现KNN(K近邻)模型实践 目录 机器学习 | Python实现KNN(K近邻)模型实践基本介绍模型原理源码设计学习小结参考资料基本介绍 一句话就可以概括出KNN(K最近邻算法)的算法原理:综合k个“邻居”的标签值作为新样本的预测值。更具体来讲KNN分类过程,给定一个训…

基于深度信念神经网络+长短期神经网络的降雨量预测,基于dbn-lstm的降雨量预测,dbn原理,lstm原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) LSTM原理 DBN-LSTM的降雨量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,通过dbn进行无监督学习提取特征,然后长短期神经…

突然让做性能测试?试试RunnerGo

当前,性能测试已经是一名软件测试工程师必须要了解,甚至熟练使用的一项技能了,在工作时可能每次发版都要跑一遍性能,跑一遍自动化。性能测试入门容易,深入则需要太多的知识量,今天这篇文章给大家带来&#…

Unity zSpace 开发

文章目录 1.下载 zSpace 开发环境1.1 zCore Unity Package1.2 zView Unity Package 2. 导入工程3. 发布设置4.功能实现4.1 用触控笔来实现对模型的拖拽: 5. 后续更新 1.下载 zSpace 开发环境 官网地址 1.1 zCore Unity Package zSpace 开发核心必须 1.2 zView …

Android核心开发之——OpenGL

OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现…

【Unity每日一记】向量操作摄像机的移动(向量加减)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Python Opencv实践 - 图像放射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(img.shape[:2])#使用getAffineTransform来获得仿射变换的矩阵M #cv.getAffineTransform(…

【大数据】一些基本概念

一、数据库、数据仓库、数据湖 1.什么是数据库 (Database, DB) 数据库是指长期储存在计算机中的有组织的, 可共享的数据集合 就是存储数据的仓库 数据库有三个特点: 永久存储, 有组织, 可共享 数据库是一种结构化数据存储技术,用于存储和管理有组织的数据。数据库…

DP(区间DP)

目录 石子合并 合并果子(贪心 Huffman树) 环形石子合并 石子合并 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻…

MySQL—缓存

目录标题 为什么要有Buffer Poolbuffer pool有多大buffer pool缓存什么 如何管理Buffer Pool如何管理空闲页如何管理脏页如何提高缓存命中率预读失效buffer pool污染 脏页什么时候会被刷入到磁盘 为什么要有Buffer Pool 虽然说MySQL的数据是存储在磁盘中,但是也不能…