目录

Raft 算法

系列 - Raft 共识算法

Raft 算法官网

Raft 将 可理解性(Understandability) 作为首要设计目标,为此主要采用了两大策略:

  • 问题分解
    将复杂的共识问题拆解为三个相对独立的子问题,使得每个子问题可以单独理解和实现:

    • 领导者选举(Leader Election)
    • 日志复制(Log Replication)
    • 安全性(Safety)
  • 状态简化
    通过减少算法中需要考虑的状态数量,降低系统的整体复杂度,使行为更加清晰可预测。

Raft 在设计中引入了以下三项创新特性,使其相较于 Paxos 更易理解、更适于工程实践:

  1. 强领导者(Strong Leader)
    日志条目仅从领导者单向流向其他服务器,领导者拥有绝对权威,极大简化了日志复制和一致性管理。

  2. 随机化领导者选举(Randomized Timers)
    通过随机化选举超时时间,有效避免选票分裂,实现快速、可靠的领导者选举。

  3. 联合共识成员变更(Joint Consensus)
    采用两阶段过渡方案,在不中断集群服务的前提下安全地增删服务器,避免配置变更期间出现双主问题。

共识算法本质任务,就是如何让多台机器上的复制日志(Replicated Log)完全一致

只要共识模块能保证:如果两条日志从起点开始,包含的指令序列完全相同,那么回放这些指令后,状态机的状态必然完全相同。

共识模块流程

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