Implementace odolnosti aplikací

Dokončeno

Funkce odolnosti rozhraní .NET jsou založené na projektu Polly a jsou dostupné prostřednictvím Microsoft.Extensions. Můžete přidat standardní strategii odolnosti, která používá rozumné výchozí hodnoty, a to přidáním jednoho řádku kódu do aplikace.

Přidání odolnosti do aplikace

Pokud chcete do aplikace vytvořené pomocí architektury mikroslužeb přidat odolnost, použijte požadavky HTTP mezi jednotlivými službami takto:

  1. Přidejte do projektu balíček Microsoft.Extensions.Http.Resilience.
  2. Přidejte mechanismus odolnosti do volání služby HttpClient.
  3. Nakonfigurujte strategii odolnosti.

Přidání balíčku NuGet do projektu

Spuštěním následujícího příkazu přidejte balíček NuGet odolnosti:

dotnet add package Microsoft.Extensions.Http.Resilience

Spuštěním tohoto příkazu z terminálu ve složce projektu aplikací přidáte odkaz na balíček do souboru projektu.

Do spouštěcí třídy vaší aplikace přidejte následující příkaz using:

using Microsoft.Extensions.Http.Resilience;

Přidání strategie odolnosti

Do služby HttpClient teď můžete přidat standardní strategii odolnosti. .NET poskytuje tuto předdefinovanou konfiguraci, která kombinuje řadu strategií.

Diagram znázorňující strategie zahrnuté v obslužné rutině standardní odolnosti. Od celkového časového limitu, opakování, bulkheadu (přepážky), jističe a vypršení časového limitu pokusu.

Obslužná rutina požadavku prochází každou z výše uvedených strategií v pořadí odleva doprava:

  • strategie celkového časového limitu požadavku: Tím se nastaví celková doba, kterou může žádost trvat. Můžete si to představit jako nastavení horního časového limitu pro všechny ostatní strategie.
  • strategie opakování: Tato strategie řídí možnosti týkající se počtu opakování, zpoždění a náhodného rozptylu. Tyto možnosti nemůžou překročit celkový časový limit nastavený v předchozí strategii.
  • Strategie vypínače: Tato strategie přeruší okruh, pokud poměr selhání překročí prahovou hodnotu.
  • strategie vypršení časového limitu: Tato strategie nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle než stanovený čas, vyvolá se výjimka.

Tuto standardní strategii můžete přidat se všemi výchozími hodnotami přidáním této metody rozšíření:

.AddStandardResilienceHandler();

Pokud jste například deklarovali WebApplicationa chcete do služby HttpClient přidat strategii odolnosti, použijte tento kód:

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

První řádek výše uvedeného kódu přidá standardní obslužnou rutinu odolnosti do klienta HTTP. Použije se všechna výchozí nastavení pro strategie opakování a jističe.

Konfigurace strategie odolnosti

Výchozí hodnoty jakékoli strategie můžete změnit zadáním nových možností, například:

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

Tento kód změní výchozí strategii opakování tak, aby měla maximální počet vyřazení z provozu 10, aby bylo možné použít lineární zpětné ukončení a použít základní zpoždění 1 sekundu.

Možnosti, které zvolíte, musí být vzájemně kompatibilní. Pokud například celkový čas zůstane ve výchozím nastavení 30 sekund, výše uvedené možnosti opakování způsobí výjimku. Jedná se o chybu, protože exponenciální nastavení zpětného kroku by způsobilo, že celkový čas na dokončení 10 opakovaných pokusů by byl 2046 sekund. Jedná se o výjimku za běhu, ne o chybu v době kompilace.

V následující tabulce jsou uvedeny možnosti dostupné pro jednotlivé strategie.

Celkové možnosti časového limitu požadavku Popis
Celkový Časový Limit Celková doba, po kterou může žádost trvat. Výchozí hodnota je 30 sekund.
OnTimeout Funkce zpětného volání, která se vyvolá při vypršení časového limitu požadavku. Výchozí hodnota je null.

Možnosti opakování Popis
Počet opakování Maximální počet opakování. Výchozí hodnota je 3.
BackoffType Typ zpomalení, který se má použít. Můžete si vybrat mezi lineárním a exponenciálním. Výchozí hodnota je exponenciální.
UseJitter Zda přidat jitter k časovému zpoždění. Jitter přidává ke zpoždění náhodnost, která pomáhá snížit špičky zatížení. Výchozí hodnota je true.
BaseDelay Zpoždění mezi opakovanými pokusy. Výchozí hodnota je 2 sekundy.

Možnosti jističe Popis
DélkaPřestávky Doba trvání přerušení okruhu. Výchozí hodnota je 5 sekund.
Poměr selhání Poměr neúspěšných požadavků na úspěšné žádosti, které otevřou okruh. Výchozí hodnota je 0,1.
DobaVzorkování Doba, po kterou se vypočítá poměr selhání. Výchozí hodnota je 30 sekund.
OnClosed Funkce zpětného volání, která se vyvolá při zavření okruhu. Výchozí hodnota je null.
NapůlOtevřeno Funkce zpětného volání, která se vyvolá, když je okruh napůl otevřený. Výchozí hodnota je null.
OnOpened Funkce zpětného volání, která se vyvolává při otevření okruhu. Výchozí hodnota je null.

Možnosti vypršení časového limitu pokusu Popis
Přerušení zápasu Doba, po kterou může žádost trvat. Výchozí hodnota je 2 sekundy.
OnTimeout Funkce zpětného volání, která se vyvolá při vypršení časového limitu požadavku. Výchozí hodnota je null.

Sekvenční diagram znázorňující tok událostí v aplikaci pomocí strategie odolnosti.

Výše uvedený sekvenční diagram ukazuje, jak jednotlivé strategie spolupracují ve standardní strategii odolnosti. Nejprve se zaměřte na limitující faktor, jak dlouho může požadavek trvat, což je řízeno celkovou strategií časového limitu. Strategie opakování se pak musí nastavit tak, aby měla maximální počet opakování, které se dokončí v rámci celkového časového limitu. Strategii jističe otevře obvod, pokud součinitel selhání překročí nastavenou prahovou hodnotu. Strategie časového limitu pokusu nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je stanovená doba, vyvolá se výjimka.