文章目录
- 前言
- 1、临时节点集群间同步
-
- 1.1、DistroProtocol#sync
- 1.2、DistroProtocol#syncToTarget
- 1.3、NacosDelayTaskExecuteEngine#addTask
- 1.4、NacosDelayTaskExecuteEngine构造方法
- 1.5、ProcessRunnable#run
- 1.6、DistroHttpDelayTaskProcessor#process
- 1.7、NacosExecuteTaskExecuteEngine#addTask
- 1.8、TaskExecuteWorker#process
- 1.9 InnerWorker#run
- 1.10 DistroHttpCombinedKeyExecuteTask#run
- 1.11 DistroDelayTaskProcessor#process
- 1.12、DistroSyncChangeTask#process
- 1.13、DistroSyncChangeTask#doExecute
- 1.14、DistroHttpAgent#syncData
- 1.15、NamingProxy#syncData
- 1.16、DistroController#onSyncDatum
- 1.17、DistroController#onSyncDatum
- 1.18、DistroConsistencyServiceImpl#onSyncDatum
- 2、永久节点集群间同步
前言
之前分析过eureka,eureka是一个AP的注册中心,他的节点间数据同步是通过p2p来进行的,而nacos既是CP系统也是AP系统,临时节点的数据是存储在内存中,节点间的同步是通过P2P方式,永久节点则是通过raft来实现数据的一致性的,是属于CP的。
1、临时节点集群间同步
在服务注册的时候,如果是临时节点,我们会调用
DistroConsistencyServiceImpl#put方法,之前讲解过写入map和写入内存队列,最后还会将变更数据同步到集群中的其他节点,这次来剖析一下同步流程,这里默认延迟时间是2s,然后/2是1s

1.1、DistroProtocol#sync
这里会遍历所有成员,然后抛去自己,然后调用
syncToTarget方法

1.2、DistroProtocol#syncToTarget
这里他会把节点的地址也封装到
DistorKey中,然后包装成一个Task,交给延迟任务引擎来处理

1.3、NacosDelayTaskExecuteEngine#addTask
这里就是判断如果任务存在就合并,不存在就添加进去,我们看下什么时候执行任务,肯定会从任务队列中获取任务然后执行。

1.4、NacosDelayTaskExecuteEngine构造方法
这里会创建一个延迟定时任务,每
100ms执行一次,对应执行的任务在ProcessRunnable#run中

1.5、ProcessRunnable#run
这里会从队列中获取任务,然后根据
taskKey去获取对应的processor,调用调用process方法,这里匹配到的processor是DistroHttpDelayTaskProcessor

1.6、DistroHttpDelayTaskProcessor#process
这里又封装成一个DistroHttpCombinedKeyExecuteTask,然后把这个task交给任务执行引擎
1.7、NacosExecuteTaskExecuteEngine#addTask
这里根据任务获取
processor,这里没有处理这个任务的processor,所以会通过hash的方式获取一个TaskExecuteWorker,然后调用其processor方法

本文深入探讨了Nacos中临时节点和永久节点的集群间同步机制。对于临时节点,数据通过P2P方式进行同步,涉及DistroProtocol、NacosDelayTaskExecuteEngine等组件,最终通过HTTP同步到其他节点。而对于永久节点,Nacos使用基于Raft的协议,包括选举和心跳过程,确保数据的一致性。详细阐述了各个步骤和关键方法,揭示了Nacos高可用和数据一致性的实现原理。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



