Проектирование и масштабирование очереди RabbitMQ

В моем приложении есть очередь, которая потенциально может стать очень большой. Что, если я обнаружу, что на моей машине больше нет места? Как я могу разделить свою очередь на несколько машин? Может быть, философия RabbitMQ отличается, и мне следует создать несколько очередей вместо одной большой очереди?

Лучший, Флавио


person user2539645    schedule 18.07.2013    source источник


Ответы (2)


Как вы можете прочитать в ветке списка рассылки RabbitMQ http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html, решение, которое я придумал, заключается в реализации шаблона конкурирующих потребителей (много потребителей в очереди), который при обнаружении специальное сообщение (с включенным стоп-флажком) отправляет STOP-сообщение в топик-обмен.

Это стоп-сообщение получает «главный» потребитель для этой очереди, который начинает опрашивать Zookeeper (через куратора) до тех пор, пока все дочерние элементы определенного zkNode не будут удалены (в данном случае с использованием Zookpeer в качестве реестра потребителей очередей). Когда все потребители завершили фазу остановки, «главный» потребитель выполняет некоторую задачу и повторно включает потребителей исходной очереди, отправляя сообщение RESTART в обмен темами (где каждый потребитель прослушивает выделенную очередь).

Я надеюсь, что это может помочь (или «вдохновить») кого-то еще.

person user2539645    schedule 05.08.2013

RabbimMQ обеспечивает кластеризацию и функции высокой доступности прямо из коробки, вам просто нужно настроить их в соответствии со своими потребностями.

На самом деле AMQP может хранить сообщения любого размера, но в большинстве случаев сообщения имеют размер до 32 КБ в 99%, я думаю. Вы можете рассчитать оценочное использование ресурсов (мин./макс./среднее) и принять дальнейшее решение о кластеризации или отказе от кластеризации.

person pinepain    schedule 19.07.2013
comment
Насколько я понял, очереди нельзя разделить между разными машинами, одна очередь находится только на одном узле (поэтому одна очередь не может так сильно масштабироваться). Я ошибаюсь? - person user2539645; 19.07.2013
comment
Правильно, очередь живет на одном узле (но может быть зеркалирована на другой). Какова ваша оценка размера сообщений и скорости потока? - person pinepain; 19.07.2013
comment
На самом деле это то, что будет оцениваться в ближайшие дни. Я ожидаю, что терабайты данных будут поступать в течение нескольких часов, поэтому я должен ожидать очень сильно загруженную систему. Возможно, лучшим решением может быть создание нового обмена вместо очереди , и добавить больше очереди (требовательной к кластеру) по мере роста нагрузки.. что вы думаете? Проблема в том, создает ли биржа новую очередь равномерно на узлах (например, по кругу)? - person user2539645; 19.07.2013
comment
В кластерной среде пользователь может видеть все очереди в нем, поэтому я думаю, что брокер может выбрать любой узел для создания очереди. Но AMQP предназначен не для хранения терабайтов данных, а для их доставки. Вы можете запустить множество рабочих для его обработки. Вы можете узнать подробности у ребят из RabbitMQ на irc-канале и опубликовать ответ здесь. - person pinepain; 19.07.2013