Этот вопрос проверяет умение находить логические области системы и превращать их в устойчивые сервисы.
Границы сервисов определяют по доменам, зонам ответственности, структуре данных и потокам взаимодействий. Каждый сервис должен иметь собственную модель данных, чёткую ответственность и минимальные зависимости. Важно избегать чрезмерной связности и дублирования логики.
Определение границ сервисов — один из самых важных шагов в построении архитектуры. Удачные границы создают гибкую и масштабируемую систему; плохие границы приводят к хаосу, излишней связанности и проблемам с производительностью.
Самый надёжный способ выделения сервисов — использование естественных границ домена:
пользователи;
платежи;
каталог;
корзина;
заказы;
биллинг.
Такие границы отражают реальные бизнес-процессы и редко меняются.
Каждый компонент должен решать одну задачу.
Это снижает сложность и улучшает изоляцию.
Примеры:
Auth Service — только аутентификация;
Catalog Service — только информация о товарах;
Order Service — создание и управление заказами.
Смешивание логики разных доменов нарушает устойчивость системы.
Границы должны проводиться так, чтобы:
сервисы общались через API или события;
не было общей базы данных между несколькими сервисами;
изменения в одном сервисе не ломали другие.
Высокая связность приводит к каскадным падениям и усложняет разработку.
Каждый сервис должен иметь:
собственный storage;
свои таблицы и индексы;
свой source of truth.
Если два сервиса пишут в одну БД — это один сервис, разделённый искусственно.
Границы сервисов можно найти, анализируя:
где данные создаются;
где они изменяются;
какие сервисы инициируют процессы;
какие сервисы зависят от других.
Если поток идёт: каталог → корзина → заказ → биллинг, это естественная последовательность сервисов.
Проблемы:
слишком крупные сервисы → монолитные блоки, тяжело масштабировать;
слишком мелкие сервисы → много сетевых вызовов, сложность, высокие расходы.
Хороший сервис — это автономная часть системы, но не слишком раздробленная.
Границы должны быть устойчивыми:
не должны часто меняться при изменении функционала;
должны отражать стабильные бизнес-понятия.
Если граница “плывёт”, сервис придётся переписывать.
Границы сервисов определяются доменами, ответственностью, потоками данных и моделью владения данными. Хороший сервис автономен, слабо связан, имеет собственное хранилище и решает одну устойчивую бизнес-задачу.