分布式一致性算法:Raft

分布式系统的一致性算法就是指一组机器协同工作,即便其中有某些机器宕机了,系统还能正常对外提供服务。以前通常都喜欢用Paxos来讲解一致性算法,但是Paxos本身很复杂,代码实现也很难,于是催生了Raft这个更加简单易懂的一致性算法,难得的是,它的效果跟Paxos差不多。 为了易于理解,Raft采用了算法分解(分为leader选举,日志复制以及安全性)和减少状态的方式。与以往一致性算法不同的是,Raft有一些特别的地方: 强Leader。Raft使用了一个强Leader特性,日志复制只能从Leader节点复制到其他节点。 Leader选举。Raft使用了一个随机超时来选举Leader,以确保选举不会失败。 成员变化。Raft使用了联合一致性方法来实现成员配置变化时保证服务不受影响。 1. Raft 节点状态 在分布式系统上,每台服务器相当于一个分布式网络节点,每个节点有三种状态:Follower,Candidate,Leader,状态之间是互相转换的,可以参考下图,具体的后面说。 每个节点上都有一个倒计时器 (Election Timeout),时间随机在 150ms 到 300ms 之间。有几种情况会重设 Timeout: 收到选举的请求 收到 Leader 的 Heartbeat (后面会讲到) 在 Raft 运行过程中,最主要进行两个活动: 选主 Leader Election 复制日志 Log Replication 2. 选主 Leader Election 2.1 正常情况下选主 假设现在有如图5个节点,5个节点一开始的状态都是 Follower。 在一个节点倒计时结束 (Timeout) 后,这个节点的状态变成 Candidate 开始选举,它给其他几个节点发送选举请求 (RequestVote) 其他四个节点都返回成功,这个节点的状态由 Candidate 变成了 Leader,并在每个一小段时间后,就给所有的 Follower 发送一个 Heartbeat 以保持所有节点的状态,Follower 收到… Continue reading 分布式一致性算法:Raft