Raft 算法是一类基于日志复制的分布式共识算法,旨在提供与 Multi-Paxos 共识算法相同的容错性和性能的前提下,追求更好的可理解性和工程可实现性。Paxos 算法为分布式系统面临的共识问题提供了解决思路,但其难以理解的特性一直被大家所诟病,更不用说工程实现,这也是 Raft 算法诞生的主要动因。
Raft 算法的作者认为可理解性和工程可实现性也是一个优秀分布式共识算法所应该具备的特性,并通过以下两点保证算法的可理解性:
- 问题分解 :将分布式共识问题拆分成主节点选举、日志复制、安全点,以及成员变更 4 个独立子问题逐一进行解决。
- 简化状态 :通过增强某些阶段的一致性程度(例如约束能够成为下一任 Leader 的参选节点条件),以减少算法需要考虑的系统状态数量。