Получить доступ

В каких состояниях бывает circuit breaker и как он между ними переходит?

MiddleНадёжность и идемпотентность
Ещё спрашивают так:
  • Как работает circuit breaker?
  • Зачем полуоткрытое состояние?
Коротко

Закрыт — вызовы идут, ошибки считаются; порог превышен — открыт: вызовы сразу отклоняются; после паузы — полуоткрыт: несколько пробных вызовов решают, закрыться или снова открыться.

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

А ещё Вместе с таймаутами, bulkhead и запасным ответом

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Смысл предохранителя в том, чтобы перестать долбить упавшую зависимость: вместо тысяч запросов, висящих на таймаутах и удерживающих потоки, вызовы отклоняются мгновенно, а вызывающий получает быстрый отказ или заранее подготовленную деградацию. Полуоткрытое состояние — важная деталь: после паузы пропускается ограниченное число пробных запросов, и полный трафик возвращается только при их успехе, иначе едва поднявшийся сервис снова упал бы под нагрузкой. При настройке важно, чтобы порог считался по доле ошибок на достаточном объёме вызовов, а не по абсолютному числу, иначе на малом трафике предохранитель будет срабатывать случайно. И обязательно продумывают поведение при открытом состоянии — заглушка, устаревшие данные из кэша или явная ошибка.

Что хотят услышать

  • Три состояния и переходы между ними.
  • Зачем нужен: быстрый отказ и защита ресурсов.
  • Роль полуоткрытого состояния и настройка порога.

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

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

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Закрыт (пропускает, считает ошибки) → открыт при превышении порога (мгновенно отклоняет) → через таймаут полуоткрыт (пробует часть запросов) → закрыт при успехе или снова открыт при неудаче
  • ✗Открыт и закрыт — всего два состояния, промежуточного нет
  • ✗Активен, приостановлен и выключен
  • ✗Он не имеет состояний и просто ограничивает частоту запросов

Что спросят дальше

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

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем