#middleware #load #hyper

little-loadshedder

基于延迟的负载 shedding hyper/tower 中间件

2个不稳定版本

0.2.0 2024年2月24日
0.1.0 2023年1月30日

#373 in 网络编程

Download history 2965/week @ 2024-03-14 3016/week @ 2024-03-21 2647/week @ 2024-03-28 3327/week @ 2024-04-04 2594/week @ 2024-04-11 3338/week @ 2024-04-18 2631/week @ 2024-04-25 3094/week @ 2024-05-02 2988/week @ 2024-05-09 3067/week @ 2024-05-16 3578/week @ 2024-05-23 4252/week @ 2024-05-30 3684/week @ 2024-06-06 3827/week @ 2024-06-13 3363/week @ 2024-06-20 2777/week @ 2024-06-27

14,310每月下载量

MIT/Apache

26KB
263

Little Loadshedder

Crates.io API reference License

一个基于Rust的hyper/tower服务,它通过基于延迟的排队和并发限制来实现负载 shedding。

它使用Little's Law来智能地 shedding 负载,以维持目标平均延迟。它通过在其包装的服务之前放置一个队列来实现这一点,其大小由测量对内部服务的调用平均延迟来决定。此外,它还控制对内部服务的并发请求数量,以实现最大的可能吞吐量。

以下图像显示了示例服务器在示例客户端生成的负载下的指标。

首先,当开启负载时,一些请求被拒绝,而中间件正在确定队列大小,并增加并发性。 startup 这很快就会稳定下来,服务可以轻松处理其上的负载,因此队列大小很大。

接下来,我们发送大量流量,请注意,由于所有流量都被队列吸收,因此没有流量被丢弃。 burst 一旦流量停止,服务将缓慢清除其请求队列,并返回到稳定状态。

现在我们模拟服务降级,所有请求的处理时间都加倍。队列缩小到大约原始大小的一半,以实现目标平均延迟,然而服务无法再实现这种吞吐量,因此队列填满并拒绝请求。 degradation 注意,从客户端的角度来看,请求要么立即被拒绝,要么以大约目标延迟完成。

现在服务性能显著下降。队列几乎消失,并发性缓慢降低,直到延迟达到目标。慢速

最终,服务恢复正常,中间件迅速发现并恢复到初始稳定状态。恢复

许可证

许可方式任选以下之一

由您选择。

贡献

本项目欢迎贡献和建议,只需打开一个问题或拉取请求即可!

除非您明确表示,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,应如上双许可,无任何额外条款或条件。

依赖

~3-5MB
~89K SLoC