【发布时间】:2014-05-07 03:40:51
【问题描述】:
我有一个带有负载平衡器的 Web 服务,可以将请求映射到多台机器。这些请求中的每一个最终都会向外部 API 发送一个 http 调用,因此我想限制我发送到外部 API 的请求数量。
我目前的设计:
- 服务在内存中有一个队列,用于存储所有收到的请求
- 我限制了我们从队列中获取请求并处理它的频率。
这在我使用多台机器时不起作用,因为每台机器都有自己的队列和速率限制器。例如:当我将我的速率限制器设置为 10,000 个请求/天,并且我使用 10 台机器时,我最终将在满负荷下处理 100,000 个请求/天,因为每台机器每天处理 10,000 个请求。我想限制速率,以便每天只处理 10,000 个请求,同时仍然对这 10,000 个请求进行负载平衡。
我正在使用 Java 和 MYSQL。
【问题讨论】:
-
显而易见的解决方案是为 http api 创建一个公共队列或公共
path。公共路径可能是一种代理,例如软件,它会限制每个基础的请求数量(在您的情况下是每天)。另外,你能在 API 端创建队列吗?
标签: java mysql concurrency throttling rate-limiting