#rate-limiting #thread-safe #limiter #vip #key #bucket #mutex

rhythm

允许VIP的速率限制器,用Rust编写

3个不稳定版本

0.1.0 2023年7月30日
0.0.2 2023年7月29日
0.0.1 2023年7月29日

#1019 in 并发

MIT/Apache

15KB
190

使用Rhythm进行速率限制

Rhythm的RateLimiter是一个用Rust实现的线程安全的速率限制库。它允许您通过将操作与键关联来限制操作的速率,例如对服务器的请求。每个键都有一个“桶”的令牌,每个操作消耗一个令牌。当桶为空时,操作将被限制。

特性

  • 线程安全:Rhythm的速率限制器使用Mutex来确保它可以从多个线程安全地使用。
  • 可定制:您可以调整默认的桶大小、填充速率和填充间隔。
  • 每个键限制:Rhythm引入了VIP的概念,他们有自己的可调限制。这允许对每个个体的限制进行细粒度控制。

使用方法

首先,创建一个新的RateLimiter,调整到您的用例

let rate_limiter: RateLimiter<MyKeyType> = RateLimiter::new(
    bucket_size,
    refill_rate,
    refill_interval
);

然后,使用request方法执行操作

if rate_limiter.request(my_key) {
    // The operation is allowed.
} else {
    // The operation is not allowed.
}

在这个例子中,my_key是与操作关联的键。如果操作被允许(即,与键关联的桶不为空),则request方法返回true,否则返回false

默认情况下,所有键都将具有速率限制器的默认桶大小、填充速率和填充间隔。

要自定义此设置,您可以将一个键标记为VIP

rate_limiter.set_vip(
    vip_key.clone(),
    vip_bucket_size,
    vip_refill_rate
);

安装

将以下内容添加到您的Cargo.toml中

运行cargo add rhythm将最新版本添加到您的Cargo.toml

然后,运行cargo build来构建您的项目。

待办事项

性能改进

  1. 每个桶的互斥锁,以避免每个请求都持有表锁。
  2. 将修剪移动到LRU缓存样式的修剪。

功能改进

  1. VIP桶应该能够设置自己的填充间隔。

许可证

Rhythm的速率限制器根据MIT许可证授权。有关更多信息,请参阅LICENSE

无运行时依赖