Phi Accrual Failure Detector

介绍

远程DeathWatch使用心跳消息和故障检测器,检测网络故障和JVM崩溃。

Hayashibara等人实现的“ Phi应计故障检测器”解释了心跳到达时间。

故障检测器心跳

心跳默认情况下每秒发送一次,这是可配置的。它们在请求/回复握手中进行心跳,并且回复是故障检测器的输入。

故障的可疑程度由phi表示。 phi故障检测器的基本思想是可以动态调整phi的值,以反映当前网络状况。

phi值的计算如下:

其中F是正态分布的累积分布函数,根据历史心跳到达间隔时间,估算的平均值和标准偏差。

应计的故障检测器使监控和解释分离。这使得它们适用于更广泛的场景,并且更适合构建通用的故障检测服务。其思想是保留,从其他节点接收到的心跳计算出的故障统计数据的历史记录,并试图通过考虑多个因素以及它们随时间的累积如何进行有根据的猜测,以便提出更好的建议。猜测特定节点是否处于运行状态。相对于回答“节点挂了吗”,它返回一个phi值,表示节点发生故障的可能性。

下图说明了phi如何随着自上一个心跳以来时间的增加而增加。

从历史到达时间的均值和标准差计算出Phi。 上一张图表是200 ms标准偏差的示例。 如果心跳到达的标准差较小,则曲线将变得更陡峭,即可以更快地确定故障。 对于100 ms的标准偏差,曲线看起来像这样。

为了能够承受突发异常(例如,垃圾收集暂停和瞬态网络故障),故障检测器配置有余量,您可能要根据环境进行调整。 这是配置failure-detector.acceptable-heartbeat-pause=3秒的曲线。

日志

当群集故障检测器观察到另一个节点不可达时,它将记录:

将节点标记为UNREACHABLE

如果再次可以访问:

将节点标记为“可到达”

当心跳到达间隔超过acceptable-heartbeat-pause的2/3时,还会发出警告

心跳间隔过大

如果看到误报,如频繁的UNREACHABLE和REACHABLE日志记录,则如果您怀疑环境比默认值所容忍的环境更加不稳定,则可以增加acceptable-heartbeat-pause。但是,最好调查原因,以免它不是由长时间(意外的)垃圾收集暂停,系统过载,过于严格的CPU配额设置等引起的。

akka.cluster.failure-detector.acceptable-heartbeat-pause = 7s

需要注意的另一条日志消息,通常需要调查根本原因:

预定的心跳发送被延迟

故障检测器阈值

用户可以配置作为计算基础的阈值,但通常如上所述,就足以配置可接受的acceptable-heartbeat-pause

  • 较低的阈值易于产生许多误报,但可以确保在发生实际崩溃时快速检测到。
  • 相反,较高的阈值会产生较少的错误,但需要更多的时间来检测实际的崩溃。
  • 默认阈值为8,适用于大多数情况。但是,在诸如Amazon EC2之类的云环境中,该值可以增加到12,以解决有时在此类平台上发生的网络问题。

你可能感兴趣的:(akka,cluster)