System Design Space

    Глава 54

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

    Software Architecture: The Hard Parts (short summary)

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

    Источник

    Обзор книги

    Детальный разбор книги в блоге tellmeabout.tech

    Читать оригинал

    Software Architecture: The Hard Parts (Современный подход к программной архитектуре: сложные компромиссы)

    Авторы: Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani
    Издательство: O'Reilly Media, 2021
    Объём: 462 страниц

    Декомпозиция монолита, saga patterns, orchestration vs choreography и управление данными в распределённых системах.

    Software Architecture: The Hard Parts — оригинальная обложкаОригинал
    Современный подход к программной архитектуре: сложные компромиссы — переводПеревод

    Структура книги

    Книга разделена на две части, каждая посвящена ключевым «трудным» решениям:

    Часть I: Декомпозиция

    Как разбить монолит на сервисы: паттерны декомпозиции, определение границ, анализ компонентов и зависимостей.

    Часть II: Данные и транзакции

    Разделение БД, распределённые транзакции, saga patterns, eventual consistency и управление контрактами.

    Разбор

    Часть I: Декомпозиция

    Детальный разбор первой части книги

    Читать разбор

    Часть I: Pulling Things Apart (Декомпозиция)

    Архитектурные квантыn (Architectural Quantum)

    Architectural Quantum — минимальная независимо развёртываемая единица с высоким функциональным cohesion:

    Independently deployable
    Можно развернуть отдельно от других частей
    High functional cohesion
    Содержит всё необходимое для выполнения функции
    High static coupling
    Зависимости на уровне кода внутри кванта

    Ключевой инсайт: Размер кванта определяет архитектурные характеристики. Монолит = один квант (всё деплоится вместе). Микросервисы = много квантов (независимый деплой каждого).

    Паттерны декомпозиции

    Тактические паттерны
    Component-based
    Выделение по компонентам и их связям
    Tactical forking
    Копирование монолита и удаление лишнего
    Strangler Fig
    Постепенная замена частей монолита
    Parallel Run
    Запуск нового и старого параллельно для проверки
    Драйверы декомпозиции
    Afferent coupling
    Сколько компонентов зависят от данного
    Efferent coupling
    От скольких компонентов зависит данный
    Component volatility
    Как часто компонент изменяется
    Fault tolerance
    Требования к изоляции сбоев

    Разбор

    Часть II: Putting Together

    Разбор второй части книги: данные и транзакции

    Читать разбор

    Часть II: Pulling Data Apart (Разделение данных)

    Data Decomposition Drivers

    Причины разделять данные
    • Независимое масштабирование сервисов
    • Изоляция сбоев (fault tolerance)
    • Разные требования к данным (GDPR)
    • Независимый выбор технологий
    Причины НЕ разделять
    • Сложные транзакции между сервисами
    • Высокие требования к consistency
    • Частые cross-service запросы
    • Сложность дата-репликации

    Разбор

    Distributed Transactions

    Разбор распределённых транзакций и саг

    Читать разбор

    Distributed Transactions: Sagas

    Orchestration Saga

    Центральный координатор управляет всеми шагами:

    +Centralized workflow logic
    +Easier error handling
    Single point of failure
    Coupling to orchestrator
    Choreography Saga

    Сервисы реагируют на события друг друга:

    +No central point of failure
    +Loose coupling
    Harder to understand flow
    Complex error handling

    Когда что выбирать: Orchestration — для сложных бизнес-процессов с чётким workflow. Choreography — для простых событийных цепочек с минимальной зависимостью между сервисами.

    Разбор

    Saga State Management

    Разбор паттернов управления состоянием саг

    Читать разбор

    Saga State Management

    Epic Saga (synchronous)

    Все сервисы вызываются синхронно. Простота, но высокий coupling и latency.

    Phone Tag (async point-to-point)

    Асинхронные вызовы между сервисами. Меньше coupling, сложнее отслеживать.

    Fairy Tale (async events)

    Полная event-driven архитектура. Максимальная decoupling, сложный debugging.

    Разбор

    Contracts & Coupling

    Разбор контрактов и связанности сервисов

    Читать разбор

    Contracts & Service Coupling

    Типы контрактов

    Strict contracts
    Чёткая схема, версионирование, breaking changes явные
    Loose contracts
    Tolerant reader, игнорирование неизвестных полей
    Consumer-driven
    Потребитель определяет, что ему нужно (Pact)

    Coupling Characteristics

    Static coupling
    Зависимости на уровне кода (compile-time)
    Dynamic coupling
    Runtime зависимости между сервисами
    Semantic coupling
    Неявные зависимости в бизнес-логике

    Применение к System Design Interview

    Что использовать на интервью

    • Architectural quantum: объясняйте границы деплоя и coupling
    • Saga patterns: показывайте понимание распределённых транзакций
    • Orchestration vs Choreography: обосновывайте выбор
    • Data ownership: чётко определяйте, какой сервис владеет данными

    Частые ошибки

    • Игнорирование distributed transactions при разделении сервисов
    • Отсутствие compensating actions в saga
    • Shared database между «независимыми» сервисами
    • Синхронные вызовы везде (distributed monolith)

    Книга

    Fundamentals of Software Architecture

    Рекомендуется прочитать перед этой книгой

    Читать обзор

    Вердикт

    10/10
    Практичность
    9/10
    Глубина
    10/10
    Для интервью

    Software Architecture: The Hard Parts — обязательная книга для тех, кто работает с микросервисами или готовится к senior/staff-level интервью. Концепции architectural quantum, saga patterns и data decomposition drivers напрямую применимы к System Design Interview. Читать после «Fundamentals of Software Architecture».

    Где найти книгу