05-Spring Cloud Alibaba Nacos注册中心GRPC总结
Nacos2.X相比1.X中,AP模式不在采用Http的形式进行客户端与服务端的通信,而是采用GRPC。CP模式的通信方式不变,并不在允许临时实例与非临时实例混用,并在Nacos2.x中采用大量事件,通过事件进行驱动。
Nacos基本组成
-
服务注册
Nacos client会向Nacos service 发送Grpc请求,其中包括ip、端口、namespace和groName等信息,并发布,服务注册事件,服务元数据变更事件,客户端变更事件,实例元数据变更事件;其中注册事件是将实例信息推送所有客户端,并建实例保存在注册表中
-
服务发现
Nacos client会向Nacos service 发送Grpc请求,获取注册时注册表中的全部实例信息,并缓存到本地,同时client会开启定时任务来定期获取注册表信息
-
服务间信息同步
服务间信息同步是在客户端变更事件和客户端断开事件中完成,发送DistroDataRequest请求,其他service端DistroDataRequestHandler中处理
-
服务端与客户端健康检查
客户端容器初始化时NacosNamingService会创建两个线程,一个是处理连接成功与断开的线程,另一个是处理异步重连和健康检查的线程;健康检查就是在这里进行的,默认五秒发一次请求,不健康设置重连上下文,发起重连请求
-
服务间心跳
AP模式采用的是Distro协议,每个节点都是平等的处理数据,不同的服务之间数据是弱一致的;Distro协议是保证每个服务之间数据的最终一致,服务之间是互相推送各自的数据,不存在心跳一说,数据同步在上面服务信息同步中描述;在CP中采用的Raft协议,采用两阶段提交,节点之间并不平等,客户端发生变化是先将信息提交给master,master再将信息提交给其余节点,要求其余节点要半数以上的节点返回成功才判定信息同步成功并返回,而master面临宕机、网络等因素的风险,所以服务间需要心跳探知当前存活的节点数,master是否需要重新选举等
Nacos 常见处理事件
事件名 | 描述 | 监听处理 |
---|---|---|
ClientChangedEvent | 客户端变更事件 | 向其他服务同步客户端变化 |
ClientDisconnectEvent | 客户端断开事件 | 向其他服务同步客户端删除信息,删除本地元数据缓存 |
ServiceMetadataEvent | 服务元数据变更事件 | 更新本地元数据缓存 |
ClientRegisterServiceEvent | 客户端注册事件 | 更新注册表 |
InstanceMetadataEvent | 实例元数据事件 | 记录本地缓存文件,更新本地缓存 |
ClientDeregisterServiceEvent | 客户端注销事件 | 更新缓存,发布ServiceChangedEvent |
ClientSubscribeServiceEvent | 客户端订阅事件 | 更新缓存,发布ServiceSubscribedEvent |
ClientUnsubscribeServiceEvent | 客户端退订事件 | 更新缓存 |
ServiceSubscribedEvent | 服务订阅事件 | 事件处理与ServiceChangedEvent处理差不多,只推送目标客户端 |
ServiceChangedEvent | 服务变更事件 | 将变化推送所以客户端 |