1

我知道异步系统中的故障检测器基本上被归类为(最终)完美/(最终)强大以及这些类是如何定义的,但我很难理解它背后的直觉。

假设我有一个故障检测器的具体实现,它定期监听来自每个进程的心跳消息。如果某个进程有一段时间没有发送其心跳消息,则该进程将被添加到可疑列表中,直到收到来自该进程的消息。

现在,我怎么知道这个 FD 的实现是哪个类?这是否需要正式证明 FD 的完整性/准确性属性?如果可以实现完美的 FD,为什么还要研究其他(较弱的)FD?还是在设计容错分布式算法时仅“假定”这些类?

我对此有点困惑(如何对给定的(具体)FD进行实际分类)。我将不胜感激任何答案。

4

1 回答 1

0

您首先需要对流程的同步性以及它们之间的链接进行建模;例如:“所有进程最终都可以及时通信,消息在已知时限内传输,进程在已知时限内执行截止日期”。一旦你定义了这样一个模型,你就可以分析一个特定的算法并确定它的类别(并证明它)。

在设计更高级别的算法时,不同类别的故障检测器对于封装和抽象出这些基本假设很有用。它们还可用于根据所需的故障检测器类确定哪些问题(共识、广播、弱领导者选举等)更难/更容易解决。

与您的问题中所述相反,完美的 FD 无法在任何系统模型中实现。实际上,一个活跃的研究领域是寻找最小的同步要求,例如,可以实现 omega 故障检测器(参见“Omega 满足 Paxos”论文)。

您可以想象同步只是部分同步的各种场景,例如,某些链接太不可靠,某些进程在防火墙后面(允许传出消息,但没有传入消息)等。当您对具体部署的同步进行建模然后回答问题时关于可以在这样的模型上构建什么 FD,您同时回答了可以在该模型中解决哪些问题(以及因此在该部署中)。

于 2015-03-16T09:34:10.730 回答