Nacos 数据一致性
2021-06-15 17:56:07 0 举报
Nacos中AP和CP模型
作者其他创作
大纲/内容
RaftConsistencyServiceImpl
DistroDelayTaskProcessor构建具体行为的异步任务,交由InnerWorker调度执行
NacosDelayTaskExecuteEngine
其他集群节点
DistroController的onSyncDatum()方法
taskProcessors中是否存在key对应的NacosTaskProcessor
否
DistroConsistencyServiceImpl
POST
Service的onChange方法
getProcessor()
ProcessRunnable中的run()方法遍历执行tasks中所有的任务
EphemeralConsistencyService最终一致性
InnerWorker
onPut保存数据到缓存dataMap
PUT
定时任务延迟100ms执行每100ms执行一次
ProcessRunnable
syncToTarget()
UdpPushService发布ServiceChangeEvent事件
RaftControlleronPublish()方法
客户端ReceiverDatagramSocket接收更新本地服务实例列表
DatagramSocket推送
RaftCore.onPublis()方法写入本地磁盘、缓存、刷新term+100发布ValueChangedEvent事件
DelegateConsistencyServiceImpl一致性服务代理
否,则默认
put()
DistroProtocol的sync方法遍历其他集群节点,进行数据同步
TaskExecuteWorker
当前节点是否为Leader
是DistroHttpDelayTaskProcessor
raftProxy.proxyPostLarge转发给Leader节点
RaftCore.signalPublish()
Notifier的addTask()添加通知任务
构建DistroDelayTask并添加到NacosDelayTaskExecuteEngine的tasks中
PersistentConsistencyService强一致性
DistroConsistencyServiceImpl.onPut()
1、通过CountDownLatch控制半数提交,2、遍历所有的节点,leader节点直接进行countDown()操作,通过Http异步post请求将数据发送给集群中的其他节点3、CountDownLatch阻塞5s等待请求响应
InnerWorker消费queue任务
DistroHttpAgent进行远程通信
Leader节点RaftController中publish()方法接收请求
对任务进行重新封装,添加到TaskExecuteWorker的queue
0 条评论
下一页