~/ai — production — circuit breaker
‹ ai engineering21 / продакшен

CIRCUIT BREAKING · НЕ ЛОМИТЬСЯ В ЗАКРЫТУЮ ДВЕРЬ

Внешний API (модель, Prozorro, банк) иногда падает. Если продолжать слать ему запросы, каждый ждёт таймаут, пользователи висят, а упавшему сервису ещё тяжелее подняться. Предохранитель после серии ошибок «размыкает цепь»: запросы сразу идут на запасной вариант, а сервис время от времени осторожно проверяется.

01 · запросы на одних часах t = 0.0 с
ответ сервисатаймаут 3 сзапасной ответсервис лежит
Высота столбика — сколько ждал пользователь. Новый запрос приходит каждые 0.5 с.
02 · предохранитель автомат из трёх состояний
CLOSEDзапросы идут в сервис
OPENсразу запасной ответ
HALF-OPENодин пробный запрос
CLOSED → OPEN: 3 ошибки подряд · OPEN → HALF-OPEN: прошло 4 с · HALF-OPEN → CLOSED: проба прошла · HALF-OPEN → OPEN: проба упала
03 · итог за 30 секунд 60 запросов на каждого
ждёт окончания…
Автомат состояний и событийная симуляция на виртуальных часах выполняются в браузере: приход запросов, ожидание, таймауты, переходы предохранителя, счёт. Сценарий доступности сервиса (работает до 8 с, лежит до 20 с, потом снова работает) и задержки (ответ 200 мс, таймаут 3 с, запасной 50 мс) заданы заранее.
~/ai $ client.call(api) with breaker