Сравнение Apache ActiveMQ и IBM Websphere MQ
Начну с того что Apache ActiveMQ и IBM WebSphere MQ широко используются во многих компаниях мира и отвечают основным требованиям по обмену сообщениями. Система обмена сообщений Apache ActiveMQ распространяется под лицензией Apache 2.0 и является свободно распространяемым программным обеспечением, в отличии от IBM WebSphere MQ, однако у последней есть ряд неоспоримых преимуществ и при переходе с программного обеспечения IBM необходимо тщательно анализировать возможные риски возникновения технических проблем. В 2014 году американская компания Edison Group представила отчет с результатами испытаний Apache ActiveMQ и IBM WebSphere MQ. Давайте посмотрим чем отличаются друг от друга эти системы обмена сообщений.
Надежность и отказоустойчивость
IBM WebSphere MQ и Apache ActiveMQ проходили испытания на отказоустойчивость по двум сценариям: прекращение подачи электроэнергии и обрыв сетевого соединения. Результаты испытаний приведены в таблице:
Сценарий тестирования | Apache ActiveMQ | IBM WebSphere MQ |
Прекращение подачи электроэнергии | Около 2% дубликатов сообщений. Потерянные сообщения отсутствуют. | Дубликаты и потерянные сообщения отсутствуют. |
Обрыв сетевого соединения | Около 2% дубликатов сообщений и 100% потерянных сообщений после перезагрузки. После восстановления сети Apache ActiveMQ не смог восстановить исходную конфигурацию master/slave. | Дубликаты и потерянные сообщения отсутствуют |
Эти испытания выявили главный недостаток Apache ActiveMQ, который нужно обязательно учитывать при переходе - дублирование и потеря сообщений в результате аварии или сетевых ошибок. Обычно в качестве решения данной проблемы используют конфигурацию master/slave, то есть запускают несколько Apache ActiveMQ брокеров на разных серверах для того чтобы в случае отказа одного из брокеров, другой мог его заменить. Один из брокеров берет на себя роль главного или master, а один или несколько slave брокеров ждут когда master откажет, чтобы один из slave брокеров стал новым главным, т.е. master. При этом существует 2 варианта конфигурации master/slave:
-
shared nothing (без разделения ресурсов) - каждый Apache ActiveMQ брокер имеет свое собственное хранилище сообщений;
-
shared storage (совместно используемое запоминающее устройство) - каждый Apache ActiveMQ брокер может подключаться к общему хранилищу, но только один брокер может быть активным в каждый момент времени.
Клиенты Apache ActiveMQ на Java и C++ обеспечивают встроенное аварийное переключение трансфера, так что они автоматически переключатся с отказавшего мастера на нового мастера. Как показали испытания, при восстановлении сети после обрыва, старый master должен был стать slave брокером, так как бывший slave брокер стал новым master, однако после восстановления работы системы мы получили 2 master брокера, конфликтующих между собой. Из-за этого необходимо выполнить перезагрузку сервера, предварительно сделав бекап сообщений, так как при перезагрузке серверов все сообщения будут потеряны. Поэтому конфигурация master/slave не гарантирует бесперебойную работу Apache ActiveMQ, а лишь снижает риски.
Для IBM WebSphere MQ используется похожая конфигурация, но в терминологии компании IBM она называется active/standby.
Рисунок 1. Конфигурация master/slave для AvtiveMQ
Рисунок 2. Конфигурация active/standby.
Управление транзакциями
Одним из основных различий между IBM WebSphere MQ и Apache ActiveMQ является поддержка управления транзакциями: IBM WebSphere MQ позволяет управлять транзакциями между базой данных и сервером обмена сообщениями из коробки. Для Apache ActiveMQ необходим внешний сервер приложений с поддержкой XA для управления 2PC транзакциями, так как Apache ActiveMQ не поддерживает XA транзакции.
Также в официальной документации к Apache ActiveMQ дается совет о том что в качестве альтернативы можно использовать регулярные JMS транзакции без XA, а также в коде выявлять дубликаты сообщений, проверяя обрабатывалось ли данное сообщение ранее.
Рисунок 3. Обрабатываем сообщение, если оно не было успешно обработано ранее.
Данный подход позволяет получить более высокую производительность, так как не нужно выполнять много медленных синхронизаций с диском (за транзакцию!) для протокола XA. Единственным недостатком при таком подходе является то, что необходимо использовать специфическую логику в своих приложениях для того, чтобы определить обрабатывалось ли то или иное сообщение ранее или нет. Однако подобная логика довольно часто применяется на практике, так что при переходе на Apache ActiveMQ не придётся делать большое количество доработок.
Производительность
Наилучшие результаты производительности для Apache ActiveMQ и IBM WebSphere MQ были получены при использовании 80 одновременных клиентских потоков. При этом работало четыре экземпляра IBM WebSphere MQ менеджеров, а также четыре экземпляра Apache ActiveMQ брокеров. Каждый экземпляр имел свой собственный твердотельный накопитель, на котором он записывал данные. Было проведено пять 20-минутных тестов с использованием сообщений следующих размеров: 256 байт, 1K, 10K, 100K или 1MB. Результаты тестирования приведены в диаграмме ниже:
Рисунок 4. Тестирование производительности
Как мы видим, IBM WebSphere MQ работает значительно быстрее, поэтому для того, чтобы достичь сопоставимые результаты с Apache ActiveMQ потребуется использовать оборудование, которое будет на 60% мощнее. Но несмотря на то что Apache ActiveMQ уступает в производительности IBM WebSphere MQ, результаты всё равно достойные и на практике такой производительности будет достаточно для большинства промышленных систем, особенно если учитывать что конвейеры очередей в основном используются для асинхронного взаимодействия между компонентами программного обеспечения.
Заключение
Несмотря на свои недостатки Apache ActiveMQ широко используется во всём мире и является одной из самых популярных систем обмена сообщений.
Главные достоинства Apache ActiveMQ:
-
Apache ActiveMQ является свободно распространяемым программным обеспечением и соответственно эта система не подвержена политическим рискам.
-
Apache ActiveMQ имеет открытый код
-
Apache ActiveMQ бесплатна в отличие от IBM WebSphere MQ
-
Apache ActiveMQ просто разворачивать и настраивать
-
Apache ActiveMQ отлично интегрирована со многими технологиями и проста в использовании, что делает её удобной в использовании и разработке программного обеспечения
-
Apache ActiveMQ хорошо документирована
Возможностей Apache ActiveMQ вполне хватает для решения большинства практических задач и во многих случаях Apache ActiveMQ отлично подойдет в качестве замены IBM WebSphere MQ при грамотном подходе.