分布式速率限制

时间:2012-12-17 00:17:51

标签: queue message-queue celery throttling rate-limiting

我有多个服务器/工作人员通过执行API请求的任务队列。 (用于队列的Memcached和Celery的Django)API请求每秒限制为10个请求。如何对其进行速率限制,以使请求总数(所有服务器)不超过限制?

我已经查看了一些相关的速率限制问题,我猜他们正专注于更线性,非并发的情况。我应该采取什么样的方法?

3 个答案:

答案 0 :(得分:0)

你有没有看过Rate Limiter项目的Guava?他们在最新版本中介绍了这个类,它似乎可以部分满足您的需求。

当然,它不会计算分布式环境中多个节点的速率限制,但您可以做的是根据正在运行的节点数量动态配置速率限制(即5个节点,您可以每秒有2个API请求的速率限制

答案 1 :(得分:0)

我一直在开发一个开源项目来解决这个名为Limitd的问题。虽然我还没有其他技术的客户端,但协议和想法很简单。

非常欢迎您的反馈。

答案 2 :(得分:0)

我很遗憾地解决了这个问题:bandwidth-throttle/token-bucket

如果你想实现它,请按照以下方式实现:

它是一个token bucket algorithm,它将包含的令牌转换为自上次完全为空时的时间戳。每次消费都会更新此时间戳(已锁定),以便每个进程共享相同的状态。