从0到0.1学习 raft 共识算法

什么是共识算法?

共识算法:多个分布的节点无论在什么情况下都能达成一致的算法。使消息保持一致性的手段。

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。

参考资料:

1. 共识算法:Raft - 简书

2. 一则动画(对理解非常有帮助,时长约为3分钟) Raft

猜你喜欢

转载自blog.csdn.net/ptyp222/article/details/110931672