Мы продолжаем наш полет фантазии и ожидаемо подходим к извечному вопросу. Монолит или микросервисы? А почему бы не сделать монолит с красивой архитектурой, где логика будет инкапсулирована в отдельных слоях? Монолит – не памятник. Любой продукт живет пока развивается. Развивать монолит можно через боль с пробросом функционала через слои абстракции. Деления слоев абстракции на группы бизнес-логики. И мучительный рефакторинг ввиду того, что архитектура больше нам не подходит и требует переделки. Из плюсов мы получаем отсутствие сетевых задержек и снижение избыточности кодовой базы. А вот минусов хоть отбавляй. На первых порах монолит допустим. Но для ленивых программистов это пустая трата времени. Посмотрим в сторону микросервисов. Какова идеальная гранулярность микросервисов? Вспомним первый принцип SOLID под названием Принцип единой ответственности (single responsibility principle). В контексте микросервисов он гласит, что у одного микросервиса должна быть одна ответственность, а также, что за одну ответственность отвечает ровно один микросервис. Подумайте, почему так. Но у любого правила есть исключения. Если у нас есть два микросервиса, межсервисное взаимодействие которых генерирует огромное количество сетевого трафика, то стоит задуматься об их объединении. Прежде чем вшивать нужный микросервис в микросервис-потребитель стоит убедиться, что никто более им не пользуется (и не планирует). Чтобы не возникла ситуация, когда у микросервиса будет два независимых интерфейса API. Ну и хорошей практикой будет обсудить данное решение с коллегами. Лично я при выборе гранулярности микросервисов исхожу из количества независимых потребителей и потенциальной потребности в горизонтальном масштабировании. Мой совет – между монолитом и микросервисами выбирайте микросервисы. В перспективе, сшить микросервисы в монолит значительно проще, чем разрезать монолит на микросервисы, распутывая лапшу зависимостей.