Немного мудрости
Enterprise Service Bus (ESB) / Корпоративная сервисная шина (КСШ) = ПО, обеспечивающее централизованный и унифицированный обмен сообщениями между различными ИС предприятия. Подробнее в wikipedia.
Если в "дошинную" эпоху общепринятой концепцией была интеграция различных систем друг с другом напрямую, т.н. соединение "точка-точка", то с появлением шины — она становится главным транспортным узлом в интеграционной архитектуре предприятия, в определённом смысле объединяя в себе все API предприятия:
скачать схему в формате diagrams.net (бывший draw.io)
Всё сказанное ниже в основном касается крупных ESB (типа IBM Integration Bus), на которые "нацеплены" большая часть ИС (информационных систем) предприятия.
Если же мы говорим о продукта типа Apache Kafka и RabbitMQ, использующихся в качестве КСШ, то с ними всё гораздо проще, кроме того, они часто задействованы в микросервисной и service-mesh архитектуре, а также в смешаной архитектуре.
Общая концепция КСШ:
скачать схему в формате diagrams.net (бывший draw.io)
КСШ на определённом этапе истории являли собой эволюционный виток архитектурной мысли в рамках сервисно-ориентированной архитектуры в "домикросервисную эпоху". Хорошо подходит для средних размеров предприятий с относительно небольшим количеством ИС (десятки).
Оглянувшись на свой и чужой опыт, можно извлечь несколько уроков использования КСШ:
-
ESB с высокой вероятностью становится единой точкой отказа (single point of failure, SPOF), сиречь, если рушится она, то рушится взаимодействие всех систем, которые "общаются" через неё.
-
ESB могут стать "узким горлышком" ещё в том смысле, что множество команд разработки других ваших систем будут вынуждены ждать выхода в ПРОМ доработок от команды ESB. Больше зависимостей --> больше общий TTM (time to market).
Всё это может значительно усугубиться в ситуации, когда в вашей компании количество специалистов, "знающих Шину" — близко к нулю.
-
Обязательно д.б. выстроен процесс сохранения и актуализации артефактов проектирования, разработки, тестирования Шины и всех систем, работающих с оной. Нужны Архитекторы, и они должны быть "пишущие".
-
Заклинаю, НЕ надо совать в Шину бизнес-логику, проблем потом не оберётесь. Использовать Шину следует ТОЛЬКО как ТРАНСПОРТ.
Да и вообще идея вставлять бизнес-логику в вендорные решения и фреймворки — нарушение принципов DDD и заключение вашего предприятия в т.н. vendor-lock.
-
На Шину со множеством адаптеров обязательно нужны автотесты, руками регресс десятков-сотен кейсов адаптеров не покроется, особенно если необходимость в регрессе возникает раз в несколько дней или чаще, ведь на Шине с большой связанностью постоянно будет что-то меняться. Вопрос: стоит ли "вешать" разработку и тестирование на вендора?
Автотесты требуют всегда актуальных артефактов п.4.