内容提要
最近给silly实现了etcd driver,下一步要基于etcd实现分布式框架。在学习raft之前,先查了一大堆中文资源,最后只能啃CONSENSUS: BRIDGING THEORY AND PRACTICE。本文从leader选举、日志复制和安全性三个方面描述了raft算法。raft使用心跳机制触发leader选举,选举机制包括follower、candidate和leader三种状态。选举超时后,candidate增加term并重新发起选举。日志复制基于quorum保证可靠性,leader将日志追加到自己的日志中,并通过AppendEntries RPCs请求follower也追加。安全性要求candidate包含所有已经处于committed的日志。
关键要点
-
最近实现了etcd driver,计划基于etcd实现分布式框架。
-
需要了解etcd的边界和一致性问题,学习raft算法的基本概念。
-
参考了CONSENSUS: BRIDGING THEORY AND PRACTICE,重点理解raft算法的leader选举、日志复制和安全性。
-
raft使用心跳机制触发leader选举,进程状态分为follower、candidate和leader。
-
选举超时后,candidate增加term并重新发起选举,确保只有一个leader。
-
日志复制基于quorum保证可靠性,leader将日志追加到自己的日志中,并请求follower也追加。
-
安全性要求candidate包含所有已经处于committed的日志,确保选举的有效性。
-
raft的日志机制确保不同服务器间的日志保持一致,简化系统行为并提高可预测性。
-
raft规定candidate必须包含所有已committed日志才能胜出选举,确保日志不丢失。
-
leader只能提交当前日志,不能提交前任日志,以避免覆盖已committed日志。