03-注册中心原理和实现方式

概要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@startmindmap
* 注册中心
** 注册中心原理
*** 服务提供者(RPC Server)
*** 服务消费者(RPC Client)
*** 和服务注册中心(Registry)
** 注册中心实现方式
*** 注册中心 API
**** 服务注册接口
**** 服务反注册接口
**** 心跳汇报接口
**** 服务订阅接口
**** 服务变更查询接口
**** 服务查询接口
**** 服务修改接口
*** 集群部署
*** 目录存储
*** 服务健康状态检查
*** 服务状态变更通知
@endmindmap

注册中心原理

在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry)。

  • RPC Server 提供服务,在启动时,根据服务发布文件 server.xml 中的配置的信息,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。
  • RPC Client 调用服务,在启动时,根据服务引用文件 client.xml 中配置的信息,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。
  • 当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地内存中缓存的服务节点列表。
  • RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

微服务架构

当 RPC Server 节点发生变更时,RPC Client 可以通过拉取的方式获取最新服务节点。Registry 也可以推送节点变化的消息。

注册中心实现方式

1. 注册中心 API

  • 服务注册接口:服务提供者通过调用服务注册接口来完成服务注册。
  • 服务反注册接口:服务提供者通过调用服务反注册接口来完成服务注销。
  • 心跳汇报接口:服务提供者通过调用心跳汇报接口完成节点存活状态上报。
  • 服务订阅接口:服务消费者通过调用服务订阅接口完成服务订阅,获取可用的服务提供者节点列表。
  • 服务变更查询接口:服务消费者通过调用服务变更查询接口,获取最新的可用服务节点列表。

2. 集群部署

注册中心作为服务提供者和服务消费者之间沟通的桥梁,它的重要性不言而喻。所以注册中心一般都是采用集群部署来保证高可用性,并通过分布式一致性协议来确保集群中不同节点之间的数据保持一致。

3. 目录存储

注册中心存储服务信息一般采用层次化的目录结构。

4. 服务健康状态检测

注册中心除了要支持最基本的服务注册和服务订阅功能以外,还必须具备对服务提供者节点的健康状态检测功能,这样才能保证注册中心里保存的服务节点都是可用的。

5. 服务状态变更通知

一旦注册中心探测到有服务提供者节点新加入或者被剔除,就必须立刻通知所有订阅该服务的服务消费者,刷新本地缓存的服务节点信息,确保服务调用不会请求不可用的服务提供者节点。

参考

  • [从 0 开始学微服务 - 极客时间 - 胡忠想]