如何对故障检测器进行分类?

How to classify a failure detector?

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

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

现在,我怎么知道哪个 class 是 FD 的实现?这是否需要 FD completeness/accuracy 属性的正式证明?如果可以实现完美的 FD,为什么还要研究其他(较弱的)呢?还是设计容错分布式算法时class只有"assumed"?

我对此有点困惑(如何实际 class 验证给定的(具体的)FD)。我将不胜感激。

您首先需要对进程的同步性以及它们之间的链接进行建模;例如:"all processes can eventually communicate in a timely manner, messages are transmitted within a known time bound, and processes execute deadlines within a known time bound"。一旦你定义了这样一个模型,你就可以分析一个特定的算法并确定它的class(并证明它)。

故障检测器的不同 classes 有助于在设计更高级别的算法时封装和抽象出这些基本假设。根据所需的故障检测器 class.

,它们还可用于确定 harder/easier 需要解决哪些问题(共识、广播、弱领导选举等)

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

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