Я ищу способ дросселирования различных процессов на кластерной основе. Для этого требуется какой-то централизованный контроль, который может справиться с любым количеством потребителей событий. Мысль, что у меня есть, включает в себя очередь только для чтения, которая генерирует токены с определенной скоростью без задержек (так что пропущенные события просто отбрасываются). Например, скажем, у меня есть некоторый веб-API, который нужно дросселировать до 10 000 сообщений в час, но это может быть вызвано с любого количества серверов в кластере. Я бы сконфигурировал очередь для создания токенов со скоростью 10 тыс. Сообщений в час, и все серверы подключились к этой очереди и извлекли токен перед продолжением. Это приведет к появлению элемента задержки (3600/10000 секунд после первого запроса), но будет плавным и предсказуемым, независимо от количества пользователей. Я не хочу иметь отставание, потому что я не хочу спешить после спокойного периода - цель состоит не только в том, чтобы ограничить общее количество событий в час, а равномерно распределить их по нему.Очередь только для чтения для дросселирования распределенных событий?
Мое главное приложение - это PHP, и он работает на Linux. В настоящий момент я очень доволен beanstalkd для нормальной очереди, но он не поддерживает этот режим работы. Раньше я использовал RabbitMQ, но считал его тяжелым и хрупким в сравнении. Было бы неплохо, если бы это можно было сделать самим менеджером очереди, так как после конфигурации он не нуждается в внешнем вводе.
В отсутствие конкретной поддержки для чего-то подобного я мог бы попытаться использовать обычную очередь с процессом, вставляющим в него токены с очень коротким сроком действия, хотя это кажется очень неэлегантным. Любые лучшие идеи?
Дубликаты сообщений не имеют значения - все, что имеет значение, - это наличие токена; он не должен иметь никакого содержания или значения вообще - на самом деле мне не нужен какой-либо ввод сообщений, если очередь может создавать свои собственные токены. Я действительно не хочу использовать Кролика, поскольку у меня было так много проблем с ним в прошлом. – Synchro