一、服务注册发现
nacos注册:
1、客户端调用API接口注册实例,封装ip、端口、服务名等为instance对象
2、服务端通过ApplicationListener注册监听,触发监听事件处理请求将参数封装为pair对象放入阻塞队列
3、 线程池调用线程异步处理从队列中取出pair,信息往set集合写完成注册
4、 注册实例同时定时发送心跳:循环嵌套延时(5s)调用API接口,服务端间隔时间内无心跳会先健康状态变为false,再检测不到心跳会删除服务实例(30s)
服务发现:调用nacosserver接口定时拉取服务注册列表, 从注册表中选择实例调用。
Ribbon底层实现是将实例中的ip、端口替换至http请求的url,发起请求。
nacos更新注册表使用copyonwrite机制防止并发读写冲突。复制注册表副本,修改副本完成再赋给新注册表。
完整注册表是 双层map,适应不同环境不同服务。namespace:开发环境或者测试环境等等
简要说明nacos的ap模式与cp模式:
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
nacos实现cp通过选举leader节点需要超过半数投票,ap是同步实例信息至其他节点。
备份下参考[3]中的源码分析图:
参考:
[1] https://www.bilibili.com/video/BV1vK4y1N7tC
[2] https://nacos.io/zh-cn/docs/open-api.html
[3] https://blog.csdn.net/weixin_42437633/article/details/105337390