1 stable release
1.0.0 | Jul 12, 2022 |
---|
#17 in #limiter
39 downloads per month
9KB
114 lines
simple-rate-limiter
A simple rate limiter that minimizes contention caused by overactive clients.
Design
This rate limiter is designed with the following goals:
-
Limited potential for a maliciously overactive client to degrade the ability to serve others
-
Minimal synchronization cost between CPU caches, while also being fairly accurate for smoothing out bursts of traffic
-
Memory overhead linear in the amount of active keys
API
pub struct RateLimiter<K: Eq + Hash>;
impl<K: Eq + Hash> RateLimiter<K> {
pub fn new(limit: usize, slots: usize) -> Arc<Self>;
pub fn rotate_slots(&self);
pub fn check_limited(&self, key: K) -> bool;
}
Micro benchmarks (not to be trusted, measure your own applications)
Machine details: AMD® Ryzen 5 3600, x86_64-pc-linux-gnu, SMT enabled
Dependencies
~0.4–5MB
~11K SLoC