Сравнения производительности между ZeroMQ, RabbitMQ и в Apache Qpid
Мне нужна высокая производительность шины сообщений для моего приложения, так что я оцениваю работу 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:
(Я тоже, как выше в RabbitMQ пост выше, а также говорит об использовании ZeroMQ С в RabbitMQ)
Так, что я'м пытаюсь сказать, что вы должны решить, на Техника, который лучше всего соответствует вашим требованиям. Если единственным требованием является скорость, ZeroMQ. Но если вам нужны другие аспекты, такие как сохранение сообщений, фильтрация, мониторинг, отказоустойчивость, и т. д. Ну, то, что's, когда вы должны начать рассматривать в RabbitMQ & Qpid.
Не знаю, почему вы хотите сделать это, если единственное, что вы заботитесь о производительности, нет необходимости, чтобы сделать равные условия. Если вы Don'т волнует сохранение, фильтрация, и т. д. тогда зачем платить такую цену?
Я'м еще и очень хитрый запуск тестов на ВМ'ы -- есть много дополнительных слоев, которые могут повлиять на результаты в целях, которые не очевидны. (Если вы're планирует запустить реальной системы на виртуальную машину'ы, конечно, в этом случае это очень действенный метод).
Я'вэ проверены на C++/qpid
Я послал 50000 сообщений в секунду между двух разных машинах в течение длительного времени без очереди.
Я не'т использовать разветвителя, просто обмен (не постоянные сообщения)
Вы используете постоянные сообщения? Ты парсинга сообщений?
Я полагаю, нет, поскольку 0MQ не'т иметь структуры сообщения.
Если брокер в основном простаивает, вы, наверное, не'т настроили выборки на отправителя и рецепторов. Это очень важно, чтобы отправить много сообщений.
Мы сравнили в RabbitMQ с нашим SocketPro (http://www.udaparts.com/) постоянные очереди сообщений в http://www.udaparts.com/document/articles/fastsocketpro.htm сайт со всеми исходниками. Вот такие результаты мы получили в RabbitMQ:
Же машина помещение и извлечения:
Кросс-машина помещение и извлечения сети с пропускной способностью 100 Мбит / с:
Попробуйте настроить выборки на отправителя и рецепторов со значение 100. Предвыборка просто отправитель не хватает
Мы'ве разработан открытым исходным кодом автобусного сообщения, построенные на вершине ZeroMQ - мы изначально сделали это, чтобы заменить Qpid. Это'ы brokerless так что's не совсем честное сравнение, но оно предоставляет такие же функции, как при посредничестве решений.
Наш показатель производительности 140к сбщ в секунду между двумя машинами, но вы можете посмотреть более подробно здесь: https://github.com/Abc-Arbitrage/Zebus/wiki/Performance