Megosztás a következőn keresztül:


Megbízható eseményfeldolgozás az Azure Functions és az Event Hubs használatával

Ismerje meg, hogyan hozhat létre robusztus, megbízható kiszolgáló nélküli megoldásokat az Azure Functions és az Azure Event Hubs eseményindítói használatával. Ez a cikk az ellenőrzőpontokra, a hibakezelésre és az áramkör-megszakító minták implementálására vonatkozó ajánlott eljárásokat ismerteti annak érdekében, hogy ne vesszenek el események, és az eseményvezérelt alkalmazások stabilak és rugalmasak maradjanak.

Az elosztott rendszerek eseménystreamjeinek kihívásai

Fontolja meg azt a rendszert, amely másodpercenként 100 eseményt küld állandó sebességgel. Ebben az ütemben perceken belül több párhuzamos példány is képes másodpercenként felhasználni a bejövő 100 eseményt.

Vegye figyelembe azonban az eseménystreamek használatával kapcsolatos alábbi kihívásokat:

  • Az esemény közzétevője sérült eseményt küld.
  • A függvénykód kezeletlen kivételt tapasztal.
  • Egy alsóbb rétegbeli rendszer offline állapotba kerül, és letiltja az események feldolgozását.

Az Azure Queue Storage-eseményindítótól eltérően, amely a feldolgozás során zárolja az üzeneteket, az Azure Event Hubs partíciónként a stream egy pontjáról olvassa be az üzeneteket. Ez az olvasási viselkedés, amely inkább egy videólejátszóhoz hasonlít, biztosítja a nagy átviteli sebesség, a több fogyasztói csoport és a visszajátszási képesség kívánt előnyeit. Az eseményeket egy ellenőrzőpontról olvassa be, előre vagy hátra, de az új események feldolgozásához át kell helyeznie az egérmutatót. További információ: Checkpoint az Event Hubs dokumentációjában.

Ha hiba történik egy streamben, és úgy dönt, hogy nem viszi tovább a mutatót, a további eseményfeldolgozás le lesz tiltva. Más szóval, ha leállítja a mutatót egy esemény feldolgozási problémájának megoldásához, akkor a feldolgozatlan események elkezdenek felhalmozódni.

A függvények elkerülik a holtpontokat, mindig előrehaladva a stream mutatójával, függetlenül a sikertől vagy hibától. Mivel a mutató folyamatosan halad előre, a függvényeknek megfelelő módon kell kezelniük a hibákat.

Az Event Hubs eseményindítója hogyan fogyasztja az eseményeket

Az Azure Functions az alábbi lépések végrehajtásával használja fel az eseményeket egy eseményközpontból:

  1. Az eseményközpont egyes partícióihoz létrejön és megmarad egy mutató az Azure Storage-ban.
  2. A rendszer új eseményeket fogad egy kötegben (alapértelmezés szerint), és a gazdagép megpróbálja aktiválni azt a függvényt, amely az események kötegét adja meg feldolgozásra.
  3. Ha a függvény befejezi a végrehajtását, kivételekkel vagy anélkül, a mutató előrelép, és a rendszer egy ellenőrzőpontot ment az alapértelmezett gazdagép tárolási fiókjába.
  4. Ha a feltételek megakadályozzák a függvény végrehajtásának befejezését, a gazdagép nem tudja előre mozdítani a mutatót. Ha a mutató nem tud előrelépni, a későbbi végrehajtások ugyanazokat az eseményeket dolgozza fel újra.

Ez a viselkedés néhány fontos pontot mutat be:

  • A kezeletlen kivételek eseményvesztést okozhatnak:

    A kivételt okozó függvényvégrehajtások továbbra is előrelépnek a mutatóval. Az újrapróbálkozási szabályzat vagy más újrapróbálkozási logika beállítása késlelteti az egérmutató előrehaladását, amíg a teljes újrapróbálkozási folyamat befejeződik.

  • A Functions legalább egyszer biztosítja a kézbesítést :

    Előfordulhat, hogy a kódnak és a függő rendszereknek figyelembe kell vennie, hogy ugyanazt az eseményt kétszer lehet feldolgozni. További információ: Az Azure Functions tervezése azonos bemenethez.

Kivételek kezelése

Bár minden függvénykódnak tartalmaznia kell egy próba-/fogási blokkot a legmagasabb kódszinten, a blokkok catch használata még fontosabb az Event Hubs-eseményeket használó függvények esetében. Így kivétel esetén a kivételkezelő blokk kezeli a hibát, mielőtt a mutató előrehalad.

Újrapróbálkozás mechanizmusai és szabályzatai

Mivel a felhőben számos kivétel átmeneti, a hibakezelés első lépése mindig a művelet újrapróbálkozása. Alkalmazhat beépített újrapróbálkozési szabályzatokat, vagy definiálhat saját újrapróbálkozásos logikát.

Újrapróbálkozási irányelvek

A Functions beépített újrapróbálkozési szabályzatokat biztosít az Event Hubshoz. Újrapróbálkozási szabályzatok használatakor egyszerűen egy új kivételt vált ki, és a gazdagép megpróbálja az eseményt újra feldolgozni a megadott szabályzat alapján. Az újrapróbálkozási viselkedéshez az Event Hubs-bővítmény 5.x vagy újabb verziója szükséges. További információ: Újrapróbálkozás szabályzatok.

Egyéni újrapróbálkozás logikája

Saját újrapróbálkozési logikát is meghatározhat magában a függvényben. Implementálhat például egy olyan szabályzatot, amely az alábbi szabályokkal illusztrált munkafolyamatot követi:

  • Próbáljon meg háromszor feldolgozni egy eseményt (esetleg az újrapróbálkozások közötti késéssel).
  • Ha az összes újrapróbálkozás végső eredménye hiba, vegyen fel egy eseményt egy sorba, hogy a feldolgozás folytatódjon a streamen.
  • A sérült vagy feldolgozatlan eseményeket később kezeli a rendszer.

Megjegyzés:

A Polly egy példa a C#-alkalmazások rugalmassági és átmeneti hibakezelési kódtárára.

Nem kivétel alapú hibák

Bizonyos problémák kivétel nélkül is előfordulhatnak. Vegyük például azt az esetet, amikor egy kérés túllépi az időkorlátot, vagy a függvényt futtató példány összeomlik. Ha egy függvény kivétel nélkül nem fejeződik be, az eltolásmutató soha nem halad előre. Ha az egérmutató nem halad előre, akkor a sikertelen végrehajtás után futó példányok továbbra is ugyanazokat az eseményeket olvassák. Ez a helyzet legalább egyszeri garanciát nyújt.

Az a bizonyosság, hogy minden esemény feldolgozása legalább egyszer megtörténik, azt jelenti, hogy egyes események több alkalommal is feldolgozhatók. A függvényalkalmazásainak tisztában kell lenniük ezzel a lehetőséggel, és az idempotencia alapelveire kell épülniük.

Hibaállapotok kezelése

Előfordulhat, hogy az alkalmazás elfogadhatóan képes kezelni néhány hibát az eseményfeldolgozás során. Emellett azonban fel kell készülnie az állandó hibaállapot kezelésére is, amely az alsóbb rétegbeli feldolgozás hibáinak következménye lehet. Ilyen meghibásodási állapotban, például egy alsóbb rétegbeli adattár offline állapotában a függvénynek le kell állítania az események aktiválását, amíg a rendszer kifogástalan állapotba nem kerül.

Áramköri megszakító minta

Az áramkör-megszakító minta megvalósításakor az alkalmazás hatékonyan szüneteltetheti az események feldolgozását, majd később folytathatja a problémák megoldása után.

Az eseménystreamelés folyamatában két összetevőre van szükség az áramkör-megszakító implementálásához:

  • Az összes példány megosztott állapota a körfolyamat egészségének nyomon követéséhez és monitorozásához.
  • Egy elsődleges folyamat, amely képes kezelni az áramkör állapotát, akár open vagy closed.

A megvalósítás részletei eltérőek lehetnek, de az állapot példányok közötti megosztásához szükség van egy tárolási mechanizmusra. Az állapotot az Azure Storage-ban, a Redis Cache-ben vagy bármely más állandó szolgáltatásban tárolhatja, amelyet a függvényalkalmazás-példányok érhetnek el.

A Durable Functions és az Azure Logic Apps egyaránt biztosít infrastruktúrát a munkafolyamatok és a kapcsolatcsoportok állapotának kezeléséhez. Ez a cikk azt ismerteti, hogy a Logic Apps segítségével szüneteltetheti és újraindíthatja a függvényvégrehajtásokat, és lehetővé teszi az áramkör-megszakító minta implementálásához szükséges vezérlést.

Hibaküszöb definiálása a példányok között

A kapcsolatcsoport állapotának figyeléséhez meg kell őrizni a megosztott külső állapotot, ha több példány dolgoz fel eseményeket egyszerre. Ezt a tartós állapotot a hibaállapotra utaló szabályok alapján figyelheti, például:

Ha egy 30 másodperces időszakon belül több mint 100 eseményhiba történik az összes példány esetén, meg kell szakítani az áramkört, hogy az új események ne aktiválódjanak.

A monitorozási logika implementációjának részletei az adott alkalmazás igényeitől függően változnak, de általában olyan rendszert kell létrehoznia, amely:

  1. Naplózza a tárolt tárterület hibáit.
  2. Vizsgálja meg az új hibák naplózásának gördülési számát, és állapítsa meg, hogy teljesül-e az eseményhiba küszöbértéke.
  3. Ha ez a küszöbérték teljesül, egy eseményt bocsát ki, amely azt jelzi a rendszernek, hogy megszakítsa a kapcsolatcsoportot.

Áramkör állapotának kezelése az Azure Logic Apps használatával

Az Azure Logic Apps rendelkezik beépített összekötőkkel különböző szolgáltatásokhoz, funkciókhoz és állapotalapú vezénylésekhez, és természetes választás az áramkör állapotának kezeléséhez. Miután észlelte, hogy mikor kell megszakadnia egy áramkörnek, létrehozhat egy logikai alkalmazást a munkafolyamat implementálásához:

  1. Eseményrács-munkafolyamat aktiválása, amely leállítja a függvény feldolgozását.
  2. Küldjön egy értesítési e-mailt, amely tartalmazza a munkafolyamat újraindításának lehetőségét.

Ha meg szeretné tudni, hogyan tilthat le és adhat vissza egyes függvényeket az alkalmazásbeállítások használatával, olvassa el a függvények letiltása az Azure Functionsben című témakört.

Az e-mail címzettje megvizsgálhatja a kapcsolatcsoport állapotát, és szükség esetén újraindíthatja a kapcsolatcsoportot az értesítési e-mailben található hivatkozáson keresztül. Ahogy a munkafolyamat újraindítja a függvényt, az események az utolsó eseményközpont ellenőrzőpontjáról lesznek feldolgozva.

Ha ezt a megközelítést használja, nem vesznek el események, az események feldolgozása sorrendben történik, és szükség esetén tartósan megszakíthatja az áramkört.

Az Event Grid-eseményindítók migrálási stratégiái

Ha egy meglévő függvényalkalmazást régiók vagy tervek között migrál, a migrációs folyamat során újra kell készítenie az alkalmazást. Ebben az esetben a migrálási folyamat során előfordulhat, hogy két alkalmazás is képes ugyanabból az eseményfolyamból fogadni, és ugyanarra a kimeneti célhelyre írni.

A migrálási folyamat során érdemes megfontolni a fogyasztói csoportok használatát az eseményadatok elvesztésének vagy duplikálásának elkerülése érdekében:

  1. Hozzon létre egy új fogyasztói csoportot az új célalkalmazáshoz.

  2. Konfigurálja az eseményindítót az új alkalmazásban az új fogyasztói csoport használatára.

    Ez lehetővé teszi, hogy mindkét alkalmazás egymástól függetlenül dolgozza fel az eseményeket az ellenőrzés során.

  3. Ellenőrizze, hogy az új alkalmazás megfelelően dolgozza-e fel az eseményeket.

  4. Állítsa le az eredeti alkalmazást, vagy távolítsa el az előfizetését/fogyasztói csoportját.