Odolnost aplikací a infrastruktury

Dokončeno

Odolnost je schopnost obnovení z přechodných selhání. Strategie obnovení aplikace obnoví normální funkce 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 selháním rychlého a elegantního snížení výkonu. 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. Řádné snížení výkonu znamená, že aplikace se pokusí zachovat provoz v omezené kapacitě i v případě, že 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 nebo samoléčit před dopadem na 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ího snížení odolnosti: aplikací a infrastruktury. Každý přístup má své výhody a nevýhody. Vhodné mohou být oba přístupy, a to v závislosti na situaci. Tento modul vysvětluje, jak implementovat odolnost založenou na kódu i na infrastruktuře.

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 selhání. Microsoft.Extensions.Http.Resilience

Používá plynulou, snadno pochopitelné syntaxi k sestavení kódu pro zpracování selhání bezpečným způsobem s vlákny. Existuje několik zásad odolnosti, které definují chování zpracování selhání. V tomto modulu použijete strategie opakování a jističe na operace klienta HTTP.

Strategie opakování

Strategie opakování je přesně to, co název napovídá. Pokud je přijata chybová odpověď, opakuje se po krátkém čekání požadavek znovu. 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 zvolá 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 jističe

Strategie jističe dává cílové službě přestávku po opakovaném počtu selhání tím, že se s ní pokusíte komunikovat. 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í a otevřou okruh. Během tohoto čekání se další operace v cílové službě okamžitě nezdaří, aniž by se dokonce pokusily připojit službu. Po uplynutí doby čekání dojde k opětovnému pokusu o operaci. 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 sítě služby. Kromě odolnosti beze změny kódu nabízí 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 možností, které se přesunou do vrstvy infrastruktury.

Porovnání s přístupy založenými 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ává ke správě clusteru další dimenzi, nepřidává ale žádný kód.

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

  • Vyžaduje, abyste odhadli, jaké parametry opakování a časových limitů jsou vhodné.
  • Zaměřuje 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 požadavků, které se současně zpracovávají. Dokonce i opakování s exponenciálním zpomalením (počet požadavků) může službu zahltit.

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.