“与其不断同步整个状态,状态机复制让排序层先提供共同命令前缀,再由各副本在本地重放同一计算。它由此把“多台副本如何保持一致”分成两层:共识或原子广播负责决定顺序,执行层让确定性状态机从相同初态…”
形式陈述 ​
固定一个消息传递系统中的参与进程集合
- 完整性:每个进程至多决定一次;
- 统一一致性:任何两个已经决定的进程,即使其中一个稍后崩溃,也决定相同值;
- 提议有效性:若某进程决定
,则 对某个参与进程 成立; - 终止性:每个正确进程最终决定。
有些文献只约束正确进程的决定,称 non-uniform agreement;有些有效性只要求全体输入相同时决定该值,或要求决定通过外部验证谓词。拜占庭模型还要决定是否只采信正确进程提议。引用“共识”结论时,必须同时给出这些版本与
完整性、一致性与有效性属于安全性:有限前缀即可见证违例。终止性是活性,只有在正确进程持续取步、足够消息最终交付以及故障数未超预算的执行中才有含义。
直觉
每个进程只有局部消息前缀,却要作出全局唯一且不可撤销的决定。早决定可能漏掉相反提议,永久等待又违背终止。协议把安全证据做成跨轮次可继承的投票记录,并把活性押在某种最终协调条件上。
多数相交只提供证据相遇的机会。交点进程若可以在两个轮次无条件支持不同值,两个多数仍可能分别批准冲突结果;ballot、任期、锁定或继承规则才决定交点携带什么。
例子与边界
二值共识中,“总决定
三个投票者
两阶段提交决定分布式事务提交或中止,prepared 参与者在协调者故障后可能阻塞。用共识复制提交决定可消除单协调者这一故障点,但 2PC 本身没有在异步 crash 模型中提供 nonblocking consensus。
FLP 不可能性说明完全异步、确定性、可靠消息且允许一次 crash 时,某个可容许调度可以永不决定。Paxos与Raft仍能在所有这类时序下保持安全;它们的终止证明另加稳定领导、可达多数与部分同步条件。拜占庭共识又需更大交集与认证假设,不能把 crash 多数公式直接搬过去。
推论与应用
消息传递中,最终领导者检测器
共识与原子广播在固定成员、可靠通信和相同 crash/终止假设下相互归约。原子广播到共识:广播各自提议并决定第一条全序交付消息。共识到原子广播:可靠传播待排序消息,按日志索引反复调用共识决定下一批,并用确定规则排列批内消息;终止还要保证待处理消息不被永久饿死。等价指可解性相互归约,不表示一个 one-shot 实例自动提供无限日志。
协议验证常把 agreement 化为配置上的归纳不变式,把 termination 写成对公平无限执行的性质。模型检查可以找出双决定或永不进展的调度,却不能替规格补入遗漏的公平性与故障上界。
参考资料
- Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996, Chapter 6.
- Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Chs. 5–6。
- Tushar D. Chandra and Sam Toueg, “Unreliable Failure Detectors for Reliable Distributed Systems,” Journal of the ACM 43(2), 1996, pp. 225–267。