Я не уверен, что полностью понял, где вы видите проблему. От
некоторые более поздние запросы могут фактически иметь право на обработку до более ранних.
Я полагаю, что вас беспокоят запросы буферизации, которые не могут быть удовлетворены сейчас, но могут быть обработаны в ближайшее время.
Вы получили запрос, такие как
{ Amazon, X }
и из (скажем) X дросселирования не может satisify этот запрос прямо сейчас.
Моим первым вопросом было бы, являются ли запросы независимыми, то есть я могу обработать запрос Amazon немедленно и поставить очередь на запрос X? Если это так, то простая очередь FIFO для каждого сервисного сервиса наверняка выполнит эту работу. Вероятно, вам нужно будет иметь максимальный размер очереди (учитывая, что время ожидания запросов HTTP, вы не можете ждать несколько часов).
Если вы имеете в виду отсрочку выдачи запроса Amazon до тех пор, пока не будет возможно выдавать запрос 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
Лично я хотел бы начать с чем-то гораздо проще: Если запрос не может быть удовлетворяется прямо сейчас, потому что любой один лимит обслуживания достигнут, просто отклоните запрос.