nacos源码解析——集群间数据同步

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


前言

之前分析过eurekaeureka是一个AP的注册中心,他的节点间数据同步是通过p2p来进行的,而nacos既是CP系统也是AP系统,临时节点的数据是存储在内存中,节点间的同步是通过P2P方式,永久节点则是通过raft来实现数据的一致性的,是属于CP的。


1、临时节点集群间同步

在服务注册的时候,如果是临时节点,我们会调用DistroConsistencyServiceImpl#put方法,之前讲解过写入map和写入内存队列,最后还会将变更数据同步到集群中的其他节点,这次来剖析一下同步流程,这里默认延迟时间是2s,然后/21s

在这里插入图片描述

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方法,这里匹配到的processorDistroHttpDelayTaskProcessor

在这里插入图片描述

1.6、DistroHttpDelayTaskProcessor#process

这里又封装成一个DistroHttpCombinedKeyExecuteTask,然后把这个task交给任务执行引擎
在这里插入图片描述

1.7、NacosExecuteTaskExecuteEngine#addTask

这里根据任务获取processor,这里没有处理这个任务的processor,所以会通过hash的方式获取一个TaskExecuteWorker,然后调用其processor方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值