Первый важный минус - использование брокера даёт нагрузку на сервис, который передаёт сообщение.
Представим ситуацию: брокер некоторое время недоступен, за это время никакие новые сообщения в очередь не добавлялись.
Сам брокер «не знает», что и какая система пыталась в него отправить
Соответственно, системе-источнику приходится проверять, какое сообщение было последним в очереди, и повторно отправить всё, что накопилось за время недоступности.
Эта логика дополнительно нагружает систему, поэтому есть соблазн от неё отказаться.
Но в этом случае недоставленные сообщения рано или поздно отразятся на критичных бизнес-процессах.
Второй минус - перегруженность системы-получателя лишними данными.
Брокер не может выбрать, какие сообщения передавать - он отдаёт всю очередь. Например, всю информацию по ассортименту или всю информацию из WMS по остаткам на складах.
Теперь представим, что вашей системе не нужен весь объем каких-то данных
Например, 1С, которая работает в вашем филиале в Уфе, не нужны данные по клиентам и заказам из всех ваших 20 филиалов.
Но система не может «попросить» у брокера отфильтрованные сведения.
Ей приходится получать через интеграции всё, что отдают CRM и OMS (Order Management System), сохранять это в свои базы данных и за счет внутренней логики отделять 5% нужных данных от 95% лишних.
Третий значимый минус - это цементирование контракта.
Все участники процесса должны договориться о том, в каком формате будет передаваться сообщение.
Это лишает гибкости и приводит к росту трудозатрат на поддержку единого формата.
Неочевидный минус связан с отсутствием удобной и/или детальной ретроспективы. Например, брокер Kafka может хранить исторические данные - но если что-то сломается, придется прогружать всю очередь сообщений от исторически первой до последней записи.
Никаких выборок по актуальным статусам сделать невозможно.
Проблема стоит наиболее остро в тех случаях, когда нужно обменяться историей с другой командой или осуществить миграцию - вытащить эту информацию будет проблематично.
Этот недостаток тянет за собой другой существенный минус - невозможность качественной сверки.
Системы прогружают из брокера и старые, и новые сообщения, не делая между ними разницы.
При повторной прогрузке возможны ситуации, когда более новое сообщение оказывается затёртым: например, вместо статуса «доставлен» заказ получает статус «создан».
Избежать таких ситуаций можно, но для этого придется добавить промежуточный сервис сверки или прописать логику сверки в системе-получателе.
Это сказывается и на скорости
С одной стороны, системы быстро обмениваются всем потоком сообщений, но с другой - разобраться, что актуально, исключить дубликаты - сложно.
Поэтому чтение данных происходит гораздо медленнее.
Использование брокера точно так же может привести к проксированию, как и прямые интеграции.
Чтобы все системы в контуре не получали избыточные данные, «проще» пропустить их через одну систему, там нормализовать и уже нормализованные данные передать дальше. К чему это приводит, мы описывали выше.
Есть и неявный минус управленческого порядка. У каждой системы есть свой продакт-оунер.
Но кто является владельцем брокера и связанных с ним интеграций?
Чаще всего, им становится технический отдел.
Для остальных подразделений - это явный плюс (ответственности меньше), но в таком случае ни у кого из заинтересованных подразделений не будет ощущения контроля за инфраструктурой.