Как определить необходимость выделения нового микросервиса?
Что проверяют
Умеете ли вы обосновать границу сервиса бизнесом и данными, а не модой на микросервисы. Системного аналитика следом обычно спрашивают, какие артефакты он подготовит для решения и как сервисы будут общаться после разделения.
Как отвечать
Сначала признайте, что новый сервис стоит денег: сеть вместо вызова функции, согласованность в конечном счёте вместо транзакции, отдельный деплой, мониторинг и контракт. Выделять его имеет смысл, когда выгода перекрывает эту цену. Признаки:
- отдельный ограниченный контекст: у функции свой язык и свои сущности. «Заказ» для доставки и для бухгалтерии это разные модели, и это видно на event storming или карте контекстов;
- владение данными: сервис владеет своими таблицами целиком, а другим отдаёт данные через API или события. Если ему постоянно нужна общая транзакция с чужими сущностями, граница проведена неверно;
- разный темп изменений: одну часть меняют каждую неделю, другую раз в квартал, и совместные релизы тормозят обе;
- своя команда: закон Конвея работает, и сервис без понятного владельца быстро становится ничьим;
- иной профиль нагрузки или требований: пиковая нагрузка, другой SLA, изоляция платёжного контура под требования безопасности.
Артефакты аналитика: карта контекстов, матрица «функция и данные, которые она читает и пишет», диаграммы последовательности для ключевых сценариев, контракт в OpenAPI или AsyncAPI и перечень событий. Матрица хорошо показывает связность: если новый модуль в каждом сценарии синхронно ходит в три сервиса, выделять его рано. Промежуточный вариант это модуль внутри монолита с чёткими границами, который можно вынести позже.
Где спотыкаются
Выделяют сервис под каждую фичу или сущность: сервис пользователей, сервис адресов, сервис телефонов. Получается распределённый монолит, где один сценарий требует цепочки вызовов.
Оставляют сервисам общую базу. Тогда независимого деплоя нет, а любая миграция схемы ломает соседей.
Не продумывают согласованность: что будет, если заказ создан, а резерв на складе не прошёл. Здесь ждут слово «сага» и описание компенсирующих действий.