4个版本 (重大更新)

0.4.0 2024年3月2日
0.3.0 2020年12月9日
0.2.0 2020年12月8日
0.1.0 2020年12月7日

算法中排名第923

Download history 11/week @ 2024-03-14 15/week @ 2024-03-28 6/week @ 2024-04-04 2/week @ 2024-04-18 7/week @ 2024-04-25 161/week @ 2024-05-16 146/week @ 2024-05-23 35/week @ 2024-05-30 135/week @ 2024-06-06 43/week @ 2024-06-13

每月下载量204
2 crates中使用

MIT授权

40KB
105 代码行

phi-detector

Crates.io documentation MIT licensed

这是Phi累加故障探测器算法的Rust实现,该算法在下面的图中描述得非常清楚。使用此算法可以检测远程服务器故障。

Algorithm


lib.rs:

这是Phi累加故障探测器的实现。

为了减少内存占用,实际上并不存储ping或间隔,只维护用于计算正态分布的两个值。这不仅将内存占用减少到常量值,而且将每个ping的计算成本降低到常量。

内存占用为什么很重要?想象一下,如果你的应用程序与成千上万的远程服务器通信,并且你想要为每个服务器维护故障探测器。显然,每个服务器为故障探测器花费100MB的成本是过于昂贵的。

use phi_detector::PingWindow;
use std::time::Duration;

// Create a window with a interval 100ms.
let mut window = PingWindow::new(Duration::from_millis(100));

window.add_ping(Duration::from_millis(150));
window.add_ping(Duration::from_millis(80));
// Now the window has intervals [100ms, 150ms, 80ms]. Average is 110ms.

let normal_dist = window.normal_dist();
// If the server is down for 5s, it should be failure.
let phi = normal_dist.phi(Duration::from_millis(5000));
if phi > 12. {
    panic!("The server is down");
}

无运行时依赖