注册中心
1 什么是注册中心
在微服务架构中,注册中心是核心的基础服务之一。
注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
2 为什么要有注册中心
通常,在微服务系统中,如果我们现在的会员服务要调订单服务,就只能把ip写死,一旦Ip变更,或者扩容(再增加机器),会员服务就感受不到

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

3 注册中心实现
注册中心去实现的时候得支持服务注册和服务发现
- 服务注册:就是需要维护一个注册表,存储服务和服务地址的映射关系。所以需要可以存储数据
- 服务发现:当服务要调用的时候,通过读取服务注册表获取可用的服务信息,客户端可以通过此信息连接服务器
注:
为了提高性能,可以在server端,自己维护一份注册中心的缓存,只有第一次调用时才需要连接zookeeper或者redis
同一个server, 每次新加一个ip都需要重新查询一次,从而更新缓存。因此zookeeper和redis还能做注册中心的一个条件是,他们能够监听数据的变化(redis具有消费订阅,zookeeper具有watch机制),当数据发生改变时,会收到消息,从而更新列表
某个IP对应的服务挂掉的时候,也需要更新注册表,因此需要类似心跳机制,来检测服务是否挂掉,挂掉后,需要移除该服务。(redis的过期时间,zookeeper的临时节点)
3.1 基于mysql 实现注册中心

- 订单服务启动时,调用注册接口,也就是insert,将服务名,ip,端口以及状态进行存储,对应生成注册表
- 每次调用订单服务前,都先去注册表里查询服务列表,执行select
- 维护 一个心跳,定期去感应下节点状态是否正常,比如ping一下端口,如果不正常,修改此时节点状态
3.2 基于zookeeper实现注册中心
- 创建父节点,用于管理服务节点
- 订单服务启动时,在这个父节点上创建临时子节点,用来存储服务和服务地址的映射关系,对应生成注册表
- 每次调用订单服务前,都先去注册表里查询服务列表
- zookeeper有监听通知机制,可以天然感受到服务是否在线,如果对某个节点进行监听,当这个节点被删除,或者被修改时,监听方会感知到修改消息。所以这里,我们只需要监听父节点
创建该节点的 Zookeeper 客户端与 Zookeeper 服务端断开连接时,该节点会被 Zookeeper 服务端移除。使用临时节点来维护 Server 的地址列表就保证了请求不会被分配到已经停机的服务上。

3.3 redis 实现注册中心
注册中心
http://example.com/注册中心/