问题:在 Paxos 的 Prepare 和 Accept 阶段,为什么只需向 超过半数 (Majority) 的节点发送请求,而不是全部?
核心逻辑:用“数学重叠”换“系统可用”
1. 性能:消除“长尾效应”
- 全部发送:系统速度取决于最慢(或已宕机)的节点。
- 多数派发送:只需等待最快的一半多节点响应。这规避了网络抖动和单点故障对系统性能的拖累。
2. 安全:利用“集合重叠性”
- 数学原理:在 个节点的集群中,任意两个多数派集合必有交集(至少存在一个公共节点)。
- 信息传递:只要当前提议获得了多数派批准,下一个提议者在询问多数派时,一定能从公共节点处得知已达成的共识。
- 结论:发送给全部节点在逻辑上是冗余的,多数派已足以保证一致性。
3. 可用:允许部分失效
- 容错边界:系统允许在少于一半节点故障时依然正常运作。
- 对比:若要求“全部响应”,则任何一个节点的离线都会导致整个集群写停摆。
总结
“发送给全部”是追求绝对冗余但牺牲了可用性;“发送给多数派”则是利用数学重叠性,在保证一致性的前提下,获得了分布式系统最核心的高可用与高性能。