我需要设计一个速率限制器服务来限制请求。 对于每个传入请求,方法将检查每秒请求数是否超过其限制。如果超过了,它将返回等待处理所需的时间量。
寻找一个简单的解决方案,它只使用系统滴答计数和 rps(每秒请求数)。不应使用队列或复杂的速率限制算法和数据结构。
编辑:我将在 C++ 中实现它。另外请注意,我不想使用任何数据结构来存储当前正在执行的请求。 API 会是这样的:
如果(!RateLimiter.Limit()) { 做工作 RateLimiter.Done();
} 别的 拒绝请求
最佳答案
最常用的算法是 token bucket .无需发明新事物,只需搜索您的技术/语言的实现即可。
如果您的应用具有高可用性/负载平衡,您可能希望将存储桶信息保存在某种持久性存储中。 Redis 是一个很好的选择。
我写了Limitd是一种不同的方法,是限制的守护进程。应用程序使用受限客户端询问守护进程流量是否一致。该限制是在 limitd 服务器上配置的,应用程序对算法是不可知的。
关于algorithm - throttle 请求的速率限制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647166/