Интеграция в интеграцию и с интеграцией внутри!
Есть особый вид архитектуры, который не описан ни в одном учебнике, но стабильно встречается в проде. Это когда ты открываешь систему и понимаешь, что она не просто интегрирована с внешними сервисами. Она состоит из интеграций.
Снаружи это выглядит прилично. Есть API, есть сервисы, есть документация, которая последний раз обновлялась в эпоху, когда еще верили в светлое будущее микросервисов.
Но стоит копнуть глубже и начинается.
Сервис А ходит в сервис Б. Сервис Б ходит в сервис С. Сервис С по старой доброй традиции ходит в сервис А, но через промежуточный адаптер, который написан на скорую руку и теперь считается критически важным компонентом бизнеса.
Дальше веселее.
Каждый сервис не просто что то делает, он обязательно интегрируется с чем то еще. Иногда даже сам с собой, но через очередь сообщений, потому что так надежнее.
В итоге получается архитектура уровня
Интеграция внутри которой интеграция которая вызывает интеграцию которая проверяет интеграцию и в конце еще одна интеграция на всякий случай.
И самое прекрасное в этом то, что никто уже не может сказать где заканчивается система и начинается внешняя интеграция. Граница стирается примерно на втором ретрае.
Любая ошибка выглядит как магия.
Почему не работает ответ зависит от фазы луны, таймаута очереди и того, кто последний деплоил этот слой интеграций.
А самое страшное что все это работает.
Плохо, нестабильно, с молитвами, но работает.
И когда кто то предлагает упростить архитектуру, в комнате становится тихо. Потому что все понимают что если убрать хотя бы одну интеграцию, вся конструкция может наконец начать вести себя предсказуемо. А к этому никто не готов.