System Design Space
Граф знанийНастройки

Обновлено: 25 марта 2026 г. в 01:00

Стратегии декомпозиции

medium

Как декомпозировать систему на сервисы: bounded context, business capability, team topology, data ownership и стратегия миграции из монолита.

Большинство проблем микросервисов рождается не на этапе RPC, а в тот момент, когда систему режут по неверным границам.

Для реального проектирования глава помогает увидеть, как bounded context, business capability, team topology и data ownership влияют на качество декомпозиции сильнее, чем схема репозиториев или язык реализации.

Для интервью и инженерных разборов она полезна тем, что помогает проверять decomposition на риск distributed monolith, дорогих кросс-сервисных транзакций и orchestration-сцепления между командами.

Практическая польза главы

Практика проектирования

Разделяйте систему по бизнес-capabilities, а не по техническим слоям и репозиториям.

Качество решений

Оценивайте варианты разреза через data ownership, team topology и частоту кросс-сервисных транзакций.

Interview articulation

Объясняйте, почему выбранный cut снижает связность и ускоряет автономные релизы.

Failure framing

Проверяйте decomposition на риск distributed monolith и дорогое orchestration-сцепление.

Контекст

Микросервисы и интеграция

Decomposition - это фундаментальный шаг, который определяет последующие коммуникации и операционную сложность.

Открыть обзор

Стратегии декомпозиции определяют, где проходят границы сервисов, кто владеет данными и как быстро команды смогут поставлять изменения. Ошибка на этом шаге обычно приводит к дорогой реорганизации архитектуры через 1-2 года.

Драйверы декомпозиции

  • Независимая поставка изменений разными командами без блокировок друг друга.
  • Разделение зон ответственности (domain ownership) и снижение когнитивной нагрузки.
  • Наличие разных профилей нагрузки и требований к масштабированию по подсистемам.
  • Нужна изоляция отказов и возможность деградировать отдельные capabilities, не весь продукт.

Оси декомпозиции

Business capability

Разделение по бизнес-возможностям: billing, catalog, fulfillment, identity. Обычно лучший стартовый ориентир.

Bounded context (DDD)

Граница сервиса совпадает с domain model и ubiquitous language. Снижает конфликтные трактовки данных.

Team topology

Сервисы проектируются так, чтобы ownership и runtime-ответственность были у одной команды.

Data ownership

Каждый сервис владеет своим хранилищем и схемой; cross-service join заменяется API/events.

Migration

Monolith to Microservices

Книга Sam Newman дает прикладные шаги и риски миграции от монолита к сервисам.

Открыть главу

Стратегии миграции

Strangler Fig: постепенно выносите потоки из монолита за API-gateway/route layer.

Branch by Abstraction: сначала внедряется абстракция, затем плавно меняется реализация под ней.

Extract by volatility: выносите сначала самые изменчивые и независимые части домена.

Migration by seams: выделяйте технические и доменные швы (authentication, notifications, reporting).

Типичные антипаттерны

Nano-services: слишком мелкие сервисы с высокой связностью и сложной координацией.

Shared database как основной контракт между сервисами.

Декомпозиция по техническим слоям вместо бизнес-границ (service A = API, service B = DB).

Преждевременная декомпозиция без наблюдаемости, CI/CD и ownership-модели.

Пратический чеклист

  • Каждый сервис имеет явного владельца и контракт SLA/SLO с соседями.
  • Границы сервисов отражают domain boundaries, а не структуру кода в монолите.
  • Cross-service зависимости задокументированы и имеют fallback/degradation поведение.
  • Для каждого extraction шага есть rollback-стратегия и метрики успеха миграции.
  • Данные и write-path ownership не размазываются между несколькими сервисами.

References

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки