其他分享
首页 > 其他分享> > euaka zookeeper nacos 的原理区别

euaka zookeeper nacos 的原理区别

作者:互联网

1.SpringCloud Alibaba 微服务架构(十四)- Nacos集群部署原理解析

https://thinkingcao.blog.csdn.net/article/details/109776410

2. raft算法以及nacos中的实现

   学习资料:https://blog.csdn.net/microGP/article/details/114261089

nacos是基于raft算法是实现的,raft算法是分布式系统一致性算法, Raft算法的头号目标就是容易理解(UnderStandable),这从论文中就可以看出来。当然,Raft增强了可理解性,在性能、可靠性、可用性方面是不输于Paxos的。建议大家拜读下作者的论文Raft论文

一.选取主节点

raft协议中,一个节点任一时刻处于以下三个状态之一:

leader:主节点

follower:从节点

candidate:候选节点

        可以看出所有节点启动时都是follower状态;在一段时间内如果没有收到来自leader的心跳,从follower切换到candidate,发起选举;如果收到N/2+1的赞成票(含自己的一票)则切换到leader状态;如果发现其他节点已经是leader,则主动切换到follower。

 

term:

关于term,网上没有什么特别好的解释,这里暂且认为是一个逻辑计数,用来证明谁是最新的,越大就说明节点数据越新,越应该成为leader。

以nacos选举为例,具体讲下选举过程:

1.三个节点刚启动的时候,此时都是follower,nacos先从缓存中加载数据,默认term是0

masterTask 是follower长时间没收到心跳就选举的定时任务,设置的是500ms一次

heartbeatTask 是心跳定时任务 500ms秒一次

 

MasterElection实现了Runnable方法,满足条件下,进行sendVote

 

sendVote

超过半数,设置成leader

   

2.与其他节点比较的代码

判断本地的term值和远程的term值,谁大则选谁

 

3.如果第一次没有N/2+1个以上的ip选举成功,0.5s后发起另外一次请求,前面说过,每个节点发起投票的时候是不一样的,所以term增加的值是不一样的,所以总是会出现某个term较大,选举成功。一直不成功的概念极小。

 

二.数据同步 日志同步

当系统有了leader后,系统就进入对外工作期了。客户端的一切请求来发送到leader,leader来调度这些并发请求的顺序,并且保证leader与followers状态的一致性。在 raft 集群中,所有日志都必须首先提交至 leader 节点。leader 在每个 heartbeat 向 follower 同步日志。

 

在nacos中的实现:

raft算法首先要把信息同步给leader,由leader分发给所有follower

 

具体流程可见 https://www.processon.com/view/5e25b762e4b04579e409e81f

    https://blog.csdn.net/liyanan21/article/details/89320872

三.safety:安全实现的保障机制

上面讲的都是正常情况下,对于异常情况,也需要有对应的处理策略。

好像并没有,通过客户端的心跳检测机制,自动恢复数据

标签:term,zookeeper,nacos,leader,follower,euaka,raft,节点
来源: https://www.cnblogs.com/kelelipeng/p/16625183.html