algorithm - throttle 请求的速率限制算法

标签 algorithm service rate-limiting throttling

我需要设计一个速率限制器服务来限制请求。 对于每个传入请求,方法将检查每秒请求数是否超过其限制。如果超过了,它将返回等待处理所需的时间量。

寻找一个简单的解决方案,它只使用系统滴答计数和 rps(每秒请求数)。不应使用队列或复杂的速率限制算法和数据结构。

编辑:我将在 C++ 中实现它。另外请注意,我不想使用任何数据结构来存储当前正在执行的请求。 API 会是这样的:

如果(!RateLimiter.Limit()) { 做工作 RateLimiter.Done();

} 别的 拒绝请求

最佳答案

最常用的算法是 token bucket .无需发明新事物,只需搜索您的技术/语言的实现即可。

如果您的应用具有高可用性/负载平衡,您可能希望将存储桶信息保存在某种持久性存储中。 Redis 是一个很好的选择。

我写了Limitd是一种不同的方法,是限制的守护进程。应用程序使用受限客户端询问守护进程流量是否一致。该限制是在 limitd 服务器上配置的,应用程序对算法是不可知的。

关于algorithm - throttle 请求的速率限制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647166/

相关文章:

algorithm - 算法设计手册中的乐透彩票覆盖范围?

algorithm - "uniform-cost search"算法中的路径如何获取?

service - 无法找出 Angular2 服务中正确的 EventEmitter 或 Observable 语法

grails - 如何在不访问数据库的情况下 Hook Grails Spring Security的登录速率限制器?

java - 如何在压缩后扩展霍夫曼节点

symfony - Symfony2 服务的外观模式

java - 使用 Java 检测远程计算机上正在运行的服务

netty - 如何在 Netty 4+ 中使用 ChannelTrafficShapingHandler?

amazon-ec2 - boto ElasticMapReduce throttle 和速率限制

algorithm - 有向树的叶子到根的最短距离