Skip to main content

Интеграции: очереди сообщений

Очереди сообщений (Message Queue) — это форма асинхронной коммуникации между сервисами.

При синхронном взаимодействии все запросы в цепочке вызовов выполняются строго друг за другом, а при выполнении последнего запроса ответы последовательно передаются в обратном направлении. В результате, это увеличивает время ожидания пользователя, которое при пиковых нагрузках может стать серьезной проблемой.

Еще один недостаток такой схемы — обработка сбоев. Если на одном из шагов возникнет исключение, оно каскадно возвратится назад, и пользователь получит уведомление об ошибке.

Для комплексного решения проблемы передачи данных с получением доступа к функциональности приложений используется подход передачи сообщений посредством специализированных продуктов. Условно эти продукты можно разделить на два типа: сервисы очередей сообщений (Message Queue Services, MQS) и сервисные шины предприятия (Enterprise Service Bus, ESB).

Общий подход к построению интеграции таков: система подключается к интеграционной шине посредством специализированных коннекторов. Главная задача коннектора – обеспечение канала приема данных в систему и передачи данных из нее. Задача системы-источника — передать данные в коннектор, а маршрутизация, трансформация и доставка сообщений в системы-потребители осуществляются уже без ее участия.

Коннекторы располагаются максимально «близко» к системам и гарантируют возможность передачи данных даже при отсутствии сетевого соединения, тем самым разгружая системы, участвующие в интеграции, от накладных расходов по обеспечению сохранности и передаче данных.

Основными плюсами системы являются:

  • Слабые связи между системами, участвующими в интеграции. Более того, в правильно построенной интеграционной модели система вообще ничего не знает о других участниках интеграционного ландшафта. Вся работа сводится к передаче сообщений в сервисную шину и прием сообщений от шины. Этим достигается самый высокий уровень гибкости и масштабируемости относительно всех ранее рассмотренных систем.
  • Возможности для трансформации данных. Позволяют интегрировать приложения, рассчитанные на различные форматы данных, без необходимости их доработок. Это помогает снизить затраты на обработку данных системами (данные отправляются один раз в формате системы-источника и принимаются системами-потребителями в своих «родных» форматах), а также задействовать в интеграции системы, доработка которых невозможна или крайне нежелательна по тем или иным причинам. Причем затраты на трансформацию данных не ложатся на интегрируемые системы.
  • Маршрутизация данных. Один из важнейших механизмов сервисной шины, позволяющий резко снизить зависимость и связанность участников интеграционных процессов. При наличии механизма маршрутизации система-источник может просто однократно передать сообщение в шину. Ей не требуются знания о том, кто должен получить это сообщение, готов ли он к приему сообщения и т.д. Сообщение будет доставлено всем потребителям в соответствии с текущим маршрутом.

Соответственно, при масштабировании схемы нам также не требуется вносить изменения во все системы. Достаточно внести изменения в маршрут, добавив или удалив потребителя данных. Это также позволяет выполнять доставку сообщений согласно определенным условиям. Причем сами системы не участвуют в определении условий прохождения маршрута, а значит это поведение может быть легко модифицировано без необходимости вносить изменения в системы.

  • Гарантированная доставка данных. Этот механизм сервисной шины предприятия существенно упрощает схемы доставки данных на каналах с низкой стабильностью, снимая нагрузку с систем-источников. Им не приходится реализовывать механизмы для проверки наличия канала связи и промежуточные хранилища для сообщений на время отсутствия канала доставки. Также этот механизм позволяет снизить алгоритмическую нагрузку по реализации механизма квитирования доставки. Этот функционал реализован на уровне интеграционных механизмов сервисной шины.
  • Обеспечение безопасности при передаче данных. Ни для кого не секрет, что во многих случаях утечка конфиденциальных данных происходит именно при их передаче. Шины обеспечивают шифрование передаваемых данных, а также поддерживают защищенные сетевые соединения.
  • Централизованное управление интеграционной схемой является важным компонентом любого интеграционного ландшафта. Такой подход сильно снижает накладные расходы на первичную настройку, масштабирование и поддержание работоспособности схемы в целом. Также это позволяет сконцентрировать необходимые компетенции в одном месте, не распыляя их по интегрируемым системам.
  • Диагностика состояния. Важной особенностью использования специализированных сервисных шин являются механизмы диагностики. Использование этих механизмов позволяет выявить проблемы, связанные как с передачей данных, так и с состоянием систем, участвующих в интеграции. Наиболее продвинутые системы предоставляют средства проактивной диагностики. Этот вид диагностики позволяет выявлять потенциальные проблемы на начальных этапах до того, как проблема проявит себя в полную силу, и своевременно осуществлять комплекс упреждающих воздействий.

Основными недостатками модели принято считать:

  • Дополнительные затраты на приобретение и поддержку специализированных программных продуктов (MQ, ESB). Зачастую необходимо выделение дополнительных серверных ресурсов.
  • Необходимость проведения обучения персонала по этим программным продуктам.

Обмен сообщениями посредством сервисной шины предприятия имеет наиболее сбалансированный характер, даже при небольшом количестве систем и несложных интеграционных ландшафтах. А высокая скорость обмена и слабая связанность приложений делают такую схему подходящей для интеграции большого количества приложений с последующим масштабированием решения.

Таким образом, с большой уверенностью можно утверждать, что обмен данными посредством механизма сообщений, реализуемого сервисными шинами, будет являться наиболее подходящим для организации обмена данными и заслуживающим пристального внимания любого разработчика, участвующего в создании интеграционных схем. Такой выбор может существенно сэкономить время, затраты и нервы при условии подбора правильной сервисной шины.

Рекомендованная литература

Интеграция на основе сообщений. Преимущества и отличия от других подходов (статья)

Зачем нужны очереди сообщений в микросервисной архитектуре: разбираем преимущества и недостатки (статья)

Микросервисы: Коммуникации через очередь сообщений (видео: часть 1, часть 2, часть 3, часть 4)