Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jótanács
Ez a tartalom a „Az Azure-hoz készült natív felhőalapú .NET-alkalmazások tervezése” című eBookból egy részlet, amely elérhető a .NET Docs oldalán, vagy ingyenesen letölthető PDF fájlként, amely offline módban is olvasható.
Az első védelmi vonal az alkalmazás rugalmassága.
Bár jelentős időt fordíthat a saját rugalmassági keretrendszerének megírására, az ilyen termékek már léteznek.
A Polly egy átfogó .NET-rugalmassági és átmeneti hibakezelési kódtár, amely lehetővé teszi, hogy a fejlesztők folyékonyan és szálbiztosan fejezzék ki a rugalmassági szabályzatokat. A Polly a .NET-keretrendszerrel vagy .NET 7-tel készült alkalmazásokat célozza. Az alábbi táblázat a Polly Könyvtárban elérhető rugalmassági funkciókat policiesismerteti. Ezek egyénileg vagy csoportosítva is alkalmazhatók.
| Politika | Élmény |
|---|---|
| Újrapróbál | Újrapróbálkozási műveleteket konfigurál a kijelölt műveleteken. |
| Megszakító | Letiltja a kért műveleteket egy előre meghatározott időszakban, ha a hibák túllépik a konfigurált küszöbértéket |
| Időkorlát | A helyek azt az időtartamot korlátozzák, amelyre a hívó várni tud a válaszra. |
| válaszfal | Korlátozza a műveleteket egy rögzített méretű erőforráskészletre, hogy a hibás hívások ne árasszák el az erőforrást. |
| Gyorsítótár | Automatikusan tárolja a válaszokat. |
| Tartalék | Strukturált viselkedést határoz meg egy hiba esetén. |
Figyelje meg, hogy az előző ábrán a rugalmassági szabályzatok hogyan vonatkoznak a kérési üzenetekre, akár külső ügyfélről, akár háttérszolgáltatásról származnak. A cél egy olyan szolgáltatás kérésének kompenzálása, amely pillanatnyilag nem érhető el. Ezek a rövid élettartamú megszakítások általában az alábbi táblázatban látható HTTP-állapotkódokkal jelentkeznek.
| HTTP-állapotkód | Oka |
|---|---|
| 404 | Nem található |
| 408 | Kérés-időtúllépés |
| 429 | Túl sok kérés (valószínűleg korlátozva lett) |
| 502 | Rossz átjáró |
| 503 | A szolgáltatás nem érhető el |
| 504 | Átjáró időkorlát túllépés |
Kérdés: Újrapróbálkozna egy 403-ból álló HTTP-állapotkóddal – Tiltott? Nem. Itt a rendszer megfelelően működik, de tájékoztatja a hívót, hogy nem jogosult a kért művelet végrehajtására. Ügyeljen arra, hogy csak a hibák által okozott műveleteket próbálkozzon újra.
Az 1. fejezetben leírtaknak megfelelően a felhőalapú natív alkalmazásokat készítő Microsoft-fejlesztőknek a .NET-platformot kell céloznia. A 2.1-es verzió bevezette a HTTPClientFactory kódtárat, amely HTTP-ügyfélpéldányokat hoz létre az URL-alapú erőforrások használatához. Az eredeti HTTPClient-osztály helyett a gyári osztály számos továbbfejlesztett funkciót támogat, amelyek közül az egyik a Polly rugalmassági kódtára szoros integrációja . Ezzel egyszerűen definiálhat rugalmassági szabályzatokat az alkalmazás indítási osztályában a részleges hibák és a csatlakozási problémák kezeléséhez.
Következő lépésként bontsuk ki az újrapróbálkozási és az áramkör-megszakító mintákat.
Újrapróbálkozási minta
Elosztott felhőbeli natív környezetben a szolgáltatásokhoz és a felhőbeli erőforrásokhoz intézett hívások átmeneti (rövid élettartamú) hibák miatt meghiúsulhatnak, amelyek általában rövid idő elteltével javítják magukat. Az újrapróbálkozási stratégia megvalósítása segít a natív felhőszolgáltatásnak enyhíteni ezeket a forgatókönyveket.
Az újrapróbálkozási minta lehetővé teszi, hogy a szolgáltatás exponenciálisan növekvő várakozási idő mellett (konfigurálható) hányszor próbálkozzon újra egy sikertelen kérelemművelettel. A 6–2. ábrán egy újrapróbálkozás látható működés közben.
6-2. ábra. Újrapróbálkozási minta gyakorlatban
Az előző ábrán egy újrapróbálkozási minta lett implementálva egy kérelemművelethez. Úgy van konfigurálva, hogy legfeljebb négy újrapróbálkozást engedélyezzen, mielőtt két másodperctől kezdődő visszalépési intervallummal (várakozási idővel) meghiúsul, ami exponenciálisan duplázódik minden további kísérletnél.
- Az első hívás sikertelen, és egy 500-os HTTP-állapotkódot ad vissza. Az alkalmazás két másodpercig várakozik, és újrapróbálkozza a hívást.
- A második meghívás is meghiúsul, és egy 500-ból álló HTTP-állapotkódot ad vissza. Az alkalmazás most megduplázza a visszalépési időközt négy másodpercre, és újrapróbálkozza a hívást.
- Végül a harmadik hívás sikeres lesz.
- Ebben a forgatókönyvben az újrapróbálkozási művelet legfeljebb négy újrapróbálkozást kísérelt volna meg, miközben megduplázta a visszalépés időtartamát, mielőtt a hívás meghiúsulna.
- Ha a 4. újrapróbálkozási kísérlet sikertelen lenne, a rendszer tartalék szabályzatot hívna meg a probléma elegáns kezelésére.
Fontos, hogy a hívás újrapróbálkozása előtt növelje a várakozási időszakot, hogy a szolgáltatásnak ideje legyen az önkorrekcióra. Ajánlott eljárás a megfelelő korrekciós idő biztosítása érdekében exponenciálisan növekvő visszalépés implementálása (az egyes újrapróbálkozási időszakok megduplázása).
Áramköri megszakító minta
Bár az újrapróbálkozási minta segíthet a részleges hiba által összefonódott kérések mentésében, vannak olyan helyzetek, amikor a hibákat nem várt események okozhatják, amelyek megoldásához hosszabb idő szükséges. Az ilyen hibák súlyossága a részleges kapcsolódási problémától a szolgáltatás teljes leállásáig terjedhet. Ezekben az esetekben értelmetlen, ha egy alkalmazás folyamatosan újrapróbálkozott egy olyan művelettel, amely nem valószínű, hogy sikeres lesz.
A helyzet rosszabbá tétele érdekében a folyamatos újrapróbálkozási műveletek végrehajtása egy nem válaszadó szolgáltatáson átmozdíthat egy önkiterjedt szolgáltatásmegtagadási forgatókönyvbe, ahol a szolgáltatás folyamatos hívásokkal árasztja el az erőforrásokat, például a memóriát, a szálakat és az adatbázis-kapcsolatokat, ami a rendszer ugyanazon erőforrásokat használó, nem kapcsolódó részeinek meghibásodását okozza.
Ezekben az esetekben célszerűbb, ha a művelet azonnal meghiúsul, és csak akkor próbálja meg meghívni a szolgáltatást, ha az valószínűleg sikeres lesz.
Az áramkör-megszakító minta megakadályozhatja, hogy egy alkalmazás ismétlődően megkíséreljen végrehajtani egy valószínűleg sikertelen műveletet. Egy előre meghatározott számú sikertelen hívás után letiltja a szolgáltatás felé irányuló összes forgalmat. Rendszeres időközönként lehetővé teszi a próbahívást annak megállapítására, hogy a hiba megoldódott-e. A 6–3. ábrán a megszakító minta látható működés közben.
6-3. ábra. Áramkör-megszakító séma működés közben
Az előző ábrán az eredeti újrapróbálkozási séma mellé egy körmegszakító séma került hozzáadásra. Figyelje meg, hogy 100 sikertelen kérés után a megszakítók megnyílnak, és többé nem engedélyezik a hívásokat a szolgáltatás felé. A 30 másodpercre beállított CheckCircuit érték azt határozza meg, hogy a kódtár milyen gyakran engedélyezi egy kérésnek a szolgáltatásba való továbblépését. Ha a hívás sikeres, a kapcsolatcsoport bezárul, és a szolgáltatás ismét elérhető a forgalom számára.
Ne feledje, hogy az Áramkör-megszakító mintázat szándéka eltér az Újrapróbálkozási mintázatétól. Az újrapróbálkozási minta lehetővé teszi, hogy az alkalmazás újrapróbálkozjon egy műveletet abban a reményben, hogy sikeres lesz. Az áramkör-megszakító minta megakadályozza, hogy egy alkalmazás olyan műveletet hajtson végre, amely valószínűleg sikertelen lesz. Az alkalmazások általában ezt a két mintát egyesítik az Újrapróbálkozási mintával egy művelet áramkör-megszakítón keresztüli meghívásához.
A rugalmasság tesztelése
A rugalmasság tesztelése nem mindig ugyanúgy végezhető el, mint az alkalmazás funkcióinak tesztelése (egységtesztek, integrációs tesztek stb. futtatásával). Ehelyett tesztelnie kell, hogy a teljes körű számítási feladat hogyan teljesít meghibásodási körülmények között, ami csak időszakosan történik. Például: hibák injektálása folyamatok összeomlásával, lejárt tanúsítványok, függő szolgáltatások elérhetetlenné tétele stb. Az ilyen káosztesztekhez olyan keretrendszerek használhatók, mint a káoszmajom .
Az alkalmazás rugalmassága elengedhetetlen a problémás kért műveletek kezeléséhez. De ez csak a történet fele. A következőkben az Azure-felhőben elérhető rugalmassági funkciókat tárgyaljuk.