Ha távoli szolgáltatáshoz vagy erőforráshoz csatlakozik, kezelheti azokat a hibákat, amelyek helyreállítása esetleg sok időt venne igénybe. Ez a minta javíthatja az alkalmazások stabilitását és rugalmasságát.
Kontextus és probléma
Elosztott környezetben a távoli erőforrásokra és szolgáltatásokra irányuló hívások átmeneti hibák, például lassú hálózati kapcsolatok, időtúllépések vagy túlkomponált vagy ideiglenesen elérhetetlen erőforrások miatt meghiúsulhatnak. Ezek a hibák általában rövid idő alatt kijavítják magukat, és egy stabil felhőalapú alkalmazásnak fel kell készülnie az ilyesmi kezelésére, például egy újrapróbálkozási mintához hasonló stratégiát alkalmazva.
Lehetnek azonban olyan helyzetek, amikor a hibákat nem várt események okozzák, amelyek helyrehozása tovább tarthat. 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 lehet, ha egy alkalmazás folyamatosan újrapróbálkozott egy olyan művelettel, amely nem valószínű, hogy sikerül, ehelyett az alkalmazásnak gyorsan el kell fogadnia, hogy a művelet meghiúsult, és ennek megfelelően kell kezelnie ezt a hibát.
Emellett, ha egy szolgáltatás nagyon elfoglalt, a rendszer egy részén előforduló hiba egész hibasorozatot indíthat be. Egy szolgáltatást meghívó művelet például konfigurálható időtúllépés megvalósításához, és hibaüzenettel válaszolhat, ha a szolgáltatás ebben az időszakban nem válaszol. Ez a stratégia azonban számos egyidejű kérelmet is blokkolhat ugyanahhoz a művelethez, amíg az időtúllépési időszak le nem jár. Ezek a blokkolt kérelmek olyan kritikus rendszererőforrásokat akadályozhatnak, mint a memória, szálak, adatbázis-kapcsolatok stb. Így ezek az erőforrások kimerülhetnek, ami a rendszer más, esetleg nem kapcsolódó részeinek meghibásodását okozhatja, amelyeknek ugyanazokat az erőforrásokat kell használniuk. Ezekben a helyzetekben az a jó, ha a művelet azonnal meghiúsul, és csak akkor érdemes újból meghívni a szolgáltatást, ha nagy esély van arra, hogy sikerül. Ha rövidebb időtúllépést állít be, az segíthet a probléma megoldásában, de az időtúllépés nem lehet olyan rövid, hogy a művelet az idő nagy részében meghiúsuljon, még akkor sem, ha a szolgáltatás kérése végül sikeres lesz.
Megoldás
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. Így lehetővé teszi a folytatást, nem kell a hiba kijavítására várni, vagy CPU-ciklusokat pazarolni arra, hogy kiderüljön, hosszan tartó hibáról van szó. Az áramkör-megszakítási minta azt is lehetővé teszi az alkalmazás számára, hogy észlelje, ha a hibát kijavították. Ha úgy tűnik, hogy a hiba megoldódott, az alkalmazás megpróbálhatja meghívni a műveletet.
Az áramkör-megszakító minta nem azonos az újrapróbálkozási mintával. Az újrapróbálkozási minta lehetővé teszi az alkalmazás számára, hogy újból megpróbálkozzon egy művelettel, ha arra számít, hogy sikeres lesz. Az áramkör-megszakítási minta megakadályozza, hogy egy alkalmazás olyan műveletet próbáljon többször végrehajtani, amely nagy eséllyel lesz sikertelen. Az alkalmazások kombinálhatják ezt a két mintát úgy, hogy az újrapróbálkozási mintát használják egy művelet áramkör-megszakítón keresztüli meghívására. Az azonban fontos, hogy az újrapróbálkozási minta érzékeny legyen az áramkör-megszakító által visszaadott kivételekre, és abbahagyja az újrapróbálkozási kísérleteket, ha az áramkör-megszakító azt jelzi, hogy a hiba nem átmeneti.
Az áramkör-megszakító proxyként viselkedik az esetlegesen meghiúsuló műveleteknél. A proxynak figyelnie kell a legutóbbi hibák számát, és ezen információk alapján eldöntheti, hogy engedélyezi-e a művelet folytatását, vagy azonnal kivételt ad vissza.
A proxy egy, az alábbi, egy elektromos áramkör-megszakító működését utánzó állapotokkal bíró állapotgépként valósítható meg:
Zárt: Az alkalmazásból érkező kérelmet a rendszer a művelethez irányítja. A proxy számlálóban követi a közelmúltbeli hibák számát, és ha a művelet meghívása nem sikeres, a proxy növeli a számláló értékét. Ha a közelmúltbeli hibák száma meghalad egy megadott küszöbértéket egy adott időtartamon belül, a proxy Nyitott állapotba kerül. Ekkor a proxy elindít egy időtúllépési időzítőt, és amikor ez az időzítő lejár, a proxy Félig nyitott állapotba kerül.
Az időtúllépési időzítő célja, hogy időt adjon a rendszernek a hibát okozó probléma megoldására, mielőtt lehetővé tenné az alkalmazás számára, hogy újra megpróbálja végrehajtani a műveletet.
Nyitott: Az alkalmazásból érkező kérelem azonnal meghiúsul, az alkalmazás kivételt kap vissza.
Félig nyitott: Az alkalmazásból érkező kérelmek korlátozott számban átjuthatnak, és meghívhatják a műveletet. Ha ezek a kérelmek sikeresek, feltételezhető, hogy a korábban meghibásodást okozó hiba megszűnt, és az áramkör-megszakító átvált Zárt állapotra (a hibaszámláló alaphelyzetbe áll). Ha bármilyen kérés meghiúsul, az áramkör-megszakító feltételezi, hogy a hiba továbbra is fennáll, így visszaáll a Open állapotra, és újraindítja az időtúllépési időzítőt, hogy a rendszer további időt kapjon a hiba utáni helyreállításra.
A Félig nyitott állapot azért hasznos, mert megakadályozza, hogy a helyreálló szolgáltatást hirtelen elárasszák a kérelmek. Előfordul, hogy miközben zajlik a helyreállítás, a szolgáltatás már képes korlátozott számban kiszolgálni kéréseket a teljes helyreállásig, de amíg folyamatban van a helyreállítás, a nagy mennyiségű feladattól időtúllépés fordulhat elő, vagy esetleg újra meghibásodik a szolgáltatás.
Az ábrán a Zárt állapot által használt hibaszámláló időalapú. Rendszeres időközönként automatikusan alaphelyzetbe áll. Ez a kialakítás segít megakadályozni, hogy az áramkör-megszakító belépjen a Open állapotba, ha időnként hibák lépnek fel. Az áramkör-megszakítót Nyitott állapotba léptető küszöbérték csak akkor érhető el, hogy a megadott számú hiba megadott időtartam alatt következik be. A Félig nyitott állapot által használt számláló a művelet meghívására tett sikeres kísérletek számát rögzít. Az áramkör-megszakító akkor tér vissza a Zárt állapotba, ha adott számú egymást követő műveletmeghívás sikeres volt. Ha bármely meghívás meghiúsul, az áramkör-megszakító azonnal belép a Nyitott állapotba, és a sikeres meghívások számlálója alaphelyzetbe áll, amikor a megszakító újra Félig nyitott állapotba lép.
A rendszer helyreállásának kezelése kívülről történik, esetleg egy meghibásodott összetevő visszaállításával vagy újraindításával, vagy a hálózati kapcsolat megjavításával.
Az áramkör-megszakító minta stabilitást biztosít arra az időszakra, amíg a rendszer helyreáll egy meghibásodás után, és minimálisra csökkenti a hiba teljesítményre gyakorolt hatását. A segítségével fenntartható a rendszer válaszideje, mert gyorsan visszautasítja a várhatóan sikertelen műveletekre irányuló kéréseket, nem várja meg a művelet időtúllépését, vagy azt, hogy egyáltalán ne küldjön választ. Ha az áramkör-megszakító minden állapotváltáskor létrehoz egy eseményt, ez az információ segít monitorozni a rendszer áramkör-megszakító által védett részének állapotát, vagy riasztást küldeni egy rendszergazdának, ha az áramkör-megszakító Nyitott állapotba kerül.
A minta testreszabható, és a lehetséges hiba típusának megfelelően alkalmazható. Alkalmazhat például egy növekvő időtúllépési időzítőt egy áramkör-megszakítóra. A megszakítót kezdetben néhány másodpercig a Megnyitás állapotba helyezheti, majd ha a hiba nem oldódott meg, növelje az időtúllépést néhány percre, és így tovább. Bizonyos esetekben hasznos lehet egy, az alkalmazás számára jelentéssel bíró alapértelmezett értéket visszaadni az alkalmazásnak ahelyett, hogy a Nyitott állapot hibát adna vissza, és kivételt hozna létre.
Feljegyzés
Az áramkör-megszakítók hagyományosan olyan előre konfigurált küszöbértékekre támaszkodtak, mint a hibák száma és az időtúllépés időtartama, ami determinisztikus, de néha nem optimális viselkedést eredményezett. Az AI-t és az ML-t használó adaptív technikák azonban dinamikusan módosíthatják a küszöbértékeket valós idejű forgalmi minták, anomáliák és korábbi meghibásodási arányok alapján, így az áramkör-megszakító rugalmasabbá és hatékonyabbá válik.
Problémák és megfontolandó szempontok
A minta megvalósítása során az alábbi pontokat vegye figyelembe:
Kivételkezelés: A műveletet megszakító alkalmazásnak készen kell állnia az esetlegesen felmerülő kivételek kezelésére, ha a művelet nem érhető el. A kivételek kezelése alkalmazásspecifikus lesz. Az alkalmazás például átmenetileg csökkentheti a működési teljesítményét, meghívhat egy másik műveletet, hogy az megpróbálja végrehajtani ugyanazt a feladatot, vagy beszerezni ugyanazokat az adatokat, illetve jelentheti a kivételt a felhasználónak, és megkérheti, hogy próbálkozzon később újra.
Kivételek típusai: A kérések számos okból meghiúsulhatnak, amelyek közül néhány súlyosabb típusú hibát jelezhet, mint mások. Előfordulhat például, hogy egy kérés meghiúsul, mert egy távoli szolgáltatás összeomlott, és több percet vesz igénybe a helyreállítás, vagy a szolgáltatás ideiglenes túlterhelése miatti időtúllépés miatt. Egy áramkör-megszakító képes lehet a felmerülő kivételek típusának vizsgálatára, és képes az adott kivételek természetéhez igazítani a stratégiáját. Előfordulhat például, hogy több időtúllépési kivételre van szükség ahhoz, hogy az áramkör-megszakítót a Nyitott állapotba kapcsoljuk a szolgáltatás teljes elérhetetlensége miatti hibák számához képest.
Monitorozási: Az áramkör-megszakítónak egyértelmű megfigyelhetőséget kell biztosítania mind a sikertelen, mind a sikeres kérések tekintetében, lehetővé téve az üzemeltetési csapatok számára a rendszerállapot felmérését. Elosztott nyomkövetés használata a teljes körű láthatóság érdekében a szolgáltatások között.
Helyreállíthatósági: A megszakítót úgy kell konfigurálnia, hogy az megfeleljen a védett művelet valószínű helyreállítási mintájának. Ha például az áramkör-megszakító hosszan Nyitott állapotban marad, akkor is létrehozhat kivételeket, ha a hiba oka már megszűnt. Ehhez hasonlóan az áramkör-megszakító ingadozhat és csökkentheti az alkalmazások válaszidejeit, ha túl gyorsan vált a Nyitott állapotból Félig nyitott állapotba.
Sikertelen műveletek tesztelése: A Megnyitás állapotban ahelyett, hogy időzítő használatával határozná meg, hogy mikor váltson a félig nyitott állapotra, a megszakító ehelyett rendszeres időközönként pingelheti a távoli szolgáltatást vagy erőforrást annak megállapításához, hogy ismét elérhetővé válik-e. Ez a pingelés történhet egy korában meghiúsult művelet meghívásának formájában, vagy lehet a távoli szolgáltatás által kifejezetten a szolgáltatás állapotának tesztelésére biztosított speciális műveletet használni, mint például az állapot végponti monitorozását végző minta.
Manuális felülbírálási: Olyan rendszerekben, ahol a sikertelen műveletek helyreállítási ideje rendkívül változó, célszerű manuális visszaállítási lehetőséget biztosítani, amely lehetővé teszi a rendszergazda számára egy megszakító bezárását (és a hibaszámláló alaphelyzetbe állítását). Hasonlóképpen, a rendszergazda kényszerítheti a kapcsolatcsoport-megszakítót a megnyitása állapotba (és újraindíthatja az időtúllépési időzítőt), ha a megszakító által védett művelet átmenetileg nem érhető el.
Egyidejűségi: Ugyanazt az áramkör-megszakítót egy alkalmazás nagyszámú egyidejű példánya érheti el. Ez a megvalósítás valószínűleg nem blokkolja a párhuzamos kéréseket, és nem ad túlzott többletterhelést az egyes műveletmeghívásokhoz.
erőforrás-különbségi: Legyen óvatos, ha egyetlen kapcsolatcsoport-megszakítót használ egy erőforrástípushoz, ha több mögöttes független szolgáltató is lehet. Egy több szilánkot tartalmazó adattárban előfordulhat, hogy az egyik szilánk teljesen hozzáférhető, de egy másiknál átmenetileg probléma jelentkezik. Ha ezekben a forgatókönyvekben egyesülnek a hibaválaszok, előfordulhat, hogy egy alkalmazás akkor is megpróbál hozzáférni egy szilánkhoz, amikor nagy valószínűséggel hiba jelentkezek, miközben más szilánkokat blokkol, noha valószínűleg sikeres lenne a művelet.
gyorsított megszakító: Néha a hibaválasz elegendő információt tartalmazhat ahhoz, hogy az áramkör-megszakító azonnal elinduljon, és minimális ideig maradjon megbotlva. Egy túlterhelt megosztott erőforrástól érkező hibaüzenet például jelezheti azt, hogy az azonnali újrapróbálkozás nem ajánlott, és érdemes inkább pár perccel később újrapróbálkoznia az alkalmazásnak.
többrégiós üzemelő példányok: Egy kapcsolatcsoport-megszakító egy- vagy többrégiós üzemelő példányokhoz tervezhető. Ez utóbbi globális terheléselosztókkal vagy egyéni régióbarát kapcsolatcsoporttörési stratégiákkal valósítható meg, amelyek biztosítják a szabályozott feladatátvételt, a késés optimalizálását és a jogszabályi megfelelőséget.
Service Mesh-kapcsolatcsoport-megszakítók: Az áramkör-megszakítók az alkalmazásrétegben vagy keresztvágásos, absztrakciós funkcióként implementálhatók. A szolgáltatáshálók például gyakran támogatják a kapcsolatcsoporttörést oldalkocsis ként vagy önálló funkcióként az alkalmazáskód módosítása nélkül.
Feljegyzés
A szolgáltatás http 429-et (túl sok kérést) adhat vissza, ha az szabályozza az ügyfelet, vagy HTTP 503 -at (a szolgáltatás nem érhető el), ha a szolgáltatás jelenleg nem érhető el. A válasz tartalmazhat további információkat is, például a késleltetés várható időtartamát.
sikertelen kérelmek ismétlése: A Megnyitás állapotban ahelyett, hogy egyszerűen gyorsan meghiúsulna, az áramkör-megszakítók rögzíthetik az egyes kérések részleteit egy naplóba, és gondoskodhatnak arról, hogy a távoli erőforrás vagy szolgáltatás elérhetővé válásakor a kérések visszajátsszenek.
Nem megfelelő időtúllépések a külső szolgáltatásokon: Előfordulhat, hogy egy kapcsolatcsoport-megszakító nem tudja teljes mértékben megvédeni azokat az alkalmazásokat, amelyek hosszú időtúllépési időszakkal vannak konfigurálva a külső szolgáltatásokban. Ha az időtúllépés túl hosszú, előfordulhat, hogy egy kapcsolatcsoport-megszakítót futtató szál hosszabb ideig le lesz tiltva, mielőtt az áramkör-megszakító azt jelzi, hogy a művelet meghiúsult. Lehet, hogy ezen idő alatt sok más alkalmazáspéldány is megpróbálja meghívni a szolgáltatást az áramkör-megszakítón keresztül, és jelentős számú szálat lefoglalhatnak, mielőtt meghiúsulnak.
Számítási diverzifikációhoz való alkalmazkodási: Az áramkör-megszakítóknak különböző számítási környezeteket kell figyelembe vennie a kiszolgáló nélkülitől a tárolóalapú számítási feladatokig, ahol olyan tényezők, mint a hidegindítás és a méretezhetőség befolyásolják a hibák kezelését. Az adaptív megközelítések dinamikusan módosíthatják a stratégiákat a számítási típus alapján, biztosítva a heterogén architektúrák közötti rugalmasságot.
Mikor érdemes ezt a mintát használni?
Használja a következő mintát a következő helyzetekben:
- A kaszkádolt hibák megelőzése a távoli szolgáltatás túlzott meghívásainak leállításával vagy a megosztott erőforráshoz való hozzáférés kéréseinek leállításával, ha ezek a műveletek nagy valószínűséggel meghiúsulnak.
- A többrégiós rugalmasság növelése a forgalom valós idejű hibajelzéseken alapuló intelligens útválasztásával.
- A lassú függőségek elleni védelem, a szolgáltatási szint célkitűzéseinek (SLO-k) megtartása, valamint a nagy késésű szolgáltatások miatti teljesítménycsökkenés elkerülése.
- Az időszakos csatlakozási problémák kezelése és a kéréshibák csökkentése elosztott környezetekben.
Ez a minta nem ajánlott a következő helyzetekben:
- Ha helyi személyes erőforrások hozzáférését kell kezelnie egy alkalmazásban, például egy memórián belüli adatstruktúrát. Ebben a környezetben az áramkör-megszakító csak többletterhelést jelentene a rendszer számára.
- Ha helyettesíteni szeretné a kivételkezelést az alkalmazásai üzleti logikájában.
- Ha a jól ismert újrapróbálkozások algoritmusai elegendőek, és a függőségek az újrapróbálkozás mechanizmusainak kezelésére vannak kialakítva. Ebben az esetben az áramkör-megszakító implementálása szükségtelen összetettséghez vezethet a rendszerben.
- Az áramkör-megszakító alaphelyzetbe állítására való várakozás elfogadhatatlan késéseket eredményezhet.
- Ha üzenetvezérelt vagy eseményvezérelt architektúrával rendelkezik, mivel gyakran átirányítják a sikertelen üzeneteket egy halott levélsorba (DLQ) manuális vagy halasztott feldolgozás céljából. A beépített hibaelkülönítési és újrapróbálkozási mechanizmusok, amelyek általában ezekben a tervekben vannak implementálva, gyakran elegendőek.
- Ha a hibahelyreállítást infrastruktúra- vagy platformszinten kezelik, például a globális terheléselosztókban vagy a szolgáltatáshálókban végzett állapotellenőrzéssel, előfordulhat, hogy nincs szükség megszakítókra.
Számítási feladatok tervezése
Az építészeknek értékelniük kell, hogyan használható a kapcsolatcsoport-megszakító minta a számítási feladat kialakításában az Azure Well-Architected Framework pilléreiben foglalt célok és alapelvek kezelésére. Példa:
Pillér | Hogyan támogatja ez a minta a pillércélokat? |
---|---|
A megbízhatósági tervezési döntések segítenek a számítási feladatnak ellenállóvá válni a hibás működéssel szemben, és biztosítani, hogy a hiba bekövetkezése után teljesen működőképes állapotba kerüljön. | Ez a minta megakadályozza a hibás függőségek túlterhelését. Ezzel a mintával a számítási feladat kecses romlását is kiválthatja. Az áramkör-megszakítókat gyakran automatikus helyreállítással párosítják, hogy önmegőrzést és öngyógyítást is biztosítsanak. - RE:03 Hibamód elemzése - RE:07 Átmeneti hibák - RE:07 Önmegőrzés |
A teljesítményhatékonyság a skálázás, az adatok és a kód optimalizálásával segíti a számítási feladatok hatékony kielégítését . | Ez a minta elkerüli az újrapróbálkozási megközelítést, amely túlzott erőforrás-kihasználtságot eredményezhet a függőségek helyreállítása során, és túlterhelheti a helyreállítást megkísérlõ függőség teljesítményét is. - PE:07 Kód és infrastruktúra - PE:11 Élő problémákra adott válaszok |
Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.
Kapcsolódó erőforrások
A következő minták is hasznosak lehetnek ennek a mintának a végrehajtása során:
A megbízható webalkalmazás-minta bemutatja, hogyan alkalmazhatja az áramkör-megszakító mintát a felhőben konvergens webalkalmazásokra.
Újrapróbálkozási minta. Ismerteti egy alkalmazás számára a szolgáltatásokhoz vagy hálózati erőforrásokhoz való csatlakozáskor jelentkező előre jelzett, átmeneti meghibásodások kezelését egy korábban meghiúsult művelet transzparens módon való ismételt megkísérlésével.
Állapotvégpont monitorozási mintája. Egy áramkör-megszakító képes lehet egy szolgáltatás állapotának tesztelésére oly módon, hogy kérést küld egy, a szolgáltatás által közzétett végpontnak. A szolgáltatásnak az állapotát jelző adatokat kell visszaadnia.