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

Обновлено: 24 марта 2026 г. в 12:33

Software Architecture: The Hard Parts (short summary)

hard

Трудные части архитектуры начинаются не там, где нужно выбрать модный паттерн, а там, где неверная граница сервиса или данных потом годами мешает системе развиваться. Эта глава как раз про такие решения: дорогие, поздно исправляемые и почти всегда завязанные на компромиссы.

На практике она собирает в одну рамку декомпозицию монолита, границы владения данными, распределенные транзакции, saga-подходы, orchestration vs choreography и эволюцию контрактов. Благодаря этому удобно обсуждать не только желаемую форму системы, но и цену перехода к ней, риски консистентности и влияние выбора на команды.

В сложных сценариях на интервью и архитектурных review эта глава особенно полезна, потому что дает зрелый язык для неприятных вопросов: как делить сервисы, где заканчивается владение данными, когда оправдана асинхронность и как жить без идеального варианта.

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

Сложные компромиссы

Помогает осознанно работать с проблемами распределенных данных, транзакционности и консистентности.

Pattern selection

Учит выбирать между orchestration/choreography, sync/async и другими паттернами по контексту.

Risk management

Добавляет практику оценки failure-сценариев до внедрения архитектурного решения в production.

Interview hard mode

Готовит к продвинутым вопросам, где важно не идеальное решение, а зрелая trade-off аргументация.

Источник

Обзор книги

Детальный разбор книги в блоге 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 и управление данными в распределённых системах.

Оригинал
Перевод

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

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

Часть 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».

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

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

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