Шаблон автоматического размыкателя
Временно прекращайте вызовы неисправных служб.
«Шаблон автоматического размыкателя» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Проблема, которую не решают повторные попытки
Если зависимость действительно недоступна, повторение каждого запроса лишь увеличивает нагрузку и замедляет ваше приложение. Шаблон автоматического выключателя обнаруживает длительные сбои и на некоторое время прекращает вызовы неисправной службы.
Заимствование из электроники
Подобно электрическому автоматическому выключателю, который срабатывает для защиты цепи, этот шаблон «размыкается» после слишком большого числа сбоев, а затем автоматически проверяет, восстановилась ли зависимость.
Три состояния
Автоматический выключатель имеет три состояния: Замкнутое (вызовы выполняются нормально), Разомкнутое (вызовы немедленно блокируются) и Полуоткрытое (пробный вызов проверяет восстановление).
Замкнутое состояние
В замкнутом состоянии запросы проходят, а Polly отслеживает частоту ошибок. Если в течение окна выборки доля ошибок превышает порог, автоматический выключатель переходит в разомкнутое состояние.
Разомкнутое состояние
В разомкнутом состоянии Polly немедленно разрывает вызов: выбрасывает BrokenCircuitException без обращения к зависимости, давая ей время на восстановление и обеспечивая быстрое завершение вызовов с ошибкой.
try
{
await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
// circuit is open, fail fast
}Полуоткрытое состояние
После истечения времени размыкания автоматический выключатель переходит в полуоткрытое состояние и разрешает пробный запрос. Успех замыкает цепь, а ошибка снова размыкает её на следующий период.
Настройка автоматического выключателя
В Polly v8 используется CircuitBreakerStrategyOptions. Основные настройки: FailureRatio (например, 0.5 = 50%), MinimumThroughput, SamplingDuration и BreakDuration.
using Polly.CircuitBreaker;
var pipeline = new ResiliencePipelineBuilder()
.AddCircuitBreaker(new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
MinimumThroughput = 10,
SamplingDuration = TimeSpan.FromSeconds(30),
BreakDuration = TimeSpan.FromSeconds(15)
})
.Build();FailureRatio и MinimumThroughput
FailureRatio — это доля ошибок, при которой срабатывает автоматический выключатель. MinimumThroughput гарантирует, что выключатель сработает только после достаточного числа вызовов, поэтому одна ранняя ошибка не разомкнёт его преждевременно.
Реакция на изменения состояния
Используйте функции обратного вызова OnOpened, OnClosed и OnHalfOpened, чтобы записывать переходы в журнал или отправлять предупреждения при ухудшении состояния зависимости.
new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
OnOpened = args =>
{
Console.WriteLine($"Circuit opened for {args.BreakDuration}");
return default;
}
};Объединение с повторными попытками
Повторные попытки и автоматический выключатель дополняют друг друга: повторные попытки обрабатывают кратковременные сбои, а выключатель прекращает повторные попытки, если сбои становятся длительными. Порядок важен — мы ещё вернёмся к этому на уроке о конвейерах.
Ручное управление
Вы можете хранить экземпляр CircuitBreakerManualControl, чтобы вручную изолировать (принудительно разомкнуть) или замкнуть автоматический выключатель; это полезно на время технического обслуживания.
var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync(); // force closedБыстрая проверка
Проверьте свои знания о шаблоне автоматического выключателя.
Итоги
Автоматический выключатель защищает испытывающие трудности зависимости, переходя между состояниями Замкнутое, Разомкнутое и Полуоткрытое. В Polly v8 AddCircuitBreaker вместе с настройками FailureRatio, MinimumThroughput, SamplingDuration и BreakDuration управляет срабатыванием выключателя. В разомкнутом состоянии выбрасывается BrokenCircuitException для быстрого завершения с ошибкой, а функции обратного вызова и ручное управление позволяют отслеживать состояние и переопределять его.
Часто задаваемые вопросы
Урок «Шаблон автоматического размыкателя» бесплатный?
Да — полный текст урока «Шаблон автоматического размыкателя» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Шаблон автоматического размыкателя»?
Временно прекращайте вызовы неисправных служб. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Шаблон автоматического размыкателя»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Политики повторных попыток
- Шаблон автоматического размыкателя
- Политики тайм-аутов и резервных вариантов
- Конвейеры отказоустойчивости