# 分布式一致性算法Raft
Paxos自1990年提出以后,相当长时间内几乎已成为分布式一致性算法的代名词。
但因其难以理解和实现,目前知名实现仅有Chubby、Zookeeper、libpaxos几种,其中Zookeeper使用的ZAB对Paxos做了大量改进。
为此,2013年斯坦福的Diego Ongaro、John Ousterhout,提出了新的更易理解和实现的一致性算法,即Raft。
Raft和Paxos均只要保证n/2+1节点正常,即可服务。相比Paxos,其优势即为易于理解和实现。
Raf将算法分解为:选择领导者、日志复制、安全性等几个子问题。
它的流程即为:开始时在集群中选举出Leader负责日志复制的管理,Leader接收来自客户端的事务请求(日志),
并将它们复制给集群中的其他节点,然后通知集群中的其他节点提交日志,Leader负责保证其他节点与它的日志同步。
当Leader宕机时,集群其他节点重新发起选举,选出的新的Leader。
### 角色
Raft涉及三种角色:
* Leader:即领导者,负责处理来自客户端的请求,管理日志复制、以及与Follower保持心跳以维持其领导者地位。
* Follower:即追随者,负责响应来自Leader的日志复制请求,响应来自Candidate的选举请求。初始时所有节点均为Follower。
* Candidate:即候选者,负责发起选举投票,Raft启动后或Leader宕机后