RabbitMQ Высокая скорость передачи сообщений - PullRequest
8 голосов
/ 23 января 2010

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

Достаточно ли быстр RabbitMq для мягкой доставки сообщений в реальном времени? Есть ли ориентиры? Это хорошая идея, чтобы использовать его вместо TIBCO Rendezvous? Существуют ли другие альтернативные программы обмена сообщениями в реальном времени с открытым исходным кодом?

Спасибо.

Ответы [ 3 ]

14 голосов
/ 26 января 2010

(я разработчик rabbitmq.)

Кролик при небольшой загрузке обычно имеет задержки порядка 100-400 микросекунд, в зависимости от таких вещей, как ваша сетевая карта и скорость процессора. Как только загрузка становится немного тяжелее, начинает появляться внутренняя буферизация и немного увеличиваются задержки. Вы можете спокойно ожидать задержки в 1 мс до тех пор, пока использование полосы пропускания (количество сообщений в секунду, число байтов в секунду) не станет высоким. Задержки также возрастут, как только появится постоянство.

Что касается тестов, одна из самых больших проблем здесь - это определение того, что важно для вашего приложения. Есть несколько тривиально простых примеров измерения латентности и пропускной способности «точка-точка» и «pub-sub», включенных в клиент Java; спросите в списке rabbitmq-обсудить, есть ли у вас проблемы с ними! Они не имеют большого значения для реальных приложений, но могут помочь устранить любые опасения, связанные с микробенчмарками задержки или пропускной способности.

Наконец, сегодня доступно множество хороших систем обмена сообщениями с открытым исходным кодом и связанных с ними сообщений. В мире AMQP, кроме RabbitMQ, есть также Qpid и OpenAMQ. Существуют также хорошие JMS-серверы с открытым исходным кодом, если вы можете ограничить себя Java (многие люди имеют успех с ActiveMQ). Многие легковесные системы появляются и для систем Ruby и Python; Эти системы, как правило, концентрируются только на очереди и не имеют возможности гибкой маршрутизации, которую предлагает AMQP.

4 голосов
/ 01 февраля 2010

Вы должны иметь возможность получать много десятков тысяч сообщений в секунду на процессор. Например, один из наших стандартных тестов отправляет 25 тыс. Сообщений в секунду от клиента Java на сервер, работающий на четырехъядерном блоке debian COTS, и обратно на клиент. Клиент и сервер работают в одном и том же окне, поэтому на сервере обрабатывается 50 000 сообщений в секунду, а на клиенте - 50 000 сообщений. Вы можете получить более высокие показатели, запустив сервер на выделенной коробке с большим количеством ядер. Для ставок, основанных на байтах / секунду, пожалуйста, спросите в списке рассылки rabbitmq-обсудить.

Alexis

2 голосов
/ 29 ноября 2011

Лучшее решение, которое я могу придумать для вашей системы, это ZeroMQ .

У него нет настойчивости, что вы сказали, что вам не нужно, и это ОЧЕНЬ быстро и просто в использовании.

Это не реализация AMQP (которая, кажется, вам тоже не нужна), но, как сказано в этом руководстве :

ØMQ (ZeroMQ, 0MQ, zmq) выглядит как встраиваемая сетевая библиотека, но действует как среда параллелизма. Это дает вам сокеты, которые передают целые сообщения через различные транспорты, такие как внутрипроцессный, межпроцессный, TCP и многоадресная передача. Вы можете соединить сокеты N-to-N с такими шаблонами, как разветвление, pub-sub, распределение задач и запрос-ответ. Это достаточно быстро, чтобы быть тканью для кластерных продуктов. Его модель асинхронного ввода-вывода предоставляет масштабируемые многоядерные приложения, созданные как задачи асинхронной обработки сообщений. Он имеет множество языковых API и работает в большинстве операционных систем.

...