Paxos 共识算法

Paxos 通过提案编号与多数派接受达成共识;基础 Paxos 用于单值决策,Multi-Paxos 通过稳定的领导者扩展到日志复制。

什么是 Paxos 共识算法

Paxos 通过提案编号与多数派接受达成共识:只要多数派存活,系统就能就某个值达成一致。基础 Paxos(Single-Decree)解决单值决策问题,Multi-Paxos 通过选举稳定领导者把阶段一摊薄,扩展到日志复制场景。理解它的重点在多数派交集如何保证安全性,而不是记忆阶段名称。

基本信息

角色提议者(Proposer)、接受者(Acceptor)、学习者(Learner)
核心步骤Prepare/Promise、Accept/Accepted 两阶段
安全性来源任一多数派集合之间必有交集,保证已选定的值不会被覆盖
工程关系Raft 可视为面向工程实现优化的共识协议,与 Multi-Paxos 同源

典型使用场景

  • 分布式元数据管理:选主、配置变更与成员信息需要强一致存储
  • 日志复制:Multi-Paxos 用稳定领导者把连续决策摊薄,提升吞吐
  • 跨机房协调:在多数派可通信的前提下保证决策唯一
  • 分布式锁与租约:就租约归属达成一致,避免双主
  • 配置中心:版本号与配置内容的一致性分发
  • 理解共识原理:作为学习 Raft 等工程实现的对照基线

单值决策流程(简化)

单值决策流程(简化)
# 阶段一:准备
Proposer  -> Prepare(n)          # 提案编号 n 必须全局递增
Acceptor  -> Promise(n)          # 承诺不再接受编号小于 n 的提案
                                  # 若已接受过提案,返回其编号与值

# 阶段二:接受
Proposer  -> Accept(n, v)        # v 若来自已接受值则必须沿用该值
Acceptor  -> Accepted(n, v)
# 多数派接受后该值被选定,Learner 学习结果

# 多值扩展
稳定领导者复用阶段一,连续决策只做阶段二,吞吐显著提升

Paxos 与 Raft 对照

维度Paxos(Multi-Paxos)Raft
角色提议者、接受者、学习者领导者、跟随者、候选者
领导选举未在算法内固定,实现自行处理算法内显式定义选举与任期
日志顺序需自行限定并发提案以保持顺序按任期与索引强制定序
工程落地理解与实现难度高,常见于自研系统实现资料充足,主流共识库多基于此
理解 Paxos 的关键是多数派交集:任意两个多数派集合至少有一个共同成员,因此已选定的值不会被后续提案覆盖。
直接实现基础 Paxos 处理日志流风险很高:并发提案、空洞与恢复逻辑都要自行保证,实践中通常直接用成熟共识库。

易错点

  • 直接用基础 Paxos 处理日志流,性能与正确性都难以保证
  • 混淆「被接受」与「被选定」,读出未达多数派的数据当作已提交
  • 提案编号不严格递增或有重复,导致承诺失效与值被覆盖
  • 忽略持久化要求,接受者在重启后丢失承诺记录,安全性被破坏

数据来源与参考

  • Leslie Lamport《The Part-Time Parliament》(1998)
  • Leslie Lamport《Paxos Made Simple》(2001)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌