1. 注册中心的基本角色

  • 注册中心:相当于一个文件系统,保存所有服务的名字,服务提供者的IP列表,服务消费者的IP列表。
  • 服务提供者:部署时将自己的服务名和IP信息等注册到注册中心,提供服务。
  • 服务消费者:部署时将自己的服务名和IP信息等注册到注册中心,服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。

grpc注册zookeeper zookeeper实现注册中心原理_java

2. Zookeeper实现注册中心的原理

2.1 应用场景

当项目从简单的 A 服务调 B 服务, B 服务调 C 服务变成到 A 服务调 B 服务, A 服务调 C服务,D 服务调 A 服务…的错综复杂的调用。这时,就可以借助注册中心帮助管理不同服务的IP等信息。

2.2 原理

Zookeeper 可以充当一个 服务注册表 (Service Registry),让多个服务提供者形成一个集群,让服务消费者通过服务注册表获取具体的服务访问地址(IP+端口)去访问具体的服务提供者。

即在zookeeper中,进行服务注册,本质上就是在zookeeper中创建了一个znode节点,该节点存储了该服务的IP、端口、调用方式(协议、序列化方式)等。 该节点承担着最重要的职责,它由服务提供者(发布服务时)创建,以供服务消费者获取节点中的信息,从而定位到服务提供者真正网络拓扑位置以及得知如何调用。

grpc注册zookeeper zookeeper实现注册中心原理_zookeeper_02


注册流程:

  1. 服务提供者启动时,会将其服务名称,ip地址注册到配置中心。
  2. 服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。当消费者调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从IP列表中取一个服务提供者的服务器调用服务。
  3. 当服务提供者的某台服务器宕机或下线时,相应的ip会从服务提供者IP列表中移除。同时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
  4. 当某个服务的所有服务器都下线了,那么这个服务也就下线了。
  5. 同样,当服务提供者的某台服务器上线时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
  6. 服务提供方可以根据服务消费者的数量来作为服务下线的依据。

注意:

Zookeeper中临时节点生命周期是和SESSION绑定的,如果SESSION超时了,对应的节点会被删除,被删除时,Zookeeper 会通知对该节点父节点进行监听的客户端, 这样对应的客户端又可以刷新本地缓存了。当有新服务加入时,同样也会通知对应的客户端,刷新本地缓存,要 达到这个目标需要客户端重复的注册对父节点的监听。这样就实现了服务的自动注册和自动退 出