#load #rate #limit #rate-limiting #throttle #governor

prob-rate-limiter

概率性速率限制器。平滑地释放负载以防止过载。

1 个不稳定版本

0.1.1 2022年4月26日
0.1.0 2022年4月26日

#4#governor

每月下载 39
dns-server 中使用

Apache-2.0

13KB
106

prob-rate-limiter

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

ProbRateLimiter 是一个 概率性 速率限制器。当负载接近配置的限制时,该结构会随机选择接受或拒绝每个请求。它调整拒绝的概率,使吞吐量在限制周围保持稳定。

用例

  • 释放负载以防止过载
  • 避免过载依赖的服务
  • 控制成本

功能

  • 小巧,使用44字节
  • 100%测试覆盖率
  • 优化:每个检查32纳秒,i5-8259U每秒31M次检查
  • unsafe或不可靠依赖

限制

  • 需要可变引用。
  • 不公平。对待所有请求一视同仁,无论来源。过载服务器的客户端将消耗大部分吞吐量。

替代方案

  • r8limit
    • 使用滑动窗口
    • unsafe或依赖
    • 优化:每个检查48纳秒,i5-8259U每秒21M次检查
    • 需要可变引用。
  • governor
    • 使用不可变引用,易于在线程之间共享
    • 受欢迎
    • 良好的文档
    • 优化:i5-8259U每个检查29纳秒。
    • 不必要的unsafe
    • 使用非标准互斥锁库 parking_lot
    • 使用复杂的算法
  • 漏桶
    • 异步任务可以等待其使用资源的轮次。
    • 不适用于负载释放,因为没有try_acquire

相关Crates

示例

let mut limiter = ProbRateLimiter::new(10.0).unwrap();
let mut now = Instant::now();
assert!(limiter.check(5, now));
assert!(limiter.check(5, now));
now += Duration::from_secs(1);
assert!(limiter.check(5, now));
assert!(limiter.check(5, now));
now += Duration::from_secs(1);
assert!(limiter.check(5, now));
assert!(limiter.check(5, now));
now += Duration::from_secs(1);
assert!(limiter.check(5, now));
assert!(limiter.check(5, now));
now += Duration::from_secs(1);
assert!(limiter.check(5, now));
assert!(limiter.check(5, now));
assert!(!limiter.check(5, now));

Cargo Geiger 安全报告


Metric output format: x/y
    x = unsafe code used by the build
    y = total unsafe code found in the crate

Symbols: 
    🔒  = No `unsafe` usage found, declares #![forbid(unsafe_code)]= No `unsafe` usage found, missing #![forbid(unsafe_code)]
    ☢️  = `unsafe` usage found

Functions  Expressions  Impls  Traits  Methods  Dependency

0/0        0/0          0/0    0/0     0/0      🔒  prob-rate-limiter 0.1.1
0/0        0/0          0/0    0/0     0/0      🔒  └── oorandom 11.1.3

0/0        0/0          0/0    0/0     0/0    

变更日志

  • v0.1.1 - 简化 new。添加更多文档。
  • v0.1.0 - 初始版本

待办事项

  • 发布
  • 添加基准测试的图表。

许可证:Apache-2.0

依赖项

~32KB