我不确定我是否完全理解您看到的问题所在。来自
某些较晚的请求实际上可能有资格在较早的请求之前进行处理。
我推断您担心现在无法满足但可能很快会处理的缓冲请求。
您收到了一个请求,例如
{ Amazon, X }
并且由于(比如说)X 限制现在无法满足该请求。
我的第一个问题是,请求是否独立,即我可以立即处理亚马逊请求并将 X 请求排队吗?如果是这样,那么每个服务的简单 FIFO 队列肯定会完成这项工作。您可能需要有一个最大大小的队列(鉴于 HTTP 请求超时,您不能等待数小时)。
如果您打算推迟发出亚马逊请求,直到可以发出 X 请求,那么事情就会变得更加复杂。我认为您实际上遇到了会议安排问题。当 Amazon 和 X 都免费时,您需要找到一个插槽。因此,您可以拥有某种队列列表,每个队列用于在该时间单位内满足服务的请求。
Amazon(3 per sec)
09:05:31 - request A, B, C
09:05:32 - request D, E, F
09:05:33 - request G - - <=== slots available
--- <=== times and slots available
X (2 per min)
09:05 - request M, N
09:06 - request O <=== slot available
我们的 { Amazon, X } 在 09:06 有一个可用的位置
Amazon(3 per sec)
09:05:31 - request A, B, C
09:05:32 - request D, E, F
09:05:33 - request G - - <=== slots available
--- <=== times and slots available
09:06:01 - request P
X (2 per min)
09:05 - request M, N
09:06 - request O, P
就我个人而言,我会从更简单的事情开始:如果由于达到任何一项服务限制而无法立即满足请求,请拒绝该请求。