Skip to content

崩溃故障

Crash failure

进程停止执行且此后不再采取步骤的故障。

条目类型
模型

形式陈述

在 crash-stop 模型中,每个进程按协议状态机行动,环境至多一次为该进程执行 crash 事件;此后它不再完成本地步骤、发送或接收消息。崩溃前的每个动作都必须符合协议,故障能力只有永久停止,不包含伪造、篡改或向不同接收者故意发送矛盾值。

一次执行中未发生 crash 的进程称为正确进程,故障预算通常写成

|F|f,

其中 F 是已崩溃进程集合。正确性不自动蕴含调度进展:只有可容许执行再要求每个正确进程取得无穷多步、消息公平交付时,活性证明才能使用这些条件。

Crash-recovery 是另一模型。进程可以重启,必须区分易失状态与稳定存储,并规定恢复动作;投票、任期等安全状态若在重启后丢失,进程可能作出与崩溃前不兼容的动作。Fail-stop 又比 crash-stop 更强,因为它假设其他进程能可靠检测崩溃。三种名称不能互换。

直觉

Crash-stop 允许协议相信故障进程已经发送的合法证据,却不能期待它把协议完成。一次广播、投票或磁盘更新可能只做了一半,其他节点必须从部分可见前缀继续保持安全。

困难来自沉默的歧义。在异步系统中,等待者看不出对方已永久停止,还是进程与消息暂时很慢。崩溃模型约束故障进程会做什么,时间模型决定其他人何时能知道,两者是正交参数。

Crash-stop:崩溃前的部分传播
例子与边界

进程 p 要把提案 x 发给 q,r。它先完成 send(q,x),随后在执行 send(r,x) 前崩溃。若信道可靠,给 q 的在途消息仍可最终交付;r 却没有任何必须收到 x 的依据。于是 qr 合法地拥有不同知识。可靠广播协议会让已收到的正确进程转发,从而修补这种部分传播;单次点对点发送不会自动完成广播。

服务器永久掉电且不恢复符合 crash-stop。若同一服务器重启后忘记曾在 ballot 7 投票,再次投票就属于 crash-recovery 状态设计问题,而非 crash-stop 执行。若它仍运行却故意给 q,r 发送不同票,则已进入拜占庭故障

遗漏故障允许进程继续运行却漏掉部分收发,也不属于 crash-stop。使用“容忍 f 个故障”的阈值前,要核对故障类型、恢复能力与信道语义;多数派在 crash 模型中的交点节点诚实保存证据,拜占庭模型则必须保证交点中仍有正确见证者。

推论与应用

FLP 不可能性在允许至多一次 crash-stop 的完全异步模型中否定确定性共识的无条件终止;故障检测器则把关于崩溃的额外信息做成明确接口。Paxos、Raft 等多数派协议通常用 2f+1 个投票者容忍 f 个 crash,因为任意可用多数仍与早先多数相交;这个阈值来自具体协议,不是 crash 定义本身。

安全性通常量化含故障进程崩溃前动作的所有执行,活性只承诺正确进程,并附加消息交付、可达多数与时序稳定条件。将两类量词写在一起,才能避免把“协议在故障下不分叉”误读成“协议在任何网络下都继续服务”。

参考资料
  • 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。
关系图谱18 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系