Получи случайную криптовалюту за регистрацию!

Конспект по теме 'Circuit breaker' из категории 'Паттерны' Да | .NET backend study

Конспект по теме "Circuit breaker" из категории "Паттерны"

Данный паттерн рассчитан на ошибки, исправление которых требует много времени. Например, обрыв соединения, отказ оборудования. В данном случае отправка повторных запросов (паттерн Retry), скорее всего, будет бессмысленна. А если к тому же представить, что к какому-то сервису обращается много клиентов и этот сервис становится недоступным, каждый клиент начинает делать повторные попытки своих запросов к неработающему сервису - существенно увеличивается исходящий трафик от пользователей этого сервиса.

Вместо этого есть смысл реализовать некий защитный барьер, который будет останавливать повторяющиеся запросы, если в них нет смысла. В идеале этот паттерн должен использоваться совместно с Retry-паттерном. Данный паттерн проверяет причину, почему запрос провалился и если эта причина не является временной - запрещает отправлять повторные запросы. Если же ошибка является временной - то в дело вступает Retry-паттерн.

Алгоритм работы

Название данного паттерна можно перевести на русский, как “размыкатель цепи”. И в нем существует 3 состояния:

1. Замкнутое
Все запросы корректно проходят, либо успешно завершаются с помощью Retry-паттерна. Есть определенный лимит ошибочных ситуаций, которые не удается обойти с помощью Retry-паттерна(т.е. либо даже после повторных запросов приходит ошибочный результат, либо код ошибки сразу дает понять о бесполезности повторного запроса). В случае, если данный лимит превышается, то приложение переходит в следующее состояние;
2. Разомкнутое
В данном состоянии приложение запрещает отправлять какие-либо запросы. При переходе в это состояние запускается таймер. Как только он истекает, приложение переходит в следующее состояние;
3. Ограниченное
В данном состоянии приложение разрешает отправлять только определенный процент запросов - чтобы сразу не повышать нагрузку до максимума. Если все они завершаются успешно, то считается, что внешний сервис восстановился и приложение переходит в замкнутое состояние. Если же хотя бы один из запросов не проходит, то приложение возвращается в разомкнутое состояние и таймер перезапускается, чтобы дать время внешнему сервису на восстановление.

В качестве реализации также подойдет библиотека Polly.


Вернуться в бэклог категории Паттерны