
























Paxos 和 Raft 是分布式系统中解决共识问题(Consensus Problem)的两个最核心算法。简单来说,它们的目标是让分布式集群中的多个节点,在面对网络延迟、丢包或节点宕机的情况下,依然能对某个数据(比如“谁当老大”或“下一条日志是什么”)达成一致。
如果把分布式系统比作一个团队,这两个协议就是团队的决策机制。
下面详细介绍这两个协议及其优缺点。
Paxos 由 Leslie Lamport(2013 年图灵奖得主)在 1990 年提出。它是分布式一致性领域的理论基石,后续的很多协议(包括 Raft)都深受其影响。
Paxos 的核心思想是“少数服从多数”。只要集群中超过半数($N/2 + 1$)的节点存活并达成一致,系统就能正常工作。
它定义了三种角色:
基本流程(两阶段提交):
Prepare(N)。Acceptor 如果承诺不接受更小编号的提案,就会回复“承诺”以及它之前接受过的最大编号的提案值。Accept(N, V)。这里的 $V$ 很关键:如果 Acceptor 返回了之前接受过的值,Proposer 必须使用那个值;如果没有,才能用自己的值。Acceptor 收到后如果没收到更大编号的 Prepare,就接受该提案。| 维度 | 优点 | 缺点 |
|---|---|---|
| 理论性 | 极其严谨。有严格的数学证明,安全性(Safety)无懈可击。 | 晦涩难懂。Lamport 的论文以“难读”著称,被称为“像天书一样”。 |
| 容错性 | 极强。只要半数以上节点存活,就能保证一致性。 | 活锁问题。在 Basic Paxos 中,如果多个 Proposer 竞争,可能互相抬高编号,导致谁都提交不成功。 |
| 工程落地 | 是 Google Chubby、Spanner 等系统的理论基础。 | 实现极难。从理论到代码有巨大的鸿沟,容易写出 Bug。工业界通常使用 Multi-Paxos(引入 Leader 优化)。 |
Raft 诞生于 2013 年,作者 Diego Ongaro 和 John Ousterhout 的目标非常明确:设计一个易于理解的共识算法。
Raft 认为 Paxos 太难懂,不利于工程实现。因此,Raft 将共识问题拆解为三个独立的子问题:领导者选举、日志复制和安全性。
Raft 采用强领导者模型,所有决策都由 Leader 拍板。
它定义了三种角色(节点在任何时刻只能是其中之一):
关键机制:
| 维度 | 优点 | 缺点 |
|---|---|---|
| 可理解性 | 极高。逻辑清晰,模块化设计,普通程序员也能看懂。 | 相比 Paxos,理论抽象度稍低(但这正是它的设计目标)。 |
| 性能 | 高。强 Leader 模型减少了竞争,稳定时只需一次 RPC 即可复制日志。 | 写性能瓶颈。所有写请求必须经过 Leader,Leader 成为吞吐量上限。 |
| 工程落地 | 非常广泛。Etcd (K8s核心)、Consul、TiKV 等都使用 Raft。 | 脑裂风险。网络分区时可能出现双 Leader,但 Raft 能保证旧 Leader 无法写入(牺牲可用性保一致性)。 |
把它们放在一起对比:
| 特性 | Paxos (Multi-Paxos) | Raft |
|---|---|---|
| 核心理念 | 灵活。节点角色不固定,任何节点都可以提议。 | 集权。强 Leader 模型,只有 Leader 能提议。 |
| 理解难度 | ⭐⭐⭐⭐⭐ (困难模式) | ⭐ (简单模式) |
| 实现难度 | 高。需要处理复杂的活锁和竞争。 | 中。有明确的伪代码和状态机。 |
| 适用场景 | 对理论要求极高,或需要极度定制化的场景(如 Google 内部系统)。 | 现代分布式系统的首选,特别是需要快速落地和维护的场景(如云原生组件)。 |
hashicorp/raft 或 etcd/raft 库),遇到问题也更容易排查。简单来说:Paxos 是内功心法,Raft 是实战剑谱。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。