1. 功能

在使用RPC框架的时候各个节点通常需要查询调用方和被调用方的一些元数据, 比如IP,端口,权限控制,限流策略等等
这些关键的信息, 一般放在一个注册中心中保存, 在RPC框架建立连接的时候被查询
并且当元数据发生修改的时候, 注册中心会通知各个节点

2. 选择

由于注册中心的复杂度较高, 我们使用开源产品即可

这里选择使用Nacos

假设我们现在要自己实现注册中心:
最基础的RPC框架在使用注册中心的时候, 注册中心需要实现几个功能

  1. 服务的注册
  2. 服务的查询
  3. 服务的监听
  4. 服务的上线下线通知

这么一看, 不就是他妈的Zookeeper吗??
通过watch临时节点, 完美解决啊

但是, ZK有一个很严重的问题, ZK是CP架构, 为了保证一致性, 当ZK主服务器宕机的时候, 会进行选举, 此时ZK是不可用的, 在大规模微服务系统中, 使用ZK作为注册中心是很危险的, 这相当于产生了一个单点问题
而且, 如果网络架构不合理, zk跨IDC使用, 在IDC之间通信出现问题的时候, zk为了防止脑裂问题, 肯定会有一个IDC的zk直接不可用, 必须人工干预, 非常危险

推荐使用Nacos或者Eureka,
Nacos可以选择是AP还是CP模式, 可以根据需求使用还附赠配置中心功能, 多方便
Eureka是AP模式, Spring官方支持的中间件, 也非常可靠, 文档齐全