我知道异步系统中的故障检测器基本上被归类为(最终)完美/(最终)强大以及如何定义这些类,但我很难获得它背后的直觉。
假设我有一个故障检测器的具体实现,它定期侦听来自每个进程的心跳消息。如果进程暂时没有发送其心跳消息,则该进程将被添加到嫌疑人列表中,直到从该进程收到消息为止。
现在,我怎么知道哪个类是FD的这个实现?这需要FD的完整性/准确性属性的正式证明吗?如果能够实现完美的FD,为什么还要去研究其他(弱)的?或者只是班级"假设"在设计容错分布式算法时?
我对此感到有点困惑(如何对给定(具体)FD进行实际分类)。我会很感激任何答案。
答案 0 :(得分:0)
首先需要对流程的同步性和它们之间的链接进行建模;例如:"所有进程最终都可以及时通信,消息在已知的时间范围内传输,并且处理在已知的时间范围内执行截止日期。一旦定义了这样的模型,就可以分析特定的算法并确定其类(并证明它)。
当设计更高级别的算法时,不同类别的故障检测器可用于封装和抽象远离这些基本假设。根据所需的故障检测器类别,它们还可用于确定哪些问题(共识,广播,弱领导选举等)更难/更容易解决。
与您的问题中所述的相反,完美的FD无法在任何系统模型中实现。实际上,一个活跃的研究领域是找到最小的同步要求,例如,可以实现欧米茄故障检测器(参见"欧米茄符合Paxos"论文)。
您可以想象多种情况,其中同步只是部分的,例如,某些链接太不可靠,某些进程在防火墙后面(允许传出消息,但没有进入消息)等等。当您对具体部署的同步建模然后回答可以在这样的模型上构建FD的问题,您同时回答在该模型中可以解决的问题(并因此在该部署中)。