Введение
Тип программного или аппаратного обеспечения
Промежуточное программное обеспечение, ориентированное на обмен сообщениями (MOM), – это программное или аппаратное обеспечение, поддерживающее отправку и получение сообщений между распределенными системами. MOM позволяет распределять модули приложений по разнородным платформам и снижает сложность разработки приложений, охватывающих несколько операционных систем и сетевых протоколов. Промежуточное программное обеспечение создает распределенный уровень коммуникаций, который изолирует разработчика приложений от деталей различных операционных систем и сетевых интерфейсов. MOM обычно предоставляет API, которые работают на различных платформах и в различных сетях. Этот слой промежуточного программного обеспечения позволяет программным компонентам (приложениям, Enterprise JavaBeans, сервлетам и другим компонентам), разработанным независимо и работающим на разных сетевых платформах, взаимодействовать друг с другом. Приложения, распределенные по различным сетевым узлам, используют интерфейс приложения для обмена данными. Кроме того, благодаря административному интерфейсу эта новая виртуальная система взаимосвязанных приложений может быть сделана отказоустойчивой и безопасной. MOM предоставляет программные элементы, присутствующие во всех взаимодействующих компонентах архитектуры клиент-сервер и обычно поддерживающие асинхронные вызовы между клиентскими и серверными приложениями. MOM снижает вовлеченность разработчиков приложений в сложность модели «главный-подчиненный» в механизме клиент-сервер.
Недостатки
Основным недостатком многих систем, ориентированных на сообщения, является то, что они требуют дополнительный компонент в архитектуре – агент передачи сообщений (брокер сообщений). Как и в любой системе, добавление еще одного компонента может привести к снижению производительности и надежности, а также усложнить и удорожить обслуживание системы в целом. Кроме того, многие межприложенческие коммуникации по своей сути имеют синхронный характер, когда отправитель намеренно ожидает ответа на сообщение перед продолжением работы (см. вычисления в реальном времени и близком к реальному времени для крайних случаев). Поскольку коммуникация на основе сообщений функционирует асинхронно, она может быть неоптимальна в таких ситуациях. Однако большинство MOM-систем предоставляют возможность объединить запрос и ответ в единую псевдосинхронную транзакцию. В синхронной системе обмена сообщениями вызывающая функция не возвращает управление, пока вызванная функция не завершит свою задачу. В слабосвязанной асинхронной системе вызывающий клиент может продолжать отправлять задачи получателю, пока не исчерпаются ресурсы, необходимые для их обработки, что приведет к сбою вызванного компонента. Конечно, эти условия можно минимизировать или избежать, осуществляя мониторинг производительности и регулируя поток сообщений, но это дополнительная работа, которая не требуется при использовании синхронной системы обмена сообщениями. Важно понимать преимущества и недостатки каждого типа системы. Каждая система подходит для решения различных задач. Иногда для достижения желаемого результата требуется комбинация обоих типов систем.
Стандарты
Исторически сложилось отсутствие стандартов, регулирующих использование промежуточного программного обеспечения, ориентированного на обмен сообщениями, что приводило к проблемам. Большинство крупных поставщиков имеют собственные реализации, каждая со своим интерфейсом прикладного программирования (API) и инструментами управления. Одним из давних стандартов для промежуточного программного обеспечения, ориентированного на обмен сообщениями, является спецификация XATMI группы X/Open (Distributed Transaction Processing: The XATMI Specification), которая стандартизирует API для межпроцессного взаимодействия. Известными реализациями этого API являются промежуточное ПО Enduro/X от ATR Baltic и Tuxedo от Oracle. Advanced Message Queuing Protocol (AMQP) — это утвержденный стандарт OASIS и ISO, определяющий протокол и форматы, используемые между взаимодействующими компонентами приложений, что обеспечивает совместимость реализаций. AMQP может использоваться со схемами гибкой маршрутизации, включая распространенные парадигмы обмена сообщениями, такие как «точка-точка», «веер», «публикация-подписка» и «запрос-ответ» (они намеренно исключены из версии 1.0 самого стандарта протокола, но полагаются на конкретную реализацию и/или базовый сетевой протокол для маршрутизации). Он также поддерживает управление транзакциями, очереди, распределение, безопасность, управление, кластеризацию, федерацию и поддержку разнородных мультиплатформенных сред. Java-приложения, использующие AMQP, обычно разрабатываются с использованием Java JMS. Другие реализации предоставляют API для C#, C++, PHP, Python, Ruby и других языков. High Level Architecture (HLA IEEE 1516) — это стандарт IEEE и SISO для обеспечения совместимости при моделировании. Он определяет набор сервисов, предоставляемых через API на C++ или Java. Сервисы обеспечивают обмен информацией на основе модели «публикация-подписка», основанной на модульной Federation Object Model. Также предусмотрены сервисы для координированного обмена данными и продвижения времени, основанные на логическом времени моделирования, а также точки синхронизации. Дополнительные сервисы обеспечивают передачу прав собственности, оптимизацию распределения данных, мониторинг и управление участвующими федератами (системами). MQ Telemetry Transport (MQTT) — это стандарт ISO (ISO/IEC PRF 20922), поддерживаемый организацией OASIS. Он предоставляет легковесный, надежный протокол передачи сообщений по принципу публикации-подписки поверх TCP/IP, подходящий для связи в контексте M2M/IoT, где требуется небольшой размер кода и/или ограничена пропускная способность сети. Data Distribution Service (DDS) от Object Management Group предоставляет стандарт промежуточного программного обеспечения, ориентированного на обмен сообщениями по принципу «публикация-подписка» (P/S), который обеспечивает масштабируемый, работающий в режиме реального времени, надежный, высокопроизводительный и совместимый обмен данными между издателями и подписчиками. Стандарт предоставляет интерфейсы для C++, C++11, C, Ada, Java и Ruby.
XMPP
eXtensible Messaging and Presence Protocol (XMPP) — это коммуникационный протокол для промежуточного программного обеспечения, ориентированного на обмен сообщениями, основанный на XML (Extensible Markup Language). Протокол, разработанный с учетом возможности расширения, также используется в системах публикации-подписки, для сигнализации в VoIP, видеосвязи, передачи файлов, игр, приложениях Интернета вещей, таких как интеллектуальные сети, и социальных сетях. В отличие от большинства протоколов обмена мгновенными сообщениями, XMPP определен в открытом стандарте и использует открытый подход к разработке и внедрению, позволяющий любому реализовать XMPP-сервис и взаимодействовать с реализациями других организаций. Поскольку XMPP является открытым протоколом, реализации могут быть разработаны с использованием любой лицензии на программное обеспечение; хотя многие серверные, клиентские и библиотечные реализации распространяются как свободное и открытое программное обеспечение, существует также множество бесплатных и проприетарных программных реализаций. В 2002 году Internet Engineering Task Force (IETF) создала рабочую группу XMPP для формализации основных протоколов в качестве технологии обмена мгновенными сообщениями и определения статуса присутствия в IETF. Рабочая группа XMPP разработала четыре спецификации (RFC 3920, RFC 3921, RFC 3922, RFC 3923), которые были утверждены как предлагаемые стандарты в 2004 году. В 2011 году RFC 3920 и RFC 3921 были заменены RFC 6120 и RFC 6121 соответственно, а RFC 6122 определяет формат адресов XMPP. Помимо этих основных протоколов, стандартизированных в IETF, XMPP Standards Foundation (ранее Jabber Software Foundation) активно разрабатывает открытые расширения XMPP. Программное обеспечение на основе XMPP широко используется в Интернете, согласно XMPP Standards Foundation, и является основой для Единой системы возможностей Министерства обороны (DoD). Среда программирования Java EE предоставляет стандартный API под названием JMS (Java Message Service), который реализован большинством поставщиков MOM и предназначен для скрытия конкретных реализаций API MOM; однако JMS не определяет формат обмениваемых сообщений, поэтому системы JMS несовместимы. Аналогичные усилия предпринимаются в рамках активно развивающегося проекта OpenMAMA, целью которого является предоставление общего API, особенно для клиентов на языке C. Однако на данный момент (август 2012 года) он в основном подходит для распространения рыночных данных (например, котировок акций) через промежуточное программное обеспечение публикации-подписки.
Оставление сообщений в очереди
Очереди сообщений обеспечивают обмен информацией между распределенными приложениями. Очередь сообщений может располагаться в памяти или на дисковом хранилище. Сообщения остаются в очереди до тех пор, пока не будут обработаны потребителем. Благодаря очереди сообщений приложение может быть реализовано независимо — им не нужно знать о местоположении друг друга или реализовывать дополнительные процедуры для исключения необходимости ожидания получения сообщения.
Тенденции
Протокол Advanced Message Queuing Protocol (AMQP) предоставляет открытый стандарт протокола прикладного уровня для промежуточного программного обеспечения, ориентированного на сообщения. Служба распределения данных (DDS) Объектно-ориентированной группы управления (OMG) добавила множество новых стандартов к базовой спецификации DDS. Более подробную информацию можно найти в каталоге спецификаций службы распределения данных OMG (DDS). XMPP — это коммуникационный протокол для промежуточного программного обеспечения, ориентированного на сообщения, основанный на XML (Extensible Markup Language). Протокол потоковой передачи текстовых сообщений (STOMP), ранее известный как TTMP, — это простой текстовый протокол, обеспечивающий совместимый формат обмена данными, позволяющий клиентам STOMP взаимодействовать с любым брокером сообщений, поддерживающим этот протокол. Наблюдается также тенденция к реализации функций промежуточного программного обеспечения, ориентированного на сообщения, в аппаратном обеспечении, как правило, в FPGA или других специализированных кремниевых чипах.