System Design Space

    Глава 116

    Обновлено: 15 февраля 2026 г. в 20:35

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

    Прогресс части0/17

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

    Контекст

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

    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