#health-check #detector #monitoring #distributed-systems #phi-accrual

phi-accrual-detector

用于监控过程健康检查的可插拔phi累积检测包

5个不稳定版本

0.3.1 2024年4月21日
0.3.0 2024年4月21日
0.2.1 2024年4月18日
0.2.0 2024年4月18日
0.1.0 2024年4月18日

#750 in 算法

每月24次下载

MIT许可证

520KB
186

Phi累积检测器

简介

这是phi累积检测算法(在本论文中介绍)在Rust中的可插拔实现。该算法通过监控事件之间的时间来检测系统行为的变化。假设你想监控服务器是否存活(想象一个主/从配置),你想检查从机是否还在运行?你将如何做到这一点?

解决心跳问题

如果主节点注意到从机没有在固定的时间间隔内向我ping,我会认为它已经挂了。但有时从机只是稍微晚了点,比如间隔设置为500毫秒,从机在550毫秒时发送心跳ping,它不是已经死了吗?你该如何应对这种情况?

引入φ

φ定义为对监控系统失败的怀疑程度。该算法通过跟踪事件之间的时间并计算系统失败的概率来工作。该算法基于以下观察:在健康系统中,事件之间的时间遵循正态分布,而在失败系统中,事件之间的时间遵循具有更长尾部的分布。

φ值越高,在给定时间收到心跳的可能性就越低(正式定义见下文)

img.png

img.png

其中 F(t) 是正态分布的累积分布函数,μ 是正态分布的均值,σ 是正态分布的标准差,t 是事件之间的时间。

示例运行

您可以使用examples/monitor.rs来模拟以下结果。图表表明,如果进程在红线处崩溃之前持续ping监控器,则怀疑水平通常很低。之后,怀疑水平将呈指数增长并趋于无穷大。您可以为任何阈值(例如:> 5.0)配置,以将进程视为已死。

img.png

包括可接受的心跳暂停

您还可以包含一些暂停时间,以确保系统在因网络延迟而略微延迟的情况下不会被判定为死亡。您可以使用 ::with_acceptable_heartbeat_pause 创建具有可接受暂停时间的探测器。

with_acceptable_pause.png

依赖项

约10-20MB
约274K SLoC