Нам было бы интересно услышать любые впечатления от плюсов и минусов ActiveMQ против RabbitMQ против ZeroMQ. Также приветствуется информация о любых других интересных очередях сообщений.
ActiveMQ или RabbitMQ или ZeroMQ или
Ответ 1
Изменить: В моем первоначальном ответе основное внимание уделялось AMQP. Я решил переписать его, чтобы предложить более широкий взгляд на эту тему.
Эти 3 технологии обмена сообщениями имеют разные подходы к созданию распределенных систем:
RabbitMQ является одной из ведущих реализаций протокола AMQP (наряду с Apache Qpid). Поэтому он реализует архитектуру брокера, а это означает, что сообщения отправляются в очередь на центральный node перед отправкой клиентам. Этот подход делает RabbitMQ очень простым в использовании и развертывании, поскольку расширенные сценарии, такие как маршрутизация, балансировка нагрузки или постоянная очередь сообщений, поддерживаются всего несколькими строками кода. Однако он также делает его менее масштабируемым и "медленным", потому что центральный node добавляет задержки и конверты сообщений довольно большие.
ZeroMq - это очень легкая система обмена сообщениями, специально разработанная для сценариев с высокой пропускной способностью и низкой задержкой, таких как тот, который вы можете найти в финансовом мире. Zmq поддерживает множество передовых сценариев обмена сообщениями, но, вопреки RabbitMQ, вы должны реализовать большинство из них, объединив различные части фреймворка (например, сокеты и устройства). Zmq очень гибкий, но вам нужно изучить 80 страниц или около того руководства (который я рекомендую читать для любого, кто пишет распределенную систему, даже если вы не используйте Zmq), прежде чем сможете сделать что-нибудь более сложное, чем отправлять сообщения между двумя сверстниками.
ActiveMQ находится в середине. Как и Zmq, он может быть развернут с использованием как брокерских, так и P2P-топологий. Как и RabbitMQ, его проще реализовать расширенные сценарии, но обычно это стоит за счет производительности. Его швейцарский армейский нож обмена сообщениями: -).
Наконец, все 3 продукта:
- есть клиентский apis для наиболее распространенных языков (С++, Java,.Net, Python, Php, Ruby,...)
- имеют прочную документацию.
- активно поддерживаются.
Ответ 2
Почему вы пропустили Sparrow, Starling, Kestrel, Amazon SQS, Beanstalkd, Kafka, IronMQ?
Серверы очереди сообщений
Серверы очереди сообщений доступны на разных языках: Erlang (RabbitMQ), C (beanstalkd), Ruby (Starling или Sparrow), Scala (Kestrel, Kafka) или Java (ActiveMQ). Краткий обзор можно найти здесь
Sparrow
- написанный Alex MacCaw
- Воробей - это легкая очередь, написанная на Ruby, которая "говорит memcache"
Старлинг
- написан Блейн Кук в Twitter
- Starling - это сервер очереди сообщений на основе MemCached
- написан на Ruby
- хранит задания в памяти (очередь сообщений)
- : некоторые хорошие учебные пособия, например railscast о скворцах и работе или это сообщение в блоге о скворцах
Kestrel
- написанный Robey Pointer
- Квест пользователя Starling, написанный в Scala (порт Starling от Ruby до Scala)
- Очереди хранятся в памяти, но записываются на диск
RabbitMQ
- RabbitMQ - сервер очереди сообщений в Erlang
- хранит задания в памяти (очередь сообщений)
Apache ActiveMQ
- ActiveMQ - это брокер сообщений с открытым исходным кодом в Java
Beanstalkd
- написанный Philotic, Inc. для улучшения времени отклика приложения Facebook.
- служба занятости в памяти, в основном написанная на C
- Docu: http://nubyonrails.com/articles/about-this-blog-beanstalk-messaging-queue
Amazon SQS
Кафка
- Написан в LinkedIn в Scala
- Используется LinkedIn для разгрузки обработки всех страниц и других представлений.
- По умолчанию для использования persistence используется кеш OS disk для горячих данных (имеет более высокую пропускную способность, чем любой из вышеперечисленных с включенной поддержкой)
- Поддерживает как on-line, так и автономную обработку
ZMQ
- Библиотека сокетов, которая работает как инфраструктура concurrency
- Быстрее, чем TCP, для кластеризованных продуктов и суперкомпьютеров
- Переносит сообщения через inproc, IPC, TCP и многоадресную рассылку
- Подключить N-to-N через разветвление, pubsub, конвейер, запрос-ответ
- Asynch I/O для масштабируемых многоядерных приложений для передачи сообщений
EagleMQ
- EagleMQ - это высокопроизводительный и легкий менеджер очередей с открытым исходным кодом.
- Написано на C
- Сохраняет все данные в памяти и поддерживает постоянство.
- У этого есть свой собственный протокол. Поддерживает работу с очередями, маршрутами и каналами.
IronMQ
- IronMQ
- Написано в Go
- Полностью управляемая служба очереди
- Доступно как в виде облачной версии, так и на месте
Я надеюсь, что это будет полезно для нас. источник
Ответ 3
Дополнительная информация, чем вы хотели бы знать:
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
UPDATE
Просто уточняю, что Павел добавил в комментарии. Страница упомянутая выше, умерла после 2010 года, поэтому прочитайте ее с большим количеством соли. Много вещей было изменено через 3 года.
Ответ 4
Это действительно зависит от вашего прецедента.
Сравнение 0MQ с ActiveMQ или RabbitMQ несправедливо. ActiveMQ и RabbitMQ - это системы обмена сообщениями, для которых требуется установка и администрирование. Они предлагают больше, чем ZeroMQ. У них есть реальные постоянные очереди, поддержка транзакций и т.д.
ZeroMQ - это облегченная реализация сокета с ориентированным ориентиром. Он также подходит для асинхронного программирования в процессе. Можно запустить "Enterprise Messaging System" над ZeroMQ, но вам придется много реализовывать самостоятельно.
Итак:
ActiveMQ, RabbitMQ, Websphere MQ и MSMQ - это "очереди корпоративных сообщений"
ZeroMQ - это библиотека IPC, ориентированная на сообщения.
Ответ 5
Здесь сравнивается RabbitMQ и ActiveMQ здесь. Исходя из этого, ActiveMQ настроен так, чтобы гарантировать доставку сообщений, что может дать впечатление медленное по сравнению с менее надежными системами обмена сообщениями. Вы всегда можете изменить конфигурацию производительности, если хотите, и получить как минимум хорошую производительность, чем любая другая система обмена сообщениями. По крайней мере, у вас есть этот вариант. Там много информации на форумах и FAQ ActiveMQ для настройки масштабирования, производительности и высокой доступности. Кроме того, ActiveMQ будет поддерживать AMQP 1.0, когда спецификация будет завершена, вместе с другими форматами проводов, такими как STOMP.
Еще одним плюсом для ActiveMQ является его проект Apache, поэтому в сообществе разработчиков есть разнообразие, и оно не привязано к одной компании.
Ответ 6
Я не использовал ActiveMQ или RabbitMQ, но использовал ZeroMQ. Большая разница, поскольку я вижу это между ZeroMQ и ActiveMQ и т.д., Заключается в том, что 0MQ является брокерским и не имеет встроенной надежности для доставки сообщений. Если вы ищете простой в использовании API обмена сообщениями, поддерживающий многие шаблоны обмена сообщениями, транспорты, платформы и языковые привязки, то 0MQ определенно стоит посмотреть. Если вы ищете полноценную платформу обмена сообщениями, то 0MQ может не соответствовать счету.
См. www.zeromq.org/docs:cookbook для множества примеров того, как можно использовать 0MQ.
Я успешно использую 0MQ для передачи сообщений в приложении мониторинга потребления электроэнергии (см. http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/)
Ответ 7
Я использую zeroMQ. Мне нужна простая система передачи сообщений, и мне не нужно усложнять брокера. Я также не хочу огромную ориентированную на Java систему предприятия.
Если вам нужна быстрая и простая система, и вам нужно поддерживать несколько языков (я использую C и .net), то я бы рекомендовал посмотреть на 0MQ.
Ответ 8
Я могу добавить только 2 цента об ActiveMQ, но так как это один из самых популярных:
Язык, который вы хотите написать, может быть важен. Хотя ActiveMQ действительно имеет клиента для большинства, их реализация С# далека от завершения по сравнению с библиотекой Java.
Это означает, что некоторые базовые функции являются flaky (протокол отказа, который... ну... не удается в некоторых случаях, без поддержки пересылки), а другой просто нет. Поскольку .NET, похоже, не так важен для проекта, разработка довольно медленная, и, похоже, нет плана выпуска. Магистральная сеть часто ломается, поэтому, если вы это рассмотрите, вы можете подумать о том, чтобы внести вклад в проект, если хотите, чтобы все продолжалось.
Тогда есть сам ActiveMQ, который имеет много приятных функций, но некоторые очень странные проблемы. Мы используем версию activecq Fuse (Progress) по причинам стабильности, но даже тогда есть несколько странных "ошибок", которые вы хотите иметь в виду:
- Брокеры, которые перестают отправлять сообщения в некоторых случаях
- Журнал Ошибки, отображающие сообщения очереди, которых больше нет (они не доставляются потребителю, но все же)
- Приоритет все еще не реализован (находится в списке проблем с самого начала человеческого рода)
- и т.д.. и др.
Все и все, это довольно хороший продукт, если вы можете жить со своими проблемами:
A) не боятся активно участвовать при использовании .NET.
B) развивается в java; -)
Ответ 9
ZeroMQ действительно с нулевыми очередями! Это действительно ошибка! Это не hav очереди, темы, настойчивость, ничего! Это лишь промежуточное ПО для API сокетов. Если это то, что вы выглядите круто! иначе забудьте об этом! это не так, как activeMQ или rabbitmq.
Ответ 10
Существует сравнение возможностей и производительности RabbitMQ ActiveMQ и QPID, приведенных в
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/
Лично я пробовал все три выше. По моему мнению, RabbitMQ - лучшая производительность, но у него нет вариантов восстановления после сбоя и восстановления. ActiveMQ имеет большинство функций, но медленнее.
Обновление: HornetQ - это также вариант, который вы можете изучить, это жалоба JMS, лучший вариант, чем ActiveMQ, если вы ищете JMS-based решение.
Ответ 11
Я написал о своем первоначальном опыте относительно AMQP, Qpid и ZeroMQ здесь: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/
Мое субъективное мнение заключается в том, что AMQP прекрасен, если вам действительно нужны постоянные средства обмена сообщениями, и не слишком обеспокоен тем, что брокер может быть узким местом. Кроме того, клиент С++ в настоящее время отсутствует для AMQP (Qpid не выиграл мою поддержку, но не уверен в том, что клиент ActiveMQ), но, возможно, работает. ZeroMQ может быть другим способом.
Ответ 12
Я использовал ActiveMQ в производственной среде уже около 3 лет. В то время как он выполняет свою работу, выстраивание версий клиентских библиотек, которые работают исправно и без ошибок, может быть проблемой. В настоящее время искали переход на RabbitMQ.
Ответ 13
В комментариях это сообщение в блоге обсуждается, о том, что Twitter пишет свою собственную очередь сообщений, что может быть интересно.
Стив сделал обширную нагрузку и стресс тестирование ActiveMQ, RabbitMQ и т.д. ActiveMQ на самом деле довольно медленный (много медленнее, чем пустельга), RabbitMQ последовательно падает со слишком большим количеством производителей и слишком мало потребителей.
Вероятно, у вас, вероятно, не будет загрузки с Twitter-подобным образом:)
Ответ 14
Несколько приложений имеют столько настроек настройки, как ActiveMQ. Некоторые функции, которые выделяют ActiveMQ, заключаются в следующем:
Конфигурируемый размер предварительной выборки. Настраиваемая резьба. Конфигурируемый переход на другой ресурс. Настраиваемые административные уведомления производителей. ... подробнее:
Ответ 15
Аби, все сводится к твоему прецеденту. Вместо того, чтобы полагаться на чью-либо учетную запись своего варианта использования, не стесняйтесь публиковать свой прецедент в списке rabbitmq-discuss. Если вы попросите в Twitter, вы получите ответы. С наилучшими пожеланиями, алексей
Ответ 16
Об ZeroMQ aka 0MQ, как вы уже могли знать, это тот, который получит наибольшее количество сообщений в секунду (они были около 4 миллионов в секунду на их сервере ref в последний раз, когда я проверял), но, как вы могли бы уже знаете, документация не существует. Вам будет трудно найти, как запустить сервер (ы), не говоря уже о том, как их использовать. Я предполагаю, что отчасти почему никто еще не внес около 0MQ.
Удачи!
Ответ 17
Если вы также заинтересованы в коммерческих реализациях, вы должны взглянуть на Nirvana из my-channels.
Нирвана широко используется в отрасли финансовых услуг для широкомасштабных платформ с низкой задержкой и ценообразования.
Существует поддержка широкого спектра языков программирования клиентов на корпоративном, веб-и мобильном доменах.
Возможности кластеризации чрезвычайно продвинуты и заслуживают внимания, если для вас важна прозрачность HA или балансировка нагрузки.
Nirvana можно скачать бесплатно для целей разработки.