什么是共识算法?
共识算法:多个分布的节点无论在什么情况下都能达成一致的算法。使消息保持一致性的手段。
raft共识算法即为更容易懂的共识算法。
Raft共识算法可以分成两个部分
Leader Selection
Log Replication
Leader Selection 即为选leader的过程
每个节点有三种状态: follower,candidiate, leader
最开始的状态都是follower,节点上有倒计时器(time start/ time out)
在该节点的计时器timeout 之后,在没有leader给他发消息的前提下,该节点的状态就会转换为candidate,给其他的所有节点发送requestVote(让大家给他投票)
如果一半以上的节点投支持票(包括candidate本身也会给自己投票),candidate会变为leader。该节点状态则会变为leader,并且每一小段时间后,都会给所有的节点发送hearBeat来保持所有节点的状态(使他们都保持为follower,不让倒计时结束)
会导致计时器重置的情况:
1. 收到candidate的requestVote
2. 收到leader的heartBeat
特殊情况:
Q1: leader挂掉
A1: 重新选取leader2,等之前leader1重新连线之后发现他已经比leader2小了,自动降级成为follower
Q2: 多个candidate同时选举
A2: 已投过票的follower不会给其他的follower投票。倒计时一直在运行直到一个leader被选出
Log Replication 复制
客户端把所有的请求发送给leader,再由leader按照次序分别发送给follower。
信息有两种状态:commited 和 uncommited
首先客户端把信息发送给leader,leader再将信息发送给follower。 在这时,leader中的该条信息状态是uncommited,直到超过半数的节点给leader回了确认收到,状态才会变成commited。变成commited之后,leader会返回客户端收到消息,也会再给follower发送消息,这时follower的信息状态也变成commited。
参考资料:
2. 一则动画(对理解非常有帮助,时长约为3分钟) Raft