
故障检测
|
177
组中的进程定期向其他成员发送 ping 消息,以查询它们是否仍处于活动状态。如果其中
一个成员由于崩溃、网络分区或链路故障而无法响应此消息,则发出这个 ping 的成员本
身将停止响应 ping 消息。
图 9-5 展示了四个通信进程:
•
a) 初始状态:所有进程都处于活动状态并可以通信。
•
b) P
2
崩溃并停止响应 ping 消息。
•
c) P
4
检测到 P
2
的故障并停止响应自己收到的 ping 消息。
•
d) 最终,P
1
和 P
3
注意到 P
4
和 P
2
都没有响应,将进程故障传播到整个组。
a) b) c) d)
图
9-5
:
FUSE
故障检测
所有故障都通过系统从故障源传播到所有其他参与者。参与者逐渐停止响应 ping 消息,
将单个节点故障转换为组故障。
在这里,我们利用不通信作为一种传播的手段。这种方法的一个优点是保证每个成员都
能了解组的故障并对其做出充分的反应。它的一个缺点是:将单个进程与其他进程分开
的链路故障也可能会被转换为组故障,但这其实也可以被看作是一个优点,应由具体的
用例所决定。应用程序可以使用其自身对故障传播的定义来应对这种情况。
9.5
本章小结
故障检测器在任何分布式系统中都是一个重要的组成部分。正如 FLP 不可能定理所说
的,异步系统中没有协议能够保证一致性。故障检测器有助于扩展模型,允许我们通过
在准确性和完备性之间进行权衡来解决一致性问题。文献 [CHANDRA96] 描述了这一领
域的一个重要发现,证明了故障检测器是有用的,它表明,即使使用一个犯了无限多个