Phi-Accural Failure Detector
与其将节点的故障作为只有启动或失败的二元问题,Phi-Accural (φ 增长) 故障检测进行了后续的扩展,来观察被监控处理器崩溃的概率。他通过管理一个 Sliding Window 滑动窗口来收集从其他处理器发送过来的最新的心跳到达时间。这个信息会被用来估算下一个心跳的到达时间,通过对这个估算时间与真正的到达时间进行比较,来计算出一个 Suspicion level φ 怀疑级别 φ : 描述了错误检测器对故障的确信度,以及当前网络的状况。
这个算法通过收集消息的到达时间并进行采样,创建了一个可以用来决定节点健康程度的视图。他用这些采样来计算 φ 的值:如果这个值达到了指定的阈值,节点就会被标识为失效。这个故障监测器通过调整被标识为可以节点的规模来动态适配网络条件的变化。
从整体架构的角度, Phi-Accural 故障监测器视为由以下三个子系统所组成的:
-
Monitoring
通过 Ping、心跳或请求-响应的采样来收集存活信息
-
Interpretation
负责决定处理器是否该被标识为可疑的
-
Action
在处理器被标识为可疑时负责启动指定的回调处理
Monitoring 观察处理器负责收集跟存储数据的采样 (假设他们会正常的分布) 到一个固定大小窗口来记录心跳到达时间。最新到达的信息会被添加到窗口中,超过窗口大小的最旧的心跳数据则会被丢弃。
参数的分布会从样本窗口的均值和方差进行计算得到,这个信息会被用来计算下一个消息可能到达的时间。通过这个信息,我们也能计算出前面所说的用来正确判断处理器是否存活的 φ 值。换句话说,计算出的假设结果表示了出错跟接收到心跳可能性有多大。
这种方式是由 Japan Advanced Institute of Science and Technoloty 开发出来的,现在也被使用到了许多的分布式系统中,比如 Cassandra 跟 Akka。