Всегда ли нужен брокер сообщений?

Когда стоит использовать брокер данных или событий в IT-архитектуре: в каких сценариях брокер помогает повысить гибкость и надёжность бизнес-систем

  • Перечитывал логи, много думал
  • Что будет, если использовать базу данных
  • Понял с первого раза
  • С чистого листа

Введение: брокер сообщений и ESB

Дата публикации: 6.8.2024 Время на прочтение: 6 мин. В разных источниках можно встретить утверждения, что брокер сообщений обязательно входит в контур ESB (сервисной шины предприятия). Некоторые даже считают, что брокер - это основная часть ESB или эти понятия совпадают. В этой статье мы разберемся, возможна ли шина без брокера и в каких случаях именно такой подход лучше для IT-архитектуры.

Перечитывал логи, много думал

Обратимся (как бывало не раз) к простому и понятному примеру с интернет-магазином.

Представьте себе крупную компанию, которая торгует автокомпонентами в интернет-магазине.

Можно примерно смоделировать, какие системы входят в ее контур: PIM-система, в которой хранится информация о товарам; WMS-система для управления складами; сам интернет-магазин; система CRM, в которой хранятся данные по клиентам и скидкам; OMS-система для управления заказами.

Они с некоторой частотой обмениваются между собой информацией через ESB-слой. Например, интернет-магазин отправляет заказы со статусами раз в минуту или раз в секунду.

Нужна ли информация по заказам из интернет-магазина в OMS-системе? Конечно, нужна. И брокер будет отправлять всю очередь сообщений из интернет-магазина в OMS.

Но наша с вами компания крупная и торгует на всей территории России, не только в розницу, но и мелким оптом.

Поэтому в её контуре есть несколько OMS, чтобы прозрачно управлять заказами из разных регионов:

Калининградская область, например, - а также оптовыми и розничными заказами.

Схема усложнилась? А вместе с ней усложнилась и логика.

Центральной России; другой - только мелкооптовые заказы по Сибири; третьей - только заказы в определенном статусе; четвёртой - только заказы на шины с предыдущим статусом «оплачен» и дополнительным флажком, который должен проставить ETL-коннектор при обработке… А брокер по-прежнему один раз в минуту передаёт в каждую OMS всю очередь из новых, отмененных и неподтверждённых заказов из интернет-магазина. А это может быть как 3 записи, так и 10 тысяч.

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

Это дополнительная логика, которую приходится прописывать внутри системы кодом, утяжеляя эту систему и замедляя её.

Что будет, если использовать базу данных вместо брокера (сценарий 1)

В этом случае один ETL-коннектор забирает из интернет-магазина все статусы заказа и складывает их в базу. Вся логика, вне зависимости от сложности условий, находится в слое коннекторов - они сортируют и передают только те записи, которые нужны «их» OMS-системам. Лишняя информация не перегружает системы-получатели - более того, она даже не попадает в коннектор.

Понял с первого раза: кейс с дубликатами заказов

  1. Другой кейс - реальный, из опыта одного из наших клиентов.

  2. Компания онлайн и офлайн торгует бытовой химией, пищевыми добавками, товарами для здоровья.

  3. Некоторые заказы оформляются через интернет-магазин, другие - через продавцов или торговых представителей в филиалах.

  4. Бонусная система для офлайн-покупателей привязана к сочетанию ФИО и контактных данных.

  5. Но случались такие ситуации: когда кнопка «подтвердить» нажата, покупатель мог вспомнить, что с последнего визита у него изменился номер телефона.

  6. Приходилось переоформлять заказ с тем же составом продуктов, тем же ФИО покупателя, но новым телефоном. В итоге брокер передавал в CRM-систему оба заказа, вычищать дубликаты из каждой системы приходилось вручную. Кейс, который мы описали, - не единственный известный нам подобный случай.

  7. При использовании брокера дубликаты сообщений приходят в конечные системы достаточно часто. И чтобы от них избавляться, приходится: или вычищать дубликаты вручную; или прописывать в системе-получателе дополнительную логику - например, система должна находить дубликаты по ключевым параметрам, сверять время отправки, убирать более ранние записи и оставлять только более новые сообщения.

Что будет, если использовать базу данных вместо брокера (сценарий 2)

Если вы используете в ESB-контуре базу данных + ETL-слой, вы можете переложить на них логику сверки сообщений. В систему-получатель в этом случае будет попадать уже «чистая» информация, и не придется задействовать дополнительные ресурсы системы на обработку дубликатов.

Оценить, где ИИ даст эффект в вашем процессе

С чистого листа: подключение новой системы (BI)

Теперь представим ситуацию: вы решили подключить к контуру новую систему. Например, BI, чтобы отслеживать метрики и анализировать гипотезы.

Как это выглядит в контуре с брокером сообщений? У вас появляется еще одна система, которая начинает «слушать» очереди сообщений по карточкам товаров, по просмотрам, по заказам и т. д.

Этого достаточно, чтобы получить свежие данные.

Но для каких-то выводов этого недостаточно: нужны ещё ретроспективные данные. А значит, придётся запрашивать у систем-источников перевыгрузку данных.

Казалось бы, через брокер можно получить эту выгрузку максимально оперативно? Да, но нет. Во-первых, если у вас много дублирующих сообщений в системе-источнике, это однозначно замедлит выгрузку и обработку. Во-вторых, учитывайте ещё и асинхронность работы: задержки в 10-15 секунд абсолютно допустимы даже на высоких нагрузках и в очень больших контурах. Предсказать, сколько записей не попадёт в выгрузку при таких раскладах, невозможно.

Что будет, если использовать базу данных вместо брокера (сценарий 3)

Если в вашей шине вместо брокера сообщений используются базы данных, у вас уже есть готовая, очищенная от дубликатов выгрузка данных из всех нужных систем. Есть заказы, карточки товаров, которые можно соотнести с заказами, статусы доставок - всё, что может понадобиться для бизнес-аналитики (как в нашем примере) или любой другой новой системы, нового процесса. Не придется ничего заново пересобирать, перевыгружать из систем-источников, убирать дубликаты и т. д.

Где логика? Сложная выборка для внешних потребителей

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

  2. Снова представим кейс. В вашей PIM-системе хранятся карточки товаров: тех, которые есть у вас в ассортименте сейчас, и тех, которые временно не продаются.

  3. Не продаются, потому что вы только их закупаете, или это сезонные товары, или пока нет поставок - вариантов множество.

  4. Но маркетплейсу нужно от вас получать: товары, которые есть в наличии на складе, с пометкой «есть в наличии»; те, которые поступят в ближайшее время - тоже с соответствующей пометкой; те, которые скоро кончатся и вы не планируете их докупать, - со статусом «скоро закончатся».

  5. Чтобы сделать такие потоки данных, надо прочитать несколько источников, сравнить их, объединить и только потом отправить.

  6. Чтобы реализовать такую логику с брокером, придётся на стороне PIM-системы, WMS-системы, системы управления закупками (и, возможно, еще пары систем, которые связаны с продажами) кодом прописать ограничения для выгрузки на маркетплейс.

  7. При большом ассортименте и сложном каталоге вам придётся или подстраивать время выгрузки на неактивные часы пользования системами, или мириться с «тормозами», которые захватят ключевые части вашей ИТ-архитектуры.

  8. При использовании связки из базы данных + ETL вся логика переходит на слой коннекторов, не замедляя ни одну из систем-источников.

Когда брокер кажется быстрее, но база данных оказывается лучше

  1. Кажется, что брокер может подойти в процессах, в которых нет сложной логики и важна максимальная скорость передачи.

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

  3. Мы обеспечили постоянное обновление статусов с помощью брокера, но системы-получатели просто не успевали обрабатывать поток поступающих сообщений с обновлениями.

  4. Как это ни парадоксально, именно обновления (то, что менялось чаще всего) системам-потребителям не были нужны.

  5. Их интересовали только сами записи.

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

Опыт KT.Team и следующий шаг

В портфеле KT.Team десятки кейсов по интеграциям с разной бизнес-логикой. На своих проектах мы видели разную логику, запросы, проблемы в обработке данных. И знаем, в каких случаях лучше предложить брокер, а в каких - базу данных. Если у вас есть сомнения - запишитесь на консультацию, наши эксперты помогут определиться с инструментом и правильно построить интеграции.

Обсудить статью: Всегда ли нужен брокер сообщений?

Отправить через: