6

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

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

4

3 回答 3

0

你看过Guava项目的Rate Limiter吗?他们在最新版本之一中引入了此类,它似乎部分满足了您的需求。

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

于 2012-12-17T04:42:42.123 回答
0

I have been working on an opensource project to solve this exact problem called Limitd. Although I don't have clients for other technologies than node yet, the protocol and the idea are simple.

Your feedback is very welcomed.

于 2015-04-19T14:39:50.280 回答
0

不幸的是,我解决了这个问题不是因为你的技术:带宽限制/令牌桶

如果你想实现它,这里是实现的想法:

这是一种令牌桶算法,它将包含的令牌转换为时间戳,因为它上次完全为空。每次消费都会更新这个时间戳(锁定),以便每个进程共享相同的状态。

于 2016-05-04T06:44:07.000 回答