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 balíček Microsoft.Extensions.Http.Resilience do projektu.
  2. Přidejte obslužnou rutinu 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ředefinované konfiguraci, která kombinuje řadu strategií.

A diagram showing the strategies included in the Standard Resilience Handler. From overall timeout, retry, bulkhead, circuit breaker, and attempt timeout.

Obslužná rutina požadavku prochází každou z výše uvedených strategií v pořadí odleva 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 počtu opakování, opakování a zpoždění. Tyto možnosti nemůžou překročit celkový časový limit nastavený v předchozí strategii.
  • Strategie jističe: Tato strategie otevře okruh, pokud poměr selhání překročí prahovou hodnotu.
  • Strategie vypršení časového limitu pokusu: Tato strategie nastavuje č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 WebApplication, a 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á do HTTPClient standardní obslužnou rutinu odolnosti. 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 ukončení by způsobilo celkový čas dokončení 10 opakovaných pokusů o 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
TotalTimeout 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
RetryCount Maximální počet opakování. Výchozí hodnota je 3.
BackoffType Typ zpětného odvrácení, 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 do zpoždí. 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
BreakDuration Doba trvání přerušení okruhu. Výchozí hodnota je 5 sekund.
FailureRatio Poměr neúspěšných požadavků na úspěšné žádosti, které otevřou okruh. Výchozí hodnota je 0,1.
SamplingDuration 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.
OnHalfOpened 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á při otevření okruhu. Výchozí hodnota je null.

Možnosti vypršení časového limitu pokusu Popis
Timeout 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.

A sequence diagram showing the flow of events in an application using a resiliency strategy.

Výše uvedený sekvenční diagram ukazuje, jak jednotlivé strategie spolupracují ve standardní strategii odolnosti. Pokud chcete začít limitovacím faktorem, jak dlouho může požadavek trvat, řídí se celková strategie č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. Strategie jističe otevře okruh, pokud poměr selhání překročí prahovou hodnotu nastavenou pro něj. Strategie časového limitu pokusu nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento čas, vyvolá se výjimka.