Мне нужна высокая производительность шины сообщений для моего приложения, так что я оцениваю работу ZeroMQ
, в RabbitMQ
и в Apache Qpid
. Чтобы измерить производительность, я использую тестовую программу, которая публикует сказать 10000 сообщений, используя одну из реализаций очереди сообщений и другой процесс на этой же машине, чтобы потреблять эти 10000 сообщений. Тогда я записываю разница во времени между первым опубликовал сообщение и последнее сообщение.
Ниже перечислены настройки, которые я использовал для сравнения.
В RabbitMQ
: я использовал на "разветвитель" в обмен тип и очереди с конфигурацией по умолчанию. Я использовал клиентскую библиотеку в RabbitMQ с.ZeroMQ
: мой издатель publises для протокола TCP://localhost в:порт 1с
ZMQ_PUSHгнездо, Мой Брокер по протоколу TCP://localhost в:порт 1 и отправляет сообщение на TCP://localhost в:порт2 и мой потребительскими прослушивает
протокол TCP://localhost в:порт2через
ZMQ_PULL` гнездо. Я через брокера вместо того, чтобы равный-равному связи в ZeroMQ для того чтобы сделать сравнение производительности ярмарка на другие сообщения в очереди выполнения, которые используются брокерами.Qpid
с брокером сообщение++: я и "разветвитель" в обмен тип и очереди с конфигурацией по умолчанию. Я использовал клиент Qpid библиотеки C++.Ниже приведен результат выполнения:
В RabbitMQ
: она занимает около 1 секунды, чтобы получить 10 000 сообщений.ZeroMQ
: она занимает около 15 Милли секунд, чтобы получить 10 000 сообщений.Qpid
: она занимает около 4 секунд, чтобы получить 10 000 сообщений.Вопросы:
в RabbitMQ
или Qpid
, чтобы сделать его лучше производительность? Примечание:
Тесты были сделаны на виртуальной машине с двумя выделенный процессор. Результат может отличаться в зависимости от оборудования, однако я в основном заинтересованы в относительных характеристиках продукции соток.
В RabbitMQ является, вероятно, делать упорство на эти сообщения. Я думаю, вам нужно установить приоритет сообщения или другой вариант в сообщения, чтобы не делать настойчивости. Производительность повысится в 10 раз тогда. Вы должны ожидать, по крайней мере 100к сообщений в секунду через протокол AMQP брокера. В OpenAMQ мы получили производительность до 300к сообщений в секунду.
Протокол AMQP был предназначен для скорости (например, он не распаковывает сообщений для их маршрутизации) но ZeroMQ просто лучше разработаны в ключевых вопросах. Е. Г. он удаляет хоп, соединительных узлов без посредника; он делает лучше асинхронного ввода/вывода, чем любой из стеков протокола AMQP клиент; это делает более агрессивным дозирования сообщение. Возможно, 60% времени провел дома ZeroMQ зашел в настройки производительности. Это была очень тяжелая работа. Это's не быстрее случайно.
Одна вещь, я'd, как это сделать, но я слишком занят, чтобы воссоздать протокола AMQP-как брокер на ZeroMQ. Здесь есть первый слой: http://rfc.zeromq.org/spec:15. Весь стек будет несколько работать, как RestMS, с транспортом и семантики разделяются на два слоя. Это обеспечивают те же функциональные возможности, как протокол AMQP/0.9.1 (и семантически интероперабельных), но значительно быстрее.
Мда, конечно ZeroMQ будет быстрее, он предназначен, чтобы быть и не много брокер функциональность, что и другие два обеспечивают. На сайте ZeroMQ есть замечательное сравнение брокер против обмена сообщениями brokerless и недостатки & преимущества обоих.
RabbitMQ и 0MQ сосредоточены на различных аспектах обмена сообщениями. 0MQ ставит гораздо больше внимания на то, как сообщения передаются по проводам. В RabbitMQ, с другой стороны, фокусируется на том, как сообщения сохраняются, фильтруется и контролируется.
(Я тоже, как выше в RabbitMQ пост выше, а также говорит об использовании ZeroMQ С в RabbitMQ)
Так, что я'м пытаюсь сказать, что вы должны решить, на Техника, который лучше всего соответствует вашим требованиям. Если единственным требованием является скорость, ZeroMQ. Но если вам нужны другие аспекты, такие как сохранение сообщений, фильтрация, мониторинг, отказоустойчивость, и т. д. Ну, то, что's, когда вы должны начать рассматривать в RabbitMQ & Qpid.
Я через брокера, а не равный-равному связи в ZeroMQ, чтобы сделать сравнение производительности ярмарка для реализации очереди сообщений, использует посредников.
Не знаю, почему вы хотите сделать это, если единственное, что вы заботитесь о производительности, нет необходимости, чтобы сделать равные условия. Если вы Don'т волнует сохранение, фильтрация, и т. д. тогда зачем платить такую цену?
Я'м еще и очень хитрый запуск тестов на ВМ'ы -- есть много дополнительных слоев, которые могут повлиять на результаты в целях, которые не очевидны. (Если вы're планирует запустить реальной системы на виртуальную машину'ы, конечно, в этом случае это очень действенный метод).
Я'вэ проверены на C++/qpid
Я послал 50000 сообщений в секунду между двух разных машинах в течение длительного времени без очереди.
Я не'т использовать разветвителя, просто обмен (не постоянные сообщения)
Вы используете постоянные сообщения? Ты парсинга сообщений?
Я полагаю, нет, поскольку 0MQ не'т иметь структуры сообщения.
Если брокер в основном простаивает, вы, наверное, не'т настроили выборки на отправителя и рецепторов. Это очень важно, чтобы отправить много сообщений.
Мы сравнили в RabbitMQ с нашим SocketPro (http://www.udaparts.com/) постоянные очереди сообщений в http://www.udaparts.com/document/articles/fastsocketpro.htm сайт со всеми исходниками. Вот такие результаты мы получили в RabbitMQ:
Же машина помещение и извлечения:
"Привет Мир" и -- помещение: 30000 сообщений в секунду; из них: 7000 сообщений в секунду.
текст с 1024 байт -- помещение: 11000 сообщений в секунду; из них: 7000 сообщений в секунду.
текст с 10 * 1024 байт -- помещение: 4000 сообщений в секунду; из них: 4000 сообщений в секунду.
Кросс-машина помещение и извлечения сети с пропускной способностью 100 Мбит / с:
"Привет Мир" и -- помещение: 28000 сообщений в секунду; из них: 1900 сообщений в секунду.
текст с 1024 байт -- помещение: 8000 сообщений в секунду; извлечения: 1000 сообщений в секунду.
текст с 10 * 1024 байт -- помещение: 800 сообщений в секунду; из них: 700 сообщений в секунду.
Мы'ве разработан открытым исходным кодом автобусного сообщения, построенные на вершине ZeroMQ - мы изначально сделали это, чтобы заменить Qpid. Это'ы brokerless так что's не совсем честное сравнение, но оно предоставляет такие же функции, как при посредничестве решений.
Наш показатель производительности 140к сбщ в секунду между двумя машинами, но вы можете посмотреть более подробно здесь: https://github.com/Abc-Arbitrage/Zebus/wiki/Performance