我有多个服务器/工作人员通过执行API请求的任务队列。 (使用Memcached和Celery作为队列的Django)API请求每秒限制为10个请求。我如何评价限制它,以便请求总数(所有服务器)不超过限制?分布式速率限制
我查看了一些相关的速率限制问题,我猜他们关注的是更线性的非并发情况。我应该采取什么样的方式?
我有多个服务器/工作人员通过执行API请求的任务队列。 (使用Memcached和Celery作为队列的Django)API请求每秒限制为10个请求。我如何评价限制它,以便请求总数(所有服务器)不超过限制?分布式速率限制
我查看了一些相关的速率限制问题,我猜他们关注的是更线性的非并发情况。我应该采取什么样的方式?
您从Guava项目中看过Rate Limiter吗?他们在最新版本中引入了这个类,它似乎部分满足您的需求。
当然,它不会计算分布式环境中多个节点的速率限制,但是你做的是根据正在运行的节点的数量动态地配置速率限制(即,对于5个节点,你将有速率限制的2个API请求一秒)
我一直在开发一个开源项目来解决这个确切的问题Limitd。虽然我没有其他技术的客户端,但协议和想法很简单。
您的反馈非常欢迎。
可惜我解决了这个问题不是你的技术:bandwidth-throttle/token-bucket
如果你想实现它,这里的执行理念:
这是一个token bucket algorithm其中包括代用币转换成时间戳,因为当它最后完全是空的。每次消耗更新此时间戳(锁定),以便每个进程共享相同的状态。