В чем преимущество SOA и когда такую архитектуру нужно юзать?
Всем привет! Знаю, много букв, но...
У нас обычный проект - что то типа магазина, доставка, эквайринг, админка для менеджеров и все такое. Вся-вся бизнес-логика у нас находиться в так называемых "фасадах".
Для каждого контекста свой фасад: ФасадЗаказов, ФасадДоставки и т.п. Там даже та логика, которая принадлежит непосредственно объекту. Таким образом сами объекты у нас превращаются в просто структуры данных, а мы все больше уходим от ООП в сторону функционального программирования. Причем большинство методов в фасадах принимают не объекты, а их id. И сам метод уже выбирает нужный объект из БД и работает с ним.
В общем, я в проекте новенький, но уже прекрасно вижу насколько сильно такое решение усложняет разработку.
Когда я спросил почему так делается, сказали что проект планируется международный, и будет разнесен по разным серверам в разных частях света, а из каждого фасада будет сделан свой SOA сервис - это для удобства и для масштабирования.
Я понимаю, что некоторую логику можно оформить в качестве SOA, например, сервис отправки почтовых сообщений, сервис аутентификации. Но я совершенно не понимаю как разделить на сервисы высокосвязанную предметную логику, чтоб разнести по разным серверам, например, каталог товаров и список заказов.
На мою констатацию что нынче проблемы масштабирования решаются немного другими путями (всякие там разносы по серверам, кластеризацией, шардингами и пр) реакции не поступило.
Ну и прежде чем делать выступление почему такой подход неправильный, хотелось бы понять: может я чего-то не понимаю в SOA? Может он имеет место быть в нашем проекте?
ex Software Engineer at Reddit TS/React/GraphQL/Go
удобно понимать в терминах: микросервисы или монолит
1) микросервисы имеют преимущество горизонтального масштабирования, но они stateless, поэтому для организации общей памяти необходим сервис кэширования, взаимодействие сетевое
2) монолит имеет преимущество, когда требуется общая память (быстрый отклик) для частей приложения, он statefull, поэтому сетевые задержки минимальны или отсутствуют
стоит помнить: операции I/O всегда медленней CPU, поэтому выбор зависит от зачади, а в целом применяют комплексные решения состоящие из первого и второго