WS-ReliableMessaging
WS-ReliableMessaging (WS-RM) — это протокол веб-служб (web services), разработанный для обеспечения надёжной доставки сообщений (SOAP-сообщений) между двумя конечными точками в распределённой системе. Он является частью стека спецификаций WS-* (Web Services Architecture), разработанного OASIS (Organization for the Advancement of Structured Information Standards). WS-RM гарантирует, что сообщения будут доставлены ровно один раз (at-most-once, at-least-once, exactly-once) и в правильном порядке, даже при сбоях сети, временной недоступности получателя или перегрузках. Протокол работает на транспортном уровне поверх HTTP, SMTP, JMS и других протоколов, не требуя их модификации.
История и развитие
Спецификация WS-ReliableMessaging была впервые опубликована в 2003 году консорциумом OASIS как часть инициативы по стандартизации веб-служб. Основными авторами выступили компании IBM, Microsoft, BEA Systems и другие участники консорциума. Целью было создание открытого, независимого от платформы протокола для обеспечения надёжности, который мог бы заменить проприетарные решения (например, MQSeries от IBM, MSMQ от Microsoft).
В 2005 году была выпущена версия 1.0 (WS-ReliableMessaging 1.0), которая получила статус стандарта OASIS. В 2007 году вышла версия 1.1 (WS-ReliableMessaging 1.1), которая была принята как стандарт ISO/IEC 19763-3:2007. Версия 1.1 уточнила механизмы управления последовательностями, обработки ошибок и взаимодействия с другими протоколами стека WS-* (например, WS-Addressing, WS-Security).
В 2009 году OASIS выпустил спецификацию WS-ReliableMessaging 1.2, которая была в основном уточняющей и устраняла неоднозначности. На сегодняшний день последней стабильной версией является 1.2, хотя в промышленных системах до сих пор используется версия 1.1.
Основные принципы работы
WS-ReliableMessaging основан на концепции последовательности сообщений (sequence). В рамках одной сессии между отправителем и получателем создаётся последовательность, в которой каждое сообщение имеет уникальный идентификатор и порядковый номер. Протокол использует следующие ключевые механизмы:
- Подтверждение (Acknowledgement): Получатель отправляет отправителю подтверждение о получении сообщения (SequenceAcknowledgement). Если отправитель не получает подтверждения в течение заданного тайм-аута, он повторно отправляет сообщение.
- Повторная отправка (Retransmission): Отправитель хранит копии отправленных сообщений до получения подтверждения. При сбое сети или недоступности получателя сообщение повторно отправляется.
- Упорядочивание (Ordering): Сообщения в последовательности доставляются получателю в том же порядке, в котором они были отправлены. Если сообщение с номером 3 приходит раньше сообщения с номером 2, получатель буферизует его до получения пропущенного.
- Удаление дубликатов (Duplicate Elimination): Получатель проверяет идентификаторы сообщений и отбрасывает дубликаты, если они уже были обработаны.
Структура протокола
WS-ReliableMessaging определяет набор SOAP-заголовков и тел сообщений, которые используются для управления надёжной доставкой. Основные элементы:
- CreateSequence: Сообщение, инициирующее создание новой последовательности. Содержит идентификатор источника (Source) и получателя (Destination), а также параметры (например, максимальное количество сообщений, время жизни).
- CreateSequenceResponse: Ответ от получателя, содержащий идентификатор последовательности (SequenceIdentifier) и параметры (например, максимальный размер сообщения).
- Sequence: Заголовок, добавляемый к каждому сообщению в последовательности. Содержит идентификатор последовательности и порядковый номер сообщения.
- SequenceAcknowledgement: Заголовок, отправляемый получателем отправителю. Указывает, какие сообщения были успешно получены (в виде диапазонов номеров).
- TerminateSequence: Сообщение, завершающее последовательность. После этого отправитель прекращает отправку, а получатель освобождает ресурсы.
Варианты гарантий доставки
WS-ReliableMessaging поддерживает четыре основных режима гарантии доставки (уровни надёжности), которые определяются политикой (Policy) протокола:
- AtMostOnce: Сообщение доставляется не более одного раза. Допустима потеря сообщения, но не дублирование.
- AtLeastOnce: Сообщение доставляется как минимум один раз. Допустимо дублирование, но не потеря.
- ExactlyOnce: Сообщение доставляется ровно один раз. Сочетает AtLeastOnce и AtMostOnce, гарантируя отсутствие потерь и дублирования.
- InOrder: Сообщения доставляются в том же порядке, в котором были отправлены. Может комбинироваться с любым из трёх предыдущих режимов.
Взаимодействие с другими протоколами WS-*
WS-ReliableMessaging обычно используется в сочетании с другими спецификациями стека WS-*:
- WS-Addressing: Определяет адресацию сообщений (конечные точки, идентификаторы). WS-RM использует WS-Addressing для указания источника и получателя последовательности.
- WS-Security: Обеспечивает аутентификацию, шифрование и подпись сообщений. WS-RM может работать поверх WS-Security, защищая надёжно доставляемые сообщения.
- WS-Policy: Определяет политики, которые могут быть объявлены для конечной точки (например, требуемый уровень надёжности). Клиент может автоматически определить, поддерживает ли сервер WS-RM.
- WS-Coordination: Используется для координации транзакций. WS-RM может быть частью транзакционной обработки, гарантируя, что сообщения доставляются только в случае успешного завершения транзакции.
Применение
WS-ReliableMessaging применяется в сценариях, где требуется гарантированная доставка сообщений в распределённых системах, особенно в корпоративных приложениях (enterprise). Основные области использования:
- Интеграция приложений (EAI): Обмен данными между различными информационными системами (ERP, CRM, SCM) через корпоративные шины (ESB). WS-RM обеспечивает надёжность при передаче заказов, инвойсов, отчётов.
- Банковские и финансовые системы: Обработка транзакций, переводов, платежей. Гарантия ExactlyOnce критична для предотвращения двойного списания или потери платежа.
- Телекоммуникации: Управление биллингом, передача данных о звонках, SMS, трафике. WS-RM используется в системах OSS/BSS.
- Государственные и медицинские системы: Обмен данными между ведомствами, медицинскими учреждениями, где потеря или дублирование информации недопустимы.
- Облачные вычисления: Взаимодействие между микросервисами, где требуется надёжность при асинхронной передаче сообщений (например, в очередях сообщений).
Реализации
WS-ReliableMessaging реализован в нескольких открытых и коммерческих продуктах:
- Apache CXF: Популярная Java-библиотека для веб-служб, поддерживает WS-RM 1.1 и 1.2.
- Apache Axis2: Устаревшая, но всё ещё используемая библиотека, поддерживает WS-RM.
- Microsoft WCF (Windows Communication Foundation): Реализация .NET Framework, поддерживает WS-RM 1.1 и 1.2.
- IBM WebSphere Application Server: Поддерживает WS-RM через встроенный стек веб-служб.
- Oracle SOA Suite: Поддерживает WS-RM для интеграции приложений.
- Red Hat JBoss Fuse: Поддерживает WS-RM через Apache CXF.
Критика и ограничения
Несмотря на свою функциональность, WS-ReliableMessaging имеет ряд недостатков:
- Сложность реализации: Протокол требует значительных вычислительных ресурсов для управления последовательностями, буферизации и повторных отправок. Это может приводить к снижению производительности по сравнению с более лёгкими протоколами (например, AMQP, MQTT).
- Зависимость от транспортного уровня: WS-RM работает поверх HTTP, что может приводить к проблемам с тайм-аутами и перегрузками при длительных сессиях.
- Отсутствие поддержки в современных API: С развитием RESTful-сервисов и микросервисной архитектуры популярность WS-RM снизилась. Многие современные системы предпочитают использовать более простые механизмы (например, очереди сообщений на основе RabbitMQ, Kafka).
- Проблемы с масштабированием: Протокол плохо масштабируется для большого числа параллельных последовательностей, так как требует хранения состояния на стороне отправителя и получателя.
Интересные факты
- WS-ReliableMessaging был одним из первых протоколов, который ввёл понятие «гарантированной доставки» в мир веб-служб, предшествуя появлению современных протоколов очередей сообщений.
- Спецификация WS-RM 1.1 была принята как международный стандарт ISO/IEC 19763-3:2007, что делает её одним из немногих стандартов веб-служб, получивших статус ISO.
- В 2010-х годах, с ростом популярности REST и JSON, использование WS-RM в новых проектах резко сократилось, однако он остаётся востребованным в унаследованных (legacy) системах, особенно в банковском секторе.
Источники
- OASIS Standard: Web Services Reliable Messaging (WS-ReliableMessaging) Version 1.1, 2007.
- OASIS Standard: Web Services Reliable Messaging (WS-ReliableMessaging) Version 1.2, 2009.
- ISO/IEC 19763-3:2007 — Information technology — Metamodel framework for interoperability — Part 3: Metamodel for ontology registration.
- Apache CXF Documentation: WS-ReliableMessaging.
- Microsoft WCF Documentation: Reliable Messaging.
- IBM Redbook: Web Services Reliable Messaging in WebSphere Application Server.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →