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.

Pak 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.

Zpracovatel požadavku prochází každou z těchto strategií v pořadí zleva doprava.

  • Celková strategie časového limitu žádosti: Nastaví se 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 časového limitu pokusu: Tato strategie nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento č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 předchozího kódu přidá standardní obslužnou rutinu odolnosti do HTTP klienta. Použijí se všechna výchozí nastavení pro strategie opakování a pro strategii 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, možnosti opakování způsobí výjimku. Jedná se o chybu, protože exponenciální nastavení zpětného ukončení by způsobilo, že celkový čas dokončení 10 opakování bude 2 046 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.
Typ odsunu 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 využívající strategii odolnosti

Sekvenční diagram znázorňuje, jak jednotlivé strategie spolupracují ve standardní strategii odolnosti. Na začátek, strategie celkového časového limitu řídí limitující faktor, který určuje, jak dlouho může žádost trvat. 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 pro pokusy nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento čas, vyvolá se výjimka.