Контекст
Есть два сервиса - 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.