最近两周花业余时间把raft论文读了一遍, 每一次读都会发现新的东西, 好的论文值得反复阅读以及思考. 这里我先选择几个点谈下自己的理解. raft是用来管理复制日志一致性的算法. 类似paxos, 但是是比paxos更容易让人明白和实现. raft算法允许一组服务器程序保持他们的状态或者数据的一致, 并且允许个别服务器程序挂掉, 所以很多大型程序都使用了raft算法来构建高可用特性. raft利用心跳机制来触发选主. 集群中服务器启动的时候是以follower的角色启动的. leader定时发送心跳包给follower(AppendEntries RPCs)来维持主从之间的关系. 当follower超过一定时间(election timeout)还没收到交互消息(除了leader发的消息还包括candidate给从发的消息), 从认为没有主, 触发新的选主流程. 选主开始的时候, follower增加它的term, 并且从follower转变为candidate状态. 然后先给自己投票, 再并行的发送RequestVote RPC消息给集群中的其它节点. candidate将保持当前状态, 一直到一下几件事发生: candidate赢得选举; 其它节点赢得选举;超过一定时间上述两个事件都没发生.