前言

在现代分布式系统中,多个节点如何就某个“真相”达成一致,是构建可靠系统的核心问题之一。无论是分布式数据库、共识引擎,还是一致性协调服务,**一致性协议(Consensus Protocol)**都是底层基石。Paxos 正是其中最经典、最具理论价值的协议之一。

定义

wiki 定义如下:

Paxos is a family of protocols for solving consensus in a network of unreliable or fallible processors.

一句话:Paxos 是一种在分布式系统中实现多个节点就某个值达成一致的共识算法。

工作原理

一句话:通过多个阶段的投票与提议,使一组节点就某个提案达成共识,即便其中一部分节点失败也能保障正确性。

Paxos 通常由三个角色组成:

  1. Proposer(提议者):发起提案。
  2. Acceptor(接受者):负责投票,决定提案是否被接受。
  3. Learner(学习者):了解哪个提案被通过(已达成共识)。

基本 Paxos 流程包括两个阶段:

  • Prepare 阶段:Proposer 向 Acceptors 发出准备请求(编号 N),Acceptors 承诺不接受编号小于 N 的提案。
  • Accept 阶段:如果 Proposer 收到大多数 Acceptors 的响应,它就发出“接受”请求,包含编号 N 和提案值 V,Acceptors 再次响应是否接受。

当一个提案被多数 Acceptors 接受,则认为“达成共识”。

属性与指标

Paxos 关注以下关键属性:

  1. 安全性(Safety) 永远不会有两个不同的值被同时决定。

  2. 活性(Liveness) 只要大多数节点存活且网络可靠,最终一定可以达成共识。

  3. 故障容忍性 可以容忍 少数派节点故障,一般要求超过半数节点正常。

  4. 最小消息轮次 理论上最少两轮(Prepare 和 Accept),但实践中常需更多轮重试。

  5. 吞吐量与延迟 原始 Paxos 性能较差,主要受限于同步流程和多数派写入。

  6. Leader 角色(在优化版本中) 通过引入 Leader 可以避免多 Proposer 竞争造成的冲突。

类型

Paxos 协议家族

  1. Basic Paxos 原始论文提出的版本,理论为主,不易实现。

  2. Multi-Paxos 实用版本,引入长期 Leader,提高性能,支持多个提案序列。

  3. Fast Paxos 减少消息轮数,但需要更多副本。

  4. Cheap Paxos 使用一个可靠磁盘代替一个投票节点,降低资源成本。

  5. Disk Paxos / Byzantine Paxos 面向特殊场景如非信任环境或持久存储的版本。

  6. Paxos Made Simple / Paxos Made Live 简化版及 Google 实现版本(用于 Chubby 锁服务)。

应用与场景

场景 是否适用 Paxos 说明
分布式协调服务(如锁) 需要强一致性
主从选举 多节点选 Leader
高可用数据库写入 保证写入唯一顺序
最终一致系统(如 Dynamo) 容错性优先,不强一致
区块链共识(如 PoW) 使用更适合开放网络的算法

Paxos 与程序关系

  1. 编程实现复杂 尽管逻辑看似清晰,实现细节多,处理边界条件困难。

  2. 推荐使用成熟框架 如 etcd(Raft 实现)、ZooKeeper(Zab 实现)等已经封装共识过程。

  3. 学习成本高 Paxos 理论晦涩,但是理解其他共识协议的基础。

  4. 对系统延迟敏感 多数派写入和消息往返轮次使 Paxos 对网络质量有较高要求。


常见使用 Paxos 的系统

  1. Google Chubby:分布式锁服务,用于 GFS 和 Bigtable。
  2. Spinnaker:LinkedIn 构建的 Paxos-based 数据库。
  3. Shepard(AWS):EC2 实例状态一致性维护系统。
  4. RAMP Transactions:使用 Paxos 保证分布式事务原子性。
  5. OpenReplica:通用 Paxos 实现框架。

拓展阅读

如果你对 Paxos 感兴趣,以下内容可以进一步学习:

  • Raft 101(比 Paxos 更易于实现)
  • Viewstamped Replication
  • Zab Protocol(ZooKeeper)
  • Byzantine Fault Tolerant Paxos(如 PBFT)