В каких состояниях бывает circuit breaker и как он между ними переходит?
- Как работает circuit breaker?
- Зачем полуоткрытое состояние?
Закрыт — вызовы идут, ошибки считаются; порог превышен — открыт: вызовы сразу отклоняются; после паузы — полуоткрыт: несколько пробных вызовов решают, закрыться или снова открыться.
- Смысл — не держать потоки на заведомо упавшей зависимости и дать ей восстановиться
- Полуоткрытое состояние не обрушивает едва поднявшийся сервис полным трафиком
- Порог — по доле ошибок в окне с минимальным числом вызовов, медленные вызовы тоже считаются
А ещё Вместе с таймаутами, bulkhead и запасным ответом
Подробно
Смысл предохранителя в том, чтобы перестать долбить упавшую зависимость: вместо тысяч запросов, висящих на таймаутах и удерживающих потоки, вызовы отклоняются мгновенно, а вызывающий получает быстрый отказ или заранее подготовленную деградацию. Полуоткрытое состояние — важная деталь: после паузы пропускается ограниченное число пробных запросов, и полный трафик возвращается только при их успехе, иначе едва поднявшийся сервис снова упал бы под нагрузкой. При настройке важно, чтобы порог считался по доле ошибок на достаточном объёме вызовов, а не по абсолютному числу, иначе на малом трафике предохранитель будет срабатывать случайно. И обязательно продумывают поведение при открытом состоянии — заглушка, устаревшие данные из кэша или явная ошибка.
Что хотят услышать
- Три состояния и переходы между ними.
- Зачем нужен: быстрый отказ и защита ресурсов.
- Роль полуоткрытого состояния и настройка порога.
Частые ошибки
- Открывать предохранитель по абсолютному числу ошибок без учёта объёма.
- Не предусмотреть поведение приложения при открытом предохранителе.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Открыт и закрыт — всего два состояния, промежуточного нет
- ✓Закрыт → открыт при превышении порога ошибок → полуоткрыт после таймаута → закрыт или открыт
- ✗Активен, приостановлен и выключен; переключает оператор по метрикам
- ✗Состояний нет, он просто ограничивает частоту запросов
Что спросят дальше
- Как выбрать порог и длительность паузы?
- Как предохранитель сочетается с повторами и таймаутами?
Разбор темы
- Надёжность и идемпотентность
Управляемая деградация вместо каскада, таймауты и бюджет времени запроса, безопасные ретраи и их мультипликация, идемпотентность как фундамент, предохранитель, отсеки и сброс нагрузки, transactional outbox вместо 2PC.
Связанные вопросы
- Внешний платёжный провайдер начал отвечать за 30 секунд вместо 200 миллисекунд. Через минуту сервис перестал отвечать вообще, включая страницы, не связанные с оплатой. Что произошло? Middle
- Как правильно настраивать таймауты и повторы запросов? Middle
- Как сервису пережить нагрузку выше его возможностей? Senior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.