0Pricing
C# Academy · Lekcja

Wzorzec circuit breaker

Tymczasowo przestań wywoływać usługi, które ulegają awariom.

Wzorzec circuit breaker to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

Problem, którego ponawianie nie rozwiąże

Jeśli zależność rzeczywiście nie działa, ponawianie każdego żądania tylko zwiększa obciążenie i spowalnia własną aplikację. Wzorzec circuit breaker wykrywa utrzymujące się awarie i na pewien czas przestaje wywoływać niesprawną usługę.

Czerpanie z elektroniki

Podobnie jak wyłącznik elektryczny, który rozłącza obwód, aby go ochronić, ten wzorzec „otwiera się” po zbyt wielu awariach, a następnie automatycznie sprawdza, czy zależność odzyskała sprawność.

Trzy stany

Circuit breaker ma trzy stany: Closed (wywołania przebiegają normalnie), Open (wywołania są natychmiast blokowane) oraz Half-Open (próba testowa sprawdza, czy działanie zostało przywrócone).

Stan Closed

W stanie Closed żądania są przepuszczane, a Polly śledzi współczynnik awarii. Jeśli w oknie próbkowania liczba awarii przekroczy próg, circuit breaker przechodzi do stanu Open.

Stan Open

W stanie Open Polly stosuje mechanizm short-circuit: natychmiast zgłasza BrokenCircuitException, nie wywołując zależności. Daje jej to czas na odzyskanie sprawności i pozwala szybko kończyć wywołania po stronie klienta.

try
{
    await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
    // circuit is open, fail fast
}

Stan Half-Open

Po upływie czasu rozłączenia circuit breaker przechodzi do stanu Half-Open i zezwala na żądanie testowe. Powodzenie zamyka obwód, a niepowodzenie ponownie go otwiera na kolejny okres rozłączenia.

Konfigurowanie circuit breakera

Polly v8 używa obiektu CircuitBreakerStrategyOptions. Najważniejsze ustawienia to: FailureRatio, na przykład 0.5 = 50%, MinimumThroughput, SamplingDuration i 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 i MinimumThroughput

FailureRatio to proporcja awarii, która powoduje zadziałanie circuit breakera. MinimumThroughput gwarantuje, że circuit breaker zadziała dopiero po wystąpieniu odpowiedniej liczby wywołań, dzięki czemu pojedyncza wczesna awaria nie otworzy go przedwcześnie.

Reagowanie na zmiany stanu

Użyj wywołań zwrotnych OnOpened, OnClosed i OnHalfOpened, aby rejestrować zmiany stanu lub wysyłać alerty, gdy zależność zaczyna działać gorzej.

new CircuitBreakerStrategyOptions
{
    FailureRatio = 0.5,
    OnOpened = args =>
    {
        Console.WriteLine($"Circuit opened for {args.BreakDuration}");
        return default;
    }
};

Łączenie z ponawianiem

Ponawianie i circuit breaker uzupełniają się: ponawianie obsługuje krótkotrwałe zakłócenia, a circuit breaker przerywa ponawianie, gdy awarie utrzymują się dłużej. Kolejność ma znaczenie — wrócimy do niej w lekcji o potokach.

Sterowanie ręczne

Możesz przechowywać obiekt CircuitBreakerManualControl, aby ręcznie odizolować circuit breaker, wymuszając jego otwarcie, lub go zamknąć. Jest to przydatne podczas okien serwisowych.

var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync();   // force closed

Szybki test

Przetestuj wzorzec circuit breaker.

Podsumowanie

Circuit breaker chroni przeciążone zależności, przechodząc między stanami Closed, Open i Half-Open. W Polly v8 metoda AddCircuitBreaker wraz z ustawieniami FailureRatio, MinimumThroughput, SamplingDuration i BreakDuration steruje jego zadziałaniem. Stan Open zgłasza BrokenCircuitException, aby szybko kończyć wywołania, a wywołania zwrotne i ręczne sterowanie umożliwiają obserwowanie oraz nadpisywanie stanu.

Często zadawane pytania

Czy lekcja „Wzorzec circuit breaker” jest bezpłatna?

Tak — pełny tekst „Wzorzec circuit breaker” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorzec circuit breaker”?

Tymczasowo przestań wywoływać usługi, które ulegają awariom. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wzorzec circuit breaker”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zasady ponawiania prób
  2. Wzorzec circuit breaker
  3. Zasady limitu czasu i wartości zastępczych
  4. Potoki odporności
← Powrót do C# Academy