Paxos 算法是分布式系统中最著名的共识算法,由 Leslie Lamport 于 1990 年提出。它是所有现代共识算法(如 Raft, ZAB)的鼻祖,被认为是分布式系统领域最基础也最重要的算法之一。

“There is only one consensus protocol, and that’s Paxos — all other approaches are just broken versions of Paxos.” —— Mike Burrows (Google Chubby 作者)

核心设计思想

Paxos 的目标是在一个可能发生节点故障、网络延迟或丢包的分布式系统中,就某个值达成一致。它通过两阶段提交(Two-Phase Commit)的变体来确保一致性。


角色划分

在 Paxos 算法中,节点被划分为三种角色。关于为什么要区分这些角色,请参考 Paxos 为什么需要区分 Proposer 和 Acceptor?

  1. Proposer (提议者):负责发起提案(Proposal)。
  2. Acceptor (决策者):负责对提案进行投票和决策。
  3. Learner (学习者):不参与决策,只负责获取最终达成的共识结果。

注:在实际工程实现中,一个节点通常同时承担多个角色。


算法流程 (Basic Paxos)

Basic Paxos 达成一次共识需要经历“准备”和“接受”两个阶段。详细的步骤定义、图解及状态机说明请参考:

Basic Paxos 算法流程详解


Paxos 的变体

由于 Basic Paxos 只能就单个值达成共识,且存在“活锁”风险,实际应用中更多使用其变体:

  • Multi-Paxos:通过引入 Leader 角色,跳过第一阶段的 Prepare,直接进行 Accept,大大提高了性能。
  • Fast Paxos:进一步减少消息延迟。

优缺点

优点

  • 数学证明完备:在非拜占庭环境下,保证了强一致性。
  • 高容错性:只要多数派存活,系统即可运行。

缺点

  • 极其复杂:理解和实现都非常困难。
  • 活锁问题:多个 Proposer 交替提出更高编号的提案可能导致系统无法达成共识。

工业级应用

  • Google Chubby:分布式锁服务。
  • Apache ZooKeeper:虽然使用的是 ZAB 协议,但其核心思想深受 Paxos 影响。
  • Microsoft Autopilot:集群管理系统。