注册中心

1 什么是注册中心

在微服务架构中,注册中心是核心的基础服务之一。

注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。

2 为什么要有注册中心

通常,在微服务系统中,如果我们现在的会员服务要调订单服务,就只能把ip写死,一旦Ip变更,或者扩容(再增加机器),会员服务就感受不到

image-20230228221602827

所以需要手动维护一个注册表,增加订单服务的时候,去注册表里注册(服务注册),需要调用的时候,先去注册表里查(服务发现),再调用。但是当某个节点宕机的时候,我们再去调用就有问题,所以需要借助某些手段可以自动感知到服务下线。

image-20230228221614178

3 注册中心实现

注册中心去实现的时候得支持服务注册和服务发现

  • 服务注册:就是需要维护一个注册表,存储服务和服务地址的映射关系。所以需要可以存储数据
  • 服务发现:当服务要调用的时候,通过读取服务注册表获取可用的服务信息,客户端可以通过此信息连接服务器

注:

  1. 为了提高性能,可以在server端,自己维护一份注册中心的缓存,只有第一次调用时才需要连接zookeeper或者redis

  2. 同一个server, 每次新加一个ip都需要重新查询一次,从而更新缓存。因此zookeeper和redis还能做注册中心的一个条件是,他们能够监听数据的变化(redis具有消费订阅,zookeeper具有watch机制),当数据发生改变时,会收到消息,从而更新列表

  3. 某个IP对应的服务挂掉的时候,也需要更新注册表,因此需要类似心跳机制,来检测服务是否挂掉,挂掉后,需要移除该服务。(redis的过期时间,zookeeper的临时节点)

3.1 基于mysql 实现注册中心

image-20230228221628038

  • 订单服务启动时,调用注册接口,也就是insert,将服务名,ip,端口以及状态进行存储,对应生成注册表
  • 每次调用订单服务前,都先去注册表里查询服务列表,执行select
  • 维护 一个心跳,定期去感应下节点状态是否正常,比如ping一下端口,如果不正常,修改此时节点状态

3.2 基于zookeeper实现注册中心

  • 创建父节点,用于管理服务节点
  • 订单服务启动时,在这个父节点上创建临时子节点,用来存储服务和服务地址的映射关系,对应生成注册表
  • 每次调用订单服务前,都先去注册表里查询服务列表
  • zookeeper有监听通知机制,可以天然感受到服务是否在线,如果对某个节点进行监听,当这个节点被删除,或者被修改时,监听方会感知到修改消息。所以这里,我们只需要监听父节点

创建该节点的 Zookeeper 客户端与 Zookeeper 服务端断开连接时,该节点会被 Zookeeper 服务端移除。使用临时节点来维护 Server 的地址列表就保证了请求不会被分配到已经停机的服务上。

image-20230228221650614

3.3 redis 实现注册中心


注册中心
http://example.com/注册中心/
作者
Panyurou
发布于
2022年9月19日
许可协议