Odolnost aplikací a infrastruktury

Dokončeno

Odolnost je schopnost zotavit se z přechodných selhání. Strategie obnovení aplikace obnoví normální funkci s minimálním dopadem na uživatele. K selháním může dojít v cloudových prostředích a vaše aplikace by měla reagovat způsobem, který minimalizuje výpadky a ztrátu dat. V ideální situaci vaše aplikace zpracovává chyby elegantně bez toho, aby uživatel věděl, že došlo k problému.

Vzhledem k tomu, že prostředí mikroslužeb můžou být nestálá, navrhněte aplikace tak, aby očekávaly a zvládly částečné selhání. Částečné selhání může například zahrnovat výjimky kódu, výpadky sítě, nereagující procesy serveru nebo selhání hardwaru. I plánované aktivity, jako je přesun kontejnerů do jiného uzlu v clusteru Kubernetes, můžou způsobit přechodné selhání.

Přístupy k odolnosti

Při navrhování odolných aplikací si často musíte vybrat mezi rychlým selháním a elegantním snižováním funkcionality. Když dojde k chybě, znamená to, že aplikace okamžitě vyvolá chybu nebo výjimku, když se něco nepovede, místo aby se pokusila problém obnovit nebo obejít. To umožňuje rychle identifikovat a opravit problémy. Postupná degradace znamená, že aplikace se bude snažit pokračovat v provozu i v omezené kapacitě, když některá komponenta selže.

V aplikacích nativních pro cloud je důležité, aby služby zpracovávaly chyby elegantně, místo aby selhály rychle. Vzhledem k tomu, že mikroslužby jsou decentralizované a nezávisle nasaditelné, očekává se částečná selhání. Když selháváte rychle, umožní selhání v jedné službě rychle snížit závislé služby, což snižuje celkovou odolnost systému. Místo toho by měly být mikroslužby kódované tak, aby předvídaly a tolerovat selhání interních i externích služeb. Toto řádné snížení výkonu umožňuje celkovému systému pokračovat v provozu i v případě, že dojde k narušení některých služeb. Důležité uživatelsky přístupné funkce je možné udržovat a vyhnout se tak úplnému výpadku. Graceful failure také umožňuje narušeným službám čas obnovit se nebo zotavit se dříve, než ovlivní zbytek systému. V případě aplikací založených na mikroslužbách je tedy řádné snížení výkonu lépe v souladu s osvědčenými postupy odolnosti, jako je izolace chyb a rychlé obnovení. Brání tomu, aby místní incidenty v celém systému kaskádovaly.

Existují dva základní přístupy k podpoře elegantní degradace s odolností: aplikace a infrastruktura. Každý přístup má výhody a nevýhody. Oba přístupy můžou být vhodné v závislosti na situaci. Tento modul vysvětluje, jak implementovat odolnost jak založenou na bázi kódu , tak na bázi infrastruktury .

Odolnost založená na kódu

Pro implementaci odolnosti založené na kódu má .NET knihovnu rozšíření pro odolnost a zpracování přechodných chyb Microsoft.Extensions.Http.Resilience.

Používá plynulou a snadno pochopitelnou syntaxi k sestavení kódu pro zpracování selhání způsobem zajišťujícím bezpečnost při práci s vlákny. Existuje několik zásad odolnosti, které definují chování při zpracování selhání. V tomto modulu aplikujete strategie Retry a Circuit Breaker na operace HTTP klienta.

Strategie opakování

Strategie opakování je přesně to, co název napovídá. Požadavek se po krátkém čekání opakuje, pokud se zobrazí chybová odpověď. Doba čekání se zvyšuje při každém opakování. Zvýšení může být lineární nebo exponenciální.

Po dosažení maximálního počtu opakování se strategie vzdá a vyvolá výjimku. Z pohledu uživatele aplikace obvykle trvá delší dobu, než dokončí některé operace. Aplikace může také nějakou dobu trvat, než uživatele informuje, že operaci nemohl dokončit.

Strategie přerušovače obvodů

Strategie jističe poskytuje cílové službě přestávku po několika opakovaných neúspěších tím, že pozastaví pokusy o komunikaci s ní. Služba může mít závažný problém a dočasně nemůže reagovat. Po definovaném počtu po sobě jdoucích selhání se pokusy o připojení pozastaví, otevření okruhu. Během tohoto čekání se další operace v cílové službě okamžitě nezdaří, aniž by se vůbec pokusily připojit k službě. Po uplynutí doby čekání se operace pokusí provést znovu. Pokud služba úspěšně reaguje, okruh se zavře a systém se vrátí zpět do normálu.

Odolnost založená na infrastruktuře

K implementaci odolnosti založené na infrastruktuře můžete použít service mesh. Kromě odolnosti beze změny kódu poskytuje síť služeb správu provozu, zásady, zabezpečení, silnou identitu a pozorovatelnost. Vaše aplikace je oddělená od těchto provozních funkcí, které se přesunou do vrstvy infrastruktury.

Porovnání přístupů založených na kódu

Přístup založený na odolnosti na základě infrastruktury může používat zobrazení založené na metrikách, které umožňuje dynamicky se přizpůsobovat podmínkám clusteru v reálném čase. Tento přístup přidá další dimenzi pro správu clusteru, ale nepřidá žádný kód.

S přístupem založeným na kódu můžete:

  • Je potřeba odhadnout, které parametry opakování a časového limitu jsou vhodné.
  • Zaměřte se na konkrétní požadavek HTTP.

Neexistuje žádný rozumný způsob, jak reagovat na selhání infrastruktury v kódu vaší aplikace. Vezměte v úvahu stovky nebo tisíce žádostí, které se zpracovávají současně. Dokonce i opakování s exponenciálním oddálením (úměrně počtu pokusů o žádost) může přetížit službu.

Naproti tomu přístupy založené na infrastruktuře neznají o interních aplikacích. Například složité databázové transakce jsou pro sítě služeb neviditelné. Takové transakce lze chránit pouze před selháním pomocí přístupu založeného na kódu.

V nadcházejících lekcích implementujete odolnost aplikace založené na mikroslužbách pomocí odolnosti protokolu HTTP .NET v kódu a sítě služby Linkerd.