2个不稳定版本
0.2.0 | 2024年2月24日 |
---|---|
0.1.0 | 2023年1月30日 |
#373 in 网络编程
14,310每月下载量
26KB
263 行
Little Loadshedder
一个基于Rust的hyper/tower服务,它通过基于延迟的排队和并发限制来实现负载 shedding。
它使用Little's Law来智能地 shedding 负载,以维持目标平均延迟。它通过在其包装的服务之前放置一个队列来实现这一点,其大小由测量对内部服务的调用平均延迟来决定。此外,它还控制对内部服务的并发请求数量,以实现最大的可能吞吐量。
以下图像显示了示例服务器在示例客户端生成的负载下的指标。
首先,当开启负载时,一些请求被拒绝,而中间件正在确定队列大小,并增加并发性。 这很快就会稳定下来,服务可以轻松处理其上的负载,因此队列大小很大。
接下来,我们发送大量流量,请注意,由于所有流量都被队列吸收,因此没有流量被丢弃。 一旦流量停止,服务将缓慢清除其请求队列,并返回到稳定状态。
现在我们模拟服务降级,所有请求的处理时间都加倍。队列缩小到大约原始大小的一半,以实现目标平均延迟,然而服务无法再实现这种吞吐量,因此队列填满并拒绝请求。 注意,从客户端的角度来看,请求要么立即被拒绝,要么以大约目标延迟完成。
现在服务性能显著下降。队列几乎消失,并发性缓慢降低,直到延迟达到目标。
最终,服务恢复正常,中间件迅速发现并恢复到初始稳定状态。
许可证
许可方式任选以下之一
- Apache License,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
本项目欢迎贡献和建议,只需打开一个问题或拉取请求即可!
除非您明确表示,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,应如上双许可,无任何额外条款或条件。
依赖
~3-5MB
~89K SLoC