Raft 算法
系列 - Raft 共识算法
目录
1 Raft 共识算法简介
1.1 设计理念
Raft 将 可理解性(Understandability) 作为首要设计目标,为此主要采用了两大策略:
-
问题分解
将复杂的共识问题拆解为三个相对独立的子问题,使得每个子问题可以单独理解和实现:- 领导者选举(Leader Election)
- 日志复制(Log Replication)
- 安全性(Safety)
-
状态简化
通过减少算法中需要考虑的状态数量,降低系统的整体复杂度,使行为更加清晰可预测。
1.2 三大新颖特性
Raft 在设计中引入了以下三项创新特性,使其相较于 Paxos 更易理解、更适于工程实践:
-
强领导者(Strong Leader)
日志条目仅从领导者单向流向其他服务器,领导者拥有绝对权威,极大简化了日志复制和一致性管理。 -
随机化领导者选举(Randomized Timers)
通过随机化选举超时时间,有效避免选票分裂,实现快速、可靠的领导者选举。 -
联合共识成员变更(Joint Consensus)
采用两阶段过渡方案,在不中断集群服务的前提下安全地增删服务器,避免配置变更期间出现双主问题。
1.3 共识算法的本质任务
共识算法本质任务,就是如何让多台机器上的复制日志(Replicated Log)完全一致
只要共识模块能保证:如果两条日志从起点开始,包含的指令序列完全相同,那么回放这些指令后,状态机的状态必然完全相同。

客户端发送命令 → 共识模块(Consensus Module)将命令写入日志 → 共识模块确保所有服务器日志中的命令序列完全相同 → 每台服务器的状态机按相同顺序执行日志中的命令 → 所有服务器状态最终一致。