← 返回题目列表

Paxos 和 Raft 有什么区别?

高频 中等 第 4 / 26 题 更新于 2026/09/30
PaxosRaft共识算法Multi-Paxos
学习 AI 实战项目

简化版

Paxos 和 Raft 都用于崩溃故障模型下的多数派共识,安全基础都是 quorum 交集。 经典 Paxos 描述单值提案的 Prepare/Accept,工程日志通常使用 Multi-Paxos;Raft 将问题拆成 Leader 选举、日志复制和成员变更,并用强 Leader 与日志新旧规则提升可理解性。 不能简单说 Raft 更强或 Paxos 更慢,性能取决于实现、持久化、批处理和网络。

详细版

Paxos 的 proposer、acceptor、learner 是逻辑角色,同一进程可以兼任。 提案编号保证较新的 proposer 继承多数派已经接受的值。 Multi-Paxos 在稳定 Leader 下复用第一阶段,为连续日志槽位执行第二阶段。

Raft 通过 term、RequestVote、AppendEntries 和 commitIndex 管理连续日志。 候选人只有日志至少一样新才可能当选,Leader 通过前缀匹配修复 Follower。 Raft 规范更完整地覆盖复制日志与成员变更;Paxos 是算法家族,工程系统常有自定义扩展。

完整版教学

一、共同目标

两者都要保证即使节点崩溃、消息丢失重复乱序,也不会决定两个冲突值。 N 个投票节点通常需要超过 N/2 的 quorum。 只要成功 quorum 必然相交,交点可把已接受历史带到后续轮次。

对比时应比较 Multi-Paxos 与 Raft 日志复制,而不是拿单值 Basic Paxos 直接对比完整 Raft。

二、Basic Paxos 的两阶段

Phase 1: proposer -> acceptors: prepare(n)
         acceptors -> proposer: promise + highest accepted
Phase 2: proposer -> acceptors: accept(n, value)
         majority accepted -> chosen

Proposer 必须选择 Phase 1 多数响应中最高编号已接受的值;若没有,才可选自己的值。 这条规则保护已经可能被选定的值。

三、Multi-Paxos 如何形成日志

为每个日志 slot 单独跑完整 Paxos 成本很高。 稳定 Leader 获得足够高的 ballot 后,可为连续 slot 复用 Phase 1,正常写走类似一次多数派接受。 Leader 变化时再恢复各 slot 的已接受状态。 不同 Multi-Paxos 实现对日志补洞、成员变更和学习路径细节不同。

四、Raft 的结构

Raft 使用 term 组织领导时代。 选举时比较 lastLogTerm 与 lastLogIndex,日志不够新的候选人拿不到多数票。 Leader 用 AppendEntries 的 prevLogIndex/Term 保证前缀匹配。 当前任期日志复制到多数后推进 commitIndex,再按序应用。

五、主要差异

维度Paxos/Multi-PaxosRaft
基本描述提案、承诺、接受任期、选举、日志复制
LeaderBasic Paxos 不要求稳定 Leader强 Leader 模型
日志需由 Multi-Paxos 构建协议直接描述
成员变更依实现扩展常用联合共识/单节点变更
教学目标精炼安全核心可理解、可实现

两者都不是拜占庭容错协议。

六、性能不能凭名字判断

稳定 Leader 下,两者都可把正常写优化为 Leader 到多数派的一轮复制确认。 真正瓶颈常是 fsync、批处理、流水线、网络 RTT、状态机和流控。 某个 Paxos 系统可能比某个 Raft 实现更快,反之亦然。 比较必须固定持久化语义、复制因子和成功确认条件。

七、工程选型

优先看实现成熟度、运维工具、成员变更、快照、读语义、生态和团队经验。 不要自己从论文片段拼一个“类 Paxos”用于核心数据。 协议库的线性一致读、磁盘损坏处理和配置变更常比算法名称更重要。 故障演练要覆盖丢包、暂停、重启、落后节点和成员变更。

八、常见误区与追问

  • 误区:Paxos 没有 Leader。 Basic Paxos 不要求唯一 Leader,Multi-Paxos 常用稳定 Leader 优化。
  • 误区:Raft 不会脑裂因为只有一个 Leader。 不同 term 可短暂有旧 Leader,但只有多数派能安全提交。
  • 误区:Raft 一定比 Paxos 性能好。 性能由具体实现和确认路径决定。
  • 误区:两者能容忍恶意节点。 它们主要处理 crash fault,不是 BFT。
  • 追问:为什么比较 Multi-Paxos? 生产系统复制连续日志,而 Basic Paxos 只决定单个值。
  • 追问:两者共同安全基础是什么? quorum 交集和更高轮次继承已接受值。
  • 追问:如何选型? 选经过验证、可运维且语义满足业务的实现。

九、加强记忆

  1. Paxos 与 Raft 都依赖多数派交集。
  2. Basic Paxos 决定单值,Multi-Paxos 才对应日志。
  3. Raft 用强 Leader 和模块化规则提高可理解性。
  4. 二者都处理崩溃故障而非恶意节点。
  5. 性能和可靠性必须比较具体实现,不比较算法口号。