2014-01-21 2 views
2

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

Мое главное приложение - это PHP, и он работает на Linux. В настоящий момент я очень доволен beanstalkd для нормальной очереди, но он не поддерживает этот режим работы. Раньше я использовал RabbitMQ, но считал его тяжелым и хрупким в сравнении. Было бы неплохо, если бы это можно было сделать самим менеджером очереди, так как после конфигурации он не нуждается в внешнем вводе.

В отсутствие конкретной поддержки для чего-то подобного я мог бы попытаться использовать обычную очередь с процессом, вставляющим в него токены с очень коротким сроком действия, хотя это кажется очень неэлегантным. Любые лучшие идеи?

ответ

0

Вы можете использовать один из этого подходит:

  1. Использования тема обмена с регулярными очередями, но установить сообщение ttl для ваших нужд. Про этот метод заключается в том, что вы можете иметь небольшое отставание, скажем, в течение последних 5 секунд, что позволяет вашему приложению восстанавливаться после кратковременных проблем, например, потеря сети во время некоторого обслуживания. Нет.

  2. Вы можете публиковать сообщения в обмене фанатов и объявлять очереди с флагом auto-delete, а затем использовать их. Самый большой аргумент этого способа заключается в том, что сообщения дублируются через очереди. Фактически, это может быть pro, если вам нужно такое поведение, но вы также можете добиться его с обменом темами легко с дополнительными очередями с одинаковой привязкой.

+0

Дубликаты сообщений не имеют значения - все, что имеет значение, - это наличие токена; он не должен иметь никакого содержания или значения вообще - на самом деле мне не нужен какой-либо ввод сообщений, если очередь может создавать свои собственные токены. Я действительно не хочу использовать Кролика, поскольку у меня было так много проблем с ним в прошлом. – Synchro

Смежные вопросы