【问题标题】:Distributed rate limiting分布式限速
【发布时间】:2012-12-04 02:48:32
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    不幸的是,我解决了这个问题不是因为你的技术:bandwidth-throttle/token-bucket

    如果要实现的话,实现思路如下:

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

    【讨论】:

      【解决方案2】:

      我一直致力于一个开源项目来解决这个名为Limitd 的确切问题。虽然我还没有 node 以外的其他技术的客户端,但协议和想法都很简单。

      非常欢迎您的反馈。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-11-11
          • 2018-12-30
          • 2016-02-15
          • 2014-08-21
          • 1970-01-01
          • 1970-01-01
          • 2015-07-13
          • 2013-05-22
          • 2022-01-25
          相关资源
          最近更新 更多