本文来自我的文章分布式一致性和分布式共识协议太长,因此将其中的Raft部分单独列出来作为一篇文章。
Raft协议的设计者们认为Paxos协议非常难于理解,并且需要作出很多修改才能够应用到工程中,因此设计了偏重于实现的Raft协议,这甚至体现在他们的论文标题《In Search of an Understandable Consensus Algorithm(Extended Version)》上,此外作者也提供了一个C++版本的实现liblogcabin。Raft协议主要分为三个模块,Leader election、Log replication和Safety。
Raft将服务器节点分为Leader、Candidate和Follower三种,协调者被称为领袖/主(Leader),参与者被称为群众(Follower)。相对于其他的协议,Raft中的Leader更强,这体现在:
- Leader是唯一的。
- Log entries只能从Leader发送给其他服务器,事实上Follower不主动发送,而只响应来自Leader和Candidate的请求。
- 客户端只能和Leader交互,如果客户端首先连上了Follower,那么会被Follower转发给Leader。
- Raft的独特之处还在于其在Leader election的过程中Raft使用了随机计时器进行超时。此外,Raft还提供了一个joint consensus的算法处理Membership changes的问题。