← Journal

从两将军到拜占庭:分布式系统里的不确定性

两将军问题告诉我们「确认」本身就不可能完美,工程上我们如何与这种不确定性共处。

在谈复杂的拜占庭容错之前,有一个更朴素、也更令人不安的结论:两将军问题——在不可靠信道上,两方永远无法通过有限次通信达成「确定的共同知识」。

确认的无穷回归

A 发消息给 B,B 回复确认。但 B 不知道这条确认 A 是否收到,于是 A 又要确认 B 的确认……这个回归没有终点。

A → B: 进攻
B → A: 收到,进攻        // A 不知道这条是否送达
A → B: 收到你的收到        // B 又不知道这条是否送达
...

结论很反直觉:完美的「确定送达」在不可靠网络里不存在。

工程上的妥协

既然完美确认不可能,真实系统选择了「足够好」:

  1. 超时与重试:用概率把失败的可能压到可接受范围;
  2. 幂等:让重复送达不产生副作用;
  3. 多数派:不再追求「所有人都确认」,而是「多数确认即终局」。

区块链的「等 N 个确认」正是这种思想的延续——你永远没有绝对的终局,只有随确认数指数衰减的回滚概率

工程不是消灭不确定性,而是把它量化到可以下决策的程度。

← 返回 Journal