Промежуточное программное обеспечение сообщений — это промежуточная технология, состоящая из механизма передачи сообщений или режима очереди сообщений, которая использует эффективный и надёжный механизм обмена сообщениями для независимого от платформы и интегрирующая распределённые системы на основе передачи данных. В настоящее время в отрасли существует множество продуктов MQ, таких как RabbitMQ, ActiveMQ, ZeroMQ и др., которые являются отличным промежуточным ПО, но какой из них стоит выбрать в проекте? В этой статье оцениваются и сравниваются следующие продукты очереди сообщений: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis и memcacheQ
Отступление: Здесь мы сначала можем задуматься над небольшим вопросом: «Зачем нам нужны сервисы очереди сообщений в веб-приложениях?» ” Например, большое количество запросов на вставку, обновление и другие запросы поступает в MySQL одновременно, что напрямую приводит к бесчисленным блокировкам строк и таблицам, а в итоге — слишком большому числу запросов, что приводит к слишком большому числу ошибок соединений. Используя очереди сообщений, мы можем асинхронно обрабатывать запросы, снижая нагрузку на систему.
RabbitMQ Это открытая очередь сообщений, написанная на Erlang, которая поддерживает множество протоколов: AMQP, XMPP, SMTP, STOMP, что делает её очень тяжёлой и более подходящей для корпоративной разработки. Это ведущая реализация протокола AMQP, который реализует архитектуру брокера, то есть сообщения могут быть поставлены в очередь на центральном узле перед отправкой клиенту. Есть хорошая поддержка маршрутизации, балансировки нагрузки или сохранения данных. Эта функция делает RabbitMQ простым в использовании и развертывании, подходит для многих сценариев, таких как маршрутизация, балансировка нагрузки или сохранение сообщений, и может быть реализована всего за несколько строк кода с очередями сообщений. Однако это делает его менее масштабируемым и медленным, поскольку центральный узел увеличивает задержку и становится больше после инкапсуляции сообщения. Чтобы настроить RabbitMQ, нужно установить среду Erlang на целевом компьютере. Нажмите, чтобы просмотреть это изображение в новом окне
? MQ(ZeroMQ) Она известна как самая быстрая система очереди сообщений, особенно для сценариев высокопроизводительного спроса. Это очень лёгкая система обмена сообщениями, разработанная специально для сценариев с высокой пропускной способностью и низкой задержкой, которая часто встречается в финансовых приложениях. По сравнению с RabbitMQ, ZeroMQ поддерживает множество продвинутых сценариев сообщений, но в фреймворке ZeroMQ нужно реализовать отдельные блоки (например, сокеты или устройства и т.д.).
? MQ (ZeroMQ) может реализовывать продвинутые и сложные очереди, в которых RabbitMQ не очень хорош, но разработчикам нужно объединять несколько технических фреймворков самостоятельно, и техническая сложность представляет собой вызов для успешного применения этого MQ. ZeroMQ имеет уникальную модель без промежуточного ПО, где не нужно устанавливать и запускать сервер сообщений или промежуточное ПО, потому что ваше приложение выполняет эту сервисную роль. Всё, что нужно сделать — просто ссылаться на библиотеку ZeroMQ, которую можно установить через NuGet, и вы сможете спокойно отправлять сообщения между приложениями. Однако ZeroMQ предоставляет только непостоянные очереди, что означает, что если машина выйдет из строя, данные будут потеряны. Среди них Twitter Storm использует ZeroMQ для передачи потоков данных. ZeroMQ очень гибкий, но нужно изучить его 80-страничное руководство (если вы пишете о распределённой системе, обязательно прочитайте его).
ZeroMQ не имеет архитектуры промежуточного программного обеспечения и не требует сервисных процессов и запуска. На самом деле, вашу конечную точку приложения выполняет эту функцию сервиса. Это делает развертывание очень простым, но проблема в том, что вам негде следить, если что-то пойдёт не так. Насколько нам известно, ZeroMQ предлагает только непостоянные очереди. Вы можете реализовать собственные возможности аудита и восстановления данных там, где они нужны. Нажмите, чтобы просмотреть это изображение в новом окне
MSMQ Это единственное, что в продукте Microsoft считается ценным. Если MSMQ сможет доказать свою способность справляться с такими задачами, они решат использовать её. Суть в том, что эта штука не сложная, она просто принимает и отправляет; Есть некоторые жёсткие ограничения, например, максимальный размер сообщения 4 МБ. Однако они могут решить эти проблемы, подключившись к некоторым программам, таким как MassTransit или NServiceBus. Нажмите, чтобы просмотреть это изображение в новом окне
Яфка/Кафка Kafka (распространяющая сообщения между разными узлами) — это распределённая система MQ, разработанная и открытая LinkedIn в декабре 2010 года, а сейчас является инкубационным проектом Apache — высокопроизводительной кросс-языковой распределённой системы очереди сообщений Publish/Subscribe, а Jafka инкубирается поверх Kafka — усовершенствованной версии Kafka. Он обладает следующими характеристиками: быстрая устойчивость, позволяющая сохранять сообщения при системных накладных расходах O(1); Высокая пропускная способность, которая может достигать скорости пропускной способности 10 Вт/с на обычном сервере; Полностью распределённая система, брокер, производитель и потребитель нативно поддерживают распределённое и автоматически достигают сложного равновесия. Поддерживает параллельную загрузку данных Hadoop, что является жизнеспособным решением для лог-журналов и офлайн-систем анализа, таких как Hadoop, но с ограничениями обработки в реальном времени. Kafka объединяет онлайн- и офлайн-обработку сообщений с помощью параллельного механизма загрузки Hadoop, что также важно для системы, изучаемой в данной теме. Apache Kafka — это очень лёгкая система обмена сообщениями по сравнению с ActiveMQ, и помимо высокой производительности, это также распределённая система, которая хорошо работает. Нажмите, чтобы просмотреть это изображение в новом окне
Apache ActiveMQ ActiveMQ находится где-то между ними (RabbitMQ и ZeroMQ), аналогично ZemoMQ, и может быть развернут как в прокси, так и в P2P режимах. Подобно RabbitMQ, здесь легко реализовать продвинутые сценарии, и требуется небольшое потребление. ActiveMQ известен как основа мира Java. Он имеет долгую историю и широко используется. Она также кроссплатформенна, обеспечивая естественную точку доступа для продуктов, которые не находятся на платформе Microsoft. Однако его можно рассмотреть только в том случае, если он уже прошёл MSMQ. Для настройки ActiveMQ нужно установить Java-среду на целевую машину. Нажмите, чтобы просмотреть это изображение в новом окне Важно отметить, что продукт следующего поколения ActiveMQ — это Apollo, основанный на прототипе ActiveMQ и более быстрый, надёжный и простой в обслуживании инструмент брокера сообщений. Apache называет Apollo самым быстрым и надёжным сервером STOMP (Streaming Text Oriented Text Oriented Message Protocol). Особенности Аполлона следующие: Поддерживаются протоколы Stomp 1.0 и Stomp 1.1 Темы и очереди Браузер очередей Тематические постоянные подписки Зеркальная очередь Надёжные сообщения Истечение и обмен сообщениями Отбор сообщений Подтверждено JAAS Авторизация на основе ACL Поддержка SSL/TLS и валидации сертификатов API управления REST Нажмите, чтобы просмотреть это изображение в новом окне
Redis Это база данных Key-Value NoSQL, которая активно разрабатывается и поддерживается, хотя это система хранения баз данных Key-Value, но поддерживает функции MQ, поэтому может использоваться как легкий сервис очереди. Для операций вхождения и выхода в очередь RabbitMQ и Redis — по 1 миллион раз каждая, а время выполнения записывается каждые 100 000 раз. Тестовые данные делятся на четыре разных размера: 128 байт, 512 байт, 1K и 10K. Эксперименты показывают, что при присоединении к команде производительность Redis выше, чем у RabbitMQ при небольшом сравнении данных, а если объём данных превышает 10K, Redis работает невыносимо медленно. Выходя из команды, Redis показал очень хорошие результаты независимо от объёма данных, тогда как RabbitMQ был значительно ниже, чем у Redis.
MemcacheQ Постоянная очередь сообщений Memcacheq (сокращённо MCQ) — это лёгкая очередь сообщений, MemcacheQ функционирует: 1 Просто и легко использовать 2 Быстрая обработка 3 Множественные очереди 4 Хорошие результаты параллелизма 5 Совместим с протоколом Memcache. Это значит, что нужно просто установить расширение memcache, дополнительные плагины не требуются. 6 Также удобно использовать его в zend фреймворке.
В конечном итоге следующие продукты: 1. Оба имеют собственные клиентские API или поддерживают несколько языков программирования; 2. Существует много документации; 3. Оказалась положительная поддержка. 4. ActiveMQ, RabbitMQ, MSMQ, Redis должны запускать сервисные процессы, которые можно отслеживать и настраивать, а остальные вызывают проблемы 5. Все они обеспечивают относительно хорошую надёжность (стабильность), масштабируемость и балансировку нагрузки, а также, конечно, производительность
Я не буду говорить ерунду, ниже приложен набор результатов тестов, перехваченных из Интернета. Отображается количество отправленных и полученных сообщений в секунду. Весь процесс сгенерировал в общей сложности 1 миллион сообщений размером 1K. Тест проводился на отдельной машине Windows Vista.
Как видите, ZeroMQ — это не уровень, похожий ни на что другое. Её показатели удивительно высоки. Несмотря на это, этот продукт не обеспечивает сохранение сообщений, не может легко хранить и контролировать промежуточные процессы, а также требует самоаудита и восстановления данных, поэтому он неудовлетворителен с точки зрения удобства использования и HA. Вывод ясен: если вы хотите, чтобы приложение отправляло сообщения как можно быстрее, выбирайте ZeroMQ. Это особенно ценно, когда вы не слишком переживаете о случайной потере определённых сообщений.
Блогер в этой статье надеется (и не очень надеется) использовать Rabbit, у Rabbitmq есть встроенная система, если вы сформируете кластер, нет необходимости беспокоиться о таких проблемах, как балансировка нагрузки, и вы можете настроить зеркало очереди. Но это значит, что должно быть больше тестирования, и в итоге получается любимый, и всё, что я слышал и читал о Rabbit, заставляет меня думать, что это лучший выбор.
|