Implementowanie odporności aplikacji

Ukończone

Funkcje odporności platformy .NET są oparte na projekcie Polly i udostępniane za pośrednictwem Microsoft.Extensions. Możesz dodać standardową strategię odporności, która używa rozsądnych wartości domyślnych, dodając do aplikacji pojedynczy wiersz kodu.

Dodawanie odporności do aplikacji

Aby zwiększyć odporność aplikacji utworzonej przy użyciu architektury mikrousług, używając żądań HTTP między poszczególnymi usługami, wykonaj następujące kroki:

  1. Dodaj pakiet Microsoft.Extensions.Http.Resilience do projektu.
  2. Dodaj obsługę odpornościową do wywołań usługi HttpClient.
  3. Skonfiguruj strategię odporności.

Dodawanie pakietu NuGet do projektu

Uruchom następujące polecenie, aby dodać pakiet NuGet Resiliency.

dotnet add package Microsoft.Extensions.Http.Resilience

Uruchomienie tego polecenia z poziomu terminalu w folderze projektu w katalogu 'apps' spowoduje dodanie odwołania do pakietu do pliku projektu.

Następnie dodaj następującą instrukcję using w klasie startowej aplikacji:

using Microsoft.Extensions.Http.Resilience;

Dodawanie strategii odporności

Teraz możesz dodać standardową strategię odporności do usługi HttpClient. Platforma .NET udostępnia tę wbudowaną konfigurację łączącą szereg strategii.

Diagram przedstawiający strategie zawarte w Standardowym Zarządcy Odporności. W tym ogólny limit czasu, ponawianie prób, grodzenie, wyłącznik obwodu oraz limit czasu próby.

Procedura obsługi żądań przechodzi przez każdą z tych strategii w kolejności od lewej do prawej:

  • Łączna strategia limitu czasu żądania: określa całkowity czas, który może zająć żądanie. Można to traktować jako ustawienie górnego limitu czasu dla wszystkich innych strategii.
  • strategia ponawiania prób: ta strategia steruje opcjami liczby ponownych prób, wycofywania i trząsania. Te opcje nie mogą przekraczać łącznego limitu czasu ustawionego w poprzedniej strategii.
  • strategia wyłącznika obwodu: ta strategia otwiera obwód, jeśli współczynnik awarii przekracza próg.
  • Strategia przekroczenia limitu czasu próby: ta strategia określa limit czasu dla każdego pojedynczego żądania. Jeśli żądanie trwa dłużej niż ten czas, zostanie zgłoszony wyjątek.

Tę strategię standardową można dodać ze wszystkimi wartościami domyślnymi, dodając tę metodę rozszerzenia:

.AddStandardResilienceHandler();

Na przykład, jeśli zadeklarowałeś WebApplicationi chcesz dodać strategię odporności do usługi HttpClient, skorzystaj z następującego kodu:

builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
    httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();

Pierwsza linia poprzedniego kodu dodaje standardowy mechanizm obsługi odporności do klienta HTTP. Spowoduje to użycie wszystkich domyślnych ustawień strategii ponawiania prób i wyłącznika.

Konfigurowanie strategii odporności

Możesz zmienić wartości domyślne dowolnej strategii, określając nowe opcje, na przykład:

.AddStandardResilienceHandler( options => 
{  
    options.RetryOptions.RetryCount = 10;
    options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});

Ten kod zmienia domyślną strategię ponawiania prób, aby mieć maksymalną liczbę ponowień 10, zastosować liniowe opóźnienie i ustawić podstawowe opóźnienie na 1 sekundę.

Wybrane opcje muszą być ze sobą zgodne. Jeśli na przykład całkowity czas pozostanie na domyślnym poziomie 30 sekund, spowoduje to wystąpienie wyjątku przy opcjach ponawiania. Jest to błąd, ponieważ ustawienie wycofywania wykładniczego spowodowałoby całkowity czas ukończenia 10 ponownych prób wynoszący 2046 sekund. Jest to wyjątek środowiska uruchomieniowego, a nie błąd czasu kompilacji.

W poniższej tabeli wymieniono opcje dostępne dla każdej ze strategii.

Łączna liczba opcji limitu czasu żądania Opis
Całkowity limit czasu Łączny czas, jaki może zająć żądanie. Wartość domyślna to 30 sekund.
OnTimeout Funkcja wywołania zwrotnego, która jest wywoływana, kiedy upłynie limit czasu żądania. Wartość domyślna to null.

Opcje ponawiania prób Opis
LiczbaPonownychPrób Maksymalna liczba ponownych prób. Wartość domyślna to 3.
Typ wycofywania Typ odstąpienia do zastosowania. Można wybrać między liniowym a wykładniczym. Wartość domyślna to funkcja wykładnicza.
Użyj Jittera Czy dodać losowość do algorytmu wycofywania. Funkcja Jitter dodaje losowość do opóźnienia, aby zmniejszyć wzrost obciążenia. Wartość domyślna to true.
BaseDelay Opóźnienie między próbami. Wartość domyślna to 2 sekundy.

Opcje wyłącznika Opis
Czas trwania przerwy Czas trwania przerwy w obwodzie. Wartość domyślna to 5 sekund.
Wskaźnik awaryjności Stosunek żądań zakończonych niepowodzeniem do żądań zakończonych powodzeniem, które spowodują otwarcie obwodu. Wartość domyślna to 0.1.
CzasPróbkowania Czas trwania obliczanego współczynnika awarii. Wartość domyślna to 30 sekund.
OnClosed Funkcja wywołania zwrotnego wywoływana podczas zamykania obwodu. Wartość domyślna to null.
PołowicznieOtwarty Funkcja zwrotna, która jest uruchamiana, gdy obwód jest w połowie otwarty. Wartość domyślna to null.
OnOpened Funkcja wywołania zwrotnego wywoływana podczas otwierania obwodu. Wartość domyślna to null.

Opcje dotyczące limitu czasu prób Opis
Koniec czasu Czas, jaki może zająć żądanie. Wartość domyślna to 2 sekundy.
OnTimeout Funkcja wywołania zwrotnego, która jest wywoływana, kiedy upłynie limit czasu żądania. Wartość domyślna to null.

Diagram sekwencji przedstawiający przepływ zdarzeń w aplikacji przy użyciu strategii odporności.

Diagram sekwencji pokazuje, jak poszczególne strategie współpracują ze sobą w standardowej strategii odporności. Na początek strategia całkowitego limitu czasu kontroluje czynnik ograniczający czas trwania żądania. Następnie należy ustawić strategię ponawiania prób, aby mieć maksymalną liczbę ponownych prób, która zostanie ukończona w ramach łącznego limitu czasu. Strategia wyłącznika otworzy obwód, jeśli współczynnik awarii przekroczy próg ustawiony dla niego. Strategia limitu czasu próby określa limit czasu dla każdego pojedynczego żądania. Jeśli żądanie trwa dłużej niż ten czas, zostanie zgłoszony wyjątek.