分布式共识算法


一、第一性原理:什么是分布式共识

1. 共识要解决的根本问题

**分布式共识(Distributed Consensus)**的本质是:

在不可靠网络、节点可能失效甚至作恶的前提下,多个节点必须对同一对象,在同一逻辑顺序上,做出相同且不可撤销的决定

这一定义刻意回避了具体算法,实现的是问题层抽象


2. 共识的三个不可回避的现实约束

所有共识算法都隐含接受以下现实:

  1. **网络不可靠**:消息可能延迟、乱序、丢失
  2. **节点可能失败**:宕机、重启、永久丢失
  3. **系统必须对外并发服务**:不存在全局锁

共识算法的复杂性,来自于在以上前提下仍要保证“统一决定”。


3. 共识对象的区分(极其关键)

很多“共识算法混淆”源于没有区分共识对象

共识对象说明典型算法
单一值对某个值是否被接受达成一致Paxos
日志序列对操作顺序达成一致Raft / ZAB
状态机对状态演进过程一致复制状态机
事务结果对一次事务成功/失败一致2PC / TCC
账本顺序对不可篡改历史一致PoW / PBFT

算法不可横向对比,除非它们的共识对象相同。


二、共识问题的系统分类(稳定知识)

1. 是否存在恶意节点(根本分水岭)

分布式共识问题├── 崩溃容错(Crash Fault)│   ├── 强一致(线性一致)│   │   ├── Paxos│   │   ├── Multi-Paxos / ZAB│   │   └── Raft│   └── 最终一致│       ├── Gossip│       └── Quorum NWR└── 拜占庭容错(Byzantine Fault)    ├── 小规模、许可系统:PBFT    └── 大规模、开放系统:PoW

是否假设节点诚实,决定了算法复杂度的数量级差异。


2. 一致性模型不是“强 / 弱”二分

一致性本质上是:对外可观察行为的约束强度

算法只是实现一致性的手段,不是一致性本身。


三、共识算法的通用架构模式(不变思想)

从所有算法中,可以提炼出以下稳定设计模式

1. Quorum(多数派)模式

集合重叠替代全体一致。

这是 Paxos、Raft、NWR 的共同根基。


2. Leader 模式(性能优化而非安全必需)

Leader = 用局部中心化换整体吞吐

Multi-Paxos、Raft、ZAB 本质一致。


3. 编号 / 任期(逻辑时间)

在没有全局时钟的系统中:

承担的是:

事件先后关系的判定工具


4. 日志前缀一致性(安全性的真正来源)

所有复制状态机安全性,都建立在:已提交日志永不回滚 之上。

Raft 的日志匹配原则、Paxos 的提案不可逆,都是这一思想的不同表达。


5. 超时驱动(对不可靠网络的妥协)

共识算法无法区分“慢节点”和“失效节点”,只能赌概率。


四、经典算法的本质解读(去实现化)

1. Paxos:最小一致性原语

解决的问题:

多个提议者,对一个值达成唯一决定。

核心思想:

Paxos 是:

所有强一致算法的“原子模型”

但工程上难以直接使用。


2. Multi-Paxos / ZAB:把一次共识变成序列共识

关键演进:

本质变化:

从“值一致”升级为“日志一致”


3. Raft:工程可理解性的胜利

Raft 并未引入新理论,而是:

Raft 的价值不在于更强,而在于可被正确实现


4. Gossip:接受不一致,换取规模与可用性

适用前提:

业务可容忍短期不一致


5. Quorum NWR:一致性是“读写策略”的结果

一致性并非算法属性,而是策略组合的结果


6. PBFT / PoW:当节点不可信

PBFT:

PoW:

拜占庭共识的本质,是信任模型的改变


五、选型方法论(可复用)

约束条件推荐方向
小规模、强一致Raft
高吞吐、可容忍不一致Gossip
不可信节点PBFT / PoW
分布式事务TCC

六、共识的根本局限(无法被算法消除)

共识不是银弹,而是代价明确的工程选择

关联内容(自动生成)