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

Обновлено: 14 апреля 2026 г. в 18:20

Паттерны устойчивости: Circuit Breaker, Bulkhead, Retry

средний

Практический разбор устойчивости распределённых систем: как настраивать тайм-ауты, размыкатели цепи, бюджеты повторов и резервные сценарии без каскадных сбоев.

Устойчивость системы определяется не числом паттернов в презентации, а тем, как она ведет себя, когда одна зависимость уже деградировала и тянет за собой остальные.

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

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

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

Бюджет ошибок

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

Изоляция отказов

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

Управляемая деградация

Проектируйте резервные уровни сервиса и отключение второстепенных функций так, чтобы пользователь видел предсказуемое поведение во время инцидента.

Аргументация выбора

Показывайте на интервью не только паттерны, но и их параметры, триггеры срабатывания и метрики эффективности.

Классика

Release It!

Практические истории Michael Nygard помогают увидеть те же механизмы устойчивости на реальных инцидентах, а не только на схемах.

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

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

На практике строится не одним механизмом, а связкой: быстро останавливает поток в деградировавшую зависимость, не даёт одному контуру отобрать все общие ресурсы, а имеет смысл только вместе с , и .

В аварийном режиме система часто должна выбрать , а не бесконечное ожидание, включить и безопасный , чтобы ограничить и не сжечь по .

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

Размыкатель цепи (Circuit Breaker)

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

Закрыт

Запросы идут к зависимости в обычном режиме, а система накапливает сигналы об ошибках и задержке.

Открыт

Новые обращения отсекаются сразу, чтобы не раздувать очередь и не тратить ресурсы на уже деградировавший контур.

Полуоткрыт

Небольшое число пробных запросов проверяет, восстановилась ли зависимость, прежде чем вернуть обычный трафик.

Визуализация размыкателя цепи

Загружаем визуализацию размыкателя цепи...

Изоляция по отсекам (Bulkhead)

Когда все функции делят общие пулы ресурсов, один шумный поток может занять все соединения или рабочие слоты и уронить даже критичные пользовательские сценарии. Изоляция по отсекам ограничивает ущерб на уровне отдельных контуров и помогает системе продолжать работу в частично аварийном режиме.

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

Визуализация изоляции по отсекам

Загружаем визуализацию изоляции по отсекам...

Важно

Консистентность и идемпотентность

Повторные попытки без идемпотентных контрактов часто создают бизнес-дубли и делают восстановление куда болезненнее самого сбоя.

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

Повторные попытки (Retry)

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

Повторяйте только временные ошибки; для предсказуемых сбоев новый вызов лишь усугубляет ситуацию.

Используйте экспоненциальную паузу и случайный разброс, чтобы не синхронизировать волны повторов.

Ограничивайте бюджет повторов и согласовывайте его с тайм-аутом запроса.

Повторы безопасны только для идемпотентных операций; иначе они создают дубли и побочные эффекты.

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

Визуализация повторных попыток

Загружаем визуализацию повторных попыток...

Резервные сценарии и управляемая деградация

Управляемая деградация

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

Кэш с последними доступными данными

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

Очередь и асинхронное восстановление

Критичные операции принимайте в очередь и завершайте асинхронно после восстановления зависимого контура.

Безопасный ответ по умолчанию

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

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

Для каждого внешнего вызова определены тайм-аут, правила повторов и пороги размыкателя цепи.

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

Описан регламент ручного размыкания контура и безопасного возврата зависимости в работу.

Тесты покрывают каскадный отказ зависимости и поведение резервных сценариев.

Параметры устойчивости регулярно пересматриваются после инцидентов и разборов.

Частая ошибка: агрессивно повторять запросы без лимита одновременных попыток и без случайного разброса пауз.

Источники

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

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