“引用该定理时必须同时写明二元共识任务、完全异步、确定性协议、可靠信道、至多一个crash stop,以及“协议对所有可容许执行终止”的被否定量词。故障检测器理论进一步追问:需要补充多强的、可…”
形式陈述 ​
在 crash-stop 模型中,每个进程按协议状态机行动,环境至多一次为该进程执行 crash 事件;此后它不再完成本地步骤、发送或接收消息。崩溃前的每个动作都必须符合协议,故障能力只有永久停止,不包含伪造、篡改或向不同接收者故意发送矛盾值。
一次执行中未发生 crash 的进程称为正确进程,故障预算通常写成
其中
Crash-recovery 是另一模型。进程可以重启,必须区分易失状态与稳定存储,并规定恢复动作;投票、任期等安全状态若在重启后丢失,进程可能作出与崩溃前不兼容的动作。Fail-stop 又比 crash-stop 更强,因为它假设其他进程能可靠检测崩溃。三种名称不能互换。
直觉
Crash-stop 允许协议相信故障进程已经发送的合法证据,却不能期待它把协议完成。一次广播、投票或磁盘更新可能只做了一半,其他节点必须从部分可见前缀继续保持安全。
困难来自沉默的歧义。在异步系统中,等待者看不出对方已永久停止,还是进程与消息暂时很慢。崩溃模型约束故障进程会做什么,时间模型决定其他人何时能知道,两者是正交参数。
例子与边界
进程 send(q,x),随后在执行 send(r,x) 前崩溃。若信道可靠,给
服务器永久掉电且不恢复符合 crash-stop。若同一服务器重启后忘记曾在 ballot
遗漏故障允许进程继续运行却漏掉部分收发,也不属于 crash-stop。使用“容忍
推论与应用
FLP 不可能性在允许至多一次 crash-stop 的完全异步模型中否定确定性共识的无条件终止;故障检测器则把关于崩溃的额外信息做成明确接口。Paxos、Raft 等多数派协议通常用
安全性通常量化含故障进程崩溃前动作的所有执行,活性只承诺正确进程,并附加消息交付、可达多数与时序稳定条件。将两类量词写在一起,才能避免把“协议在故障下不分叉”误读成“协议在任何网络下都继续服务”。
参考资料
- Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996,§§2.2, 6.2, 9.6。
- Tushar D. Chandra and Sam Toueg, “Unreliable Failure Detectors for Reliable Distributed Systems,” Journal of the ACM 43(2), 1996, §§2–3。