Программист, CEO SHIFU.IO

Простыми словами: Circuit Breaker

Контекст

Есть два сервиса - Client и Server.

Client обращается к Server, а Server в это время упал.

Есть несколько вариантов что делать, в рамках этой статьи рассмотрим паттерн Circuit Breaker - это прокси (промежуточный сервис) между Client и Server, который имеет три состояния:

Closed

Все запросы от Client пропускаются к Server без проблем. (знаю, не интуитивно, по идее тут нужно сказать что он Открыт, но увы, придется жить с этим несоответствием).

Open

В случае, если Server упал, CircuitBreaker переходит в состояние Open и включает таймер, в течении которого возвращает ошибку, не посылая запросы к Server вообще.

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

Когда таймер состояния Open истек, переводим CircuitBreaker в состояние Half-Open (полу-открытый).

Half-Open

Начинаем пропускать лишь часть запросов к Server.

  • Если хотябы один не прошел, переводим CircuitBreaker обратно в Open.
  • Если все прошли, считаем что Server восстановился, переводим CircuitBreaker в Closed.