Distro
它是 Nacos 社区自研的一种 AP 分布式协议(也是最终一致性协议)。它面向临时实例,保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为一种有状态的中间件应用的内嵌协议,Distro 保证了各个 Nacos 节点对于海量注册请求的统一协调和存储。
设计思想如下:
- Nacos 每个节点都是平等的,都可以处理写请求,同时把新数据同步到其它节点。
- 每个节点只负责部分数据,定时发送自己负责数据的校验值到其它节点来保持数据一致性。
- 每个节点独立处理读请求,及时从本地发出响应。
数据初始化
源码参考 DistroConsistencyServiceImpl
新加入的 Distro 节点会进行全量数据拉取。轮询所有的 Distro 节点,通过向其它机器发送请求拉取全量数据。
在全量拉取操作完成之后,Nacos 的每台机器上都维护了当前的所有注册的临时实例数据。
数据校验
源码参考 TimedSync
在 Distro 集群启动之后,每台机器会定期发送心跳。心跳信息主要为各个机器上的所有数据的元数据。这种数据校验会以心跳的形式进行,即每台机器在固定时间间隔(默认 5 秒)会向其它机器发起一次数据校验请求。
一旦在数据校验过程中,某台机器发现其它机器上的数据与本地数据不一致,则会发起一次全量拉取请求,将数据补齐。
写数据