本文介绍几个Rust中实现了限流算法的crate。
最近工作需要实现限流算法。所以调研了一些限流算法。
最终认为令牌桶算法比较适合我们的业务场景。想着rust应该有现成的库可以复用,所以简单看了下。
基于tokio 异步的,实现了令牌桶算法,通过acquire接口来获取令牌。获取不到的时候会阻塞当前协程。
use leaky_bucket::RateLimiter;
let limiter = RateLimiter::builder()
.initial(10)
.build();
limiter.acquire(10).await;
这个crate实现了GCRA 算法和漏桶算法
和leaky_bucket差不多。不过更轻量级。特点是获取令牌的时候才会填桶、是惰性的。支持async和sync以及非线程安全的sync。
下载量最多的一个库。是多线程的。获取不到令牌会阻塞当前线程。
很轻量级的一个库,不过并不是线程安全的,如果需要在多线程间使用,需要自己做好线程安全。这个库目前下载量还很小。
时间窗口、滑动窗口、漏桶、令牌桶
分布式服务限流实战,已经为你排好坑了_技术管理_dbaplus社群_InfoQ精选文章
分布式限流器
如何设计一个分布式限流器(distributed rate limiter) | Honly's Blog
dubbo 限流策略
nginx限流