我有多个服务器/工作人员通过任务队列执行 API 请求。(带有 Memcached 和 Celery 队列的 Django)API 请求被限制为每秒 10 个请求。如何对它进行速率限制,以使请求总数(所有服务器)不超过限制?
我已经查看了一些相关的速率限制问题,我猜它们专注于更线性、非并发的场景。我应该采取什么样的方法?
我有多个服务器/工作人员通过任务队列执行 API 请求。(带有 Memcached 和 Celery 队列的 Django)API 请求被限制为每秒 10 个请求。如何对它进行速率限制,以使请求总数(所有服务器)不超过限制?
我已经查看了一些相关的速率限制问题,我猜它们专注于更线性、非并发的场景。我应该采取什么样的方法?
你看过Guava项目的Rate Limiter吗?他们在最新版本之一中引入了此类,它似乎部分满足了您的需求。
当然它不会计算分布式环境中多个节点的速率限制,但你可以做的是根据正在运行的节点数动态配置速率限制(即对于 5 个节点,你将有 2 个 API 请求的速率限制一秒)
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.