System Design Space

    Глава 150

    Обновлено: 16 февраля 2026 г. в 03:00

    Release It! (short summary)

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

    Release It! Design and Deploy Production-Ready Software

    Авторы: Michael T. Nygard
    Издательство: Pragmatic Bookshelf, 2018 (2nd Edition)
    Объём: 376 страниц

    Паттерны устойчивости от Michael Nygard: timeouts, circuit breakers, bulkheads и защита от cascade failures.

    Release It! Design and Deploy Production-Ready Software — оригинальная обложкаОригинал

    Анти-паттерны стабильности (Stability Antipatterns)

    Nygard начинает с описания «трещин» в системах — паттернов, которые приводят к cascade failures:

    Integration Points

    Каждая интеграция с внешней системой — потенциальная точка отказа. Сетевые вызовы могут зависнуть, вернуть мусор или просто не ответить. Без защиты один медленный сервис ломает всю цепочку.

    Blocked Threads

    Самый частый убийца систем под нагрузкой. Синхронные вызовы без таймаутов блокируют потоки, пул исчерпывается, новые запросы не обрабатываются — система «зависает».

    Cascading Failures

    Отказ одного компонента вызывает цепную реакцию. Один сервис начинает отвечать медленно → вызывающий копит соединения → его пул исчерпывается → падает весь кластер.

    Unbounded Result Sets

    Запрос без LIMIT возвращает миллион записей. OOM, GC pause, timeout — и сервис мёртв. Всегда ограничивайте результаты и используйте пагинацию.

    Паттерны стабильности (Stability Patterns)

    Timeouts

    Первая линия обороны. Каждый внешний вызов должен иметь таймаут. Без таймаута один зависший сервис убьёт всю систему.

    • Connection timeout — время на установку соединения
    • Read timeout — время ожидания ответа
    • Общий timeout на всю операцию

    Circuit Breaker

    Автоматическое отключение неработающих зависимостей.Если сервис постоянно падает, нет смысла его дёргать — это только ухудшает ситуацию.

    ClosedOpenHalf-Open

    При превышении порога ошибок circuit «открывается» и сразу возвращает fallback. Периодически пробует восстановить соединение.

    Bulkheads

    Изоляция отсеков как на корабле. Если один отсек затоплен, остальные продолжают работать.

    • Отдельные thread pools для разных типов запросов
    • Отдельные connection pools для разных зависимостей
    • Изоляция критичных и некритичных потоков

    Retry with Backoff

    Повторные попытки с экспоненциальной задержкой. Но осторожно — без правильной реализации ретраи превращаются в DDoS на свой же сервис.

    • Exponential backoff: 1s → 2s → 4s → 8s
    • Jitter для предотвращения thundering herd
    • Максимальное количество попыток
    • Retry только для идемпотентных операций!

    Дополнительные паттерны

    Shed Load

    При перегрузке лучше отклонить часть запросов, чем упасть полностью. Load shedding — осознанный отказ в обслуживании для сохранения системы.

    Fail Fast

    Если знаете, что запрос не может быть выполнен — откажите сразу, не тратьте ресурсы. Проверяйте preconditions на входе.

    Handshaking

    Сервер сообщает клиенту о своей готовности принимать запросы. Позволяет graceful startup и controlled shutdown.

    Steady State

    Система должна работать бесконечно без ручного вмешательства. Автоматическая ротация логов, очистка кэшей, удаление старых данных.

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

    Part I

    Create Stability

    Истории реальных катастроф. Анти-паттерны стабильности. Паттерны стабильности: timeouts, circuit breakers, bulkheads.

    Part II

    Design for Production

    Networking, security, availability. Администрирование, мониторинг, логирование. Deployment и infrastructure.

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

    Grokking Continuous Delivery

    CI/CD, безопасные деплои и DORA‑метрики для части Deliver Your System.

    Читать главу
    Part III

    Deliver Your System

    Continuous deployment, version control, environments. Configuration management, runtime control.

    Part IV

    Solve Systemic Problems

    Chaos engineering, adaptation. Организационные изменения, эволюция систем, управление сложностью.

    Применение на System Design интервью

    Когда использовать

    • «Как обрабатывать отказы зависимостей?»
    • «Что будет при перегрузке?»
    • «Как предотвратить cascade failures?»
    • «Как сделать graceful degradation?»
    • «Какие SLO и как их достичь?»

    Ключевые паттерны для интервью

    • Circuit breaker для внешних вызовов
    • Timeouts на всех integration points
    • Bulkheads для изоляции нагрузки
    • Rate limiting и load shedding
    • Retry with exponential backoff

    Связанные книги

    Главные выводы

    Каждая интеграция — потенциальная точка отказа. Защищайте все integration points
    Timeouts обязательны. Без них один зависший сервис убьёт всю систему
    Circuit breaker предотвращает cascade failures и даёт системе восстановиться
    Bulkheads изолируют отказы, не позволяя им распространяться
    Лучше отклонить часть запросов (load shedding), чем упасть полностью
    Production-ready ≠ feature-complete. Устойчивость важнее функциональности

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