Szerkesztés

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


Teljesítmény- és méretezési útmutató az Event Hubshoz és az Azure Functionshez

Azure Event Hubs
Azure Functions

Ez a cikk útmutatást nyújt a méretezhetőség és a teljesítmény optimalizálásához, ha az Azure Event Hubsot és az Azure Functionst együtt használja az alkalmazásokban.

Függvénycsoportozás

A függvények általában egy munkaegységet foglalnak össze egy eseményfeldolgozó adatfolyamban. Egy függvény például átalakíthat egy eseményt egy új adatstruktúrává, vagy bővítheti az alárendelt alkalmazások adatait.

A Függvényekben egy függvényalkalmazás biztosítja a függvények végrehajtási környezetét. A függvényalkalmazások viselkedése a függvényalkalmazás által üzemeltetett összes függvényre vonatkozik. A függvényalkalmazások függvényei együtt vannak üzembe helyezve és együtt skálázva. A függvényalkalmazások összes függvényének azonos nyelvűnek kell lennie.

A függvények függvényalkalmazásokba való csoportosítása hatással lehet a függvényalkalmazások teljesítményére és skálázási képességeire. A kódot meghívó hozzáférési jogosultságok, üzembe helyezés és használati minták szerint csoportosíthat.

A függvények csoportosítással és egyéb szempontokkal kapcsolatos ajánlott eljárásaival kapcsolatos útmutatásért tekintse meg a megbízható Azure Functions ajánlott eljárásait, valamint az Azure Functions teljesítményének és megbízhatóságának javítását ismertető ajánlott eljárásokat.

Az alábbi lista útmutatást nyújt a függvények csoportosításához. Az útmutató a tárolási és fogyasztói csoportok szempontjait veszi figyelembe:

  • Egyetlen függvényt üzemeltethet egy függvényalkalmazásban: Ha az Event Hubs aktivál egy függvényt, a függvény és más függvények közötti versengés csökkentéséhez elkülönítheti a függvényt a saját függvényalkalmazásában. Az elkülönítés különösen fontos, ha a többi függvény processzor- vagy memóriaigényes. Ez a technika azért segít, mert minden függvény saját memóriaigényű és használati mintákkal rendelkezik, amelyek közvetlenül befolyásolhatják az azt üzemeltető függvényalkalmazás skálázását.

  • Adja meg az egyes függvényalkalmazások saját tárfiókját: Kerülje a tárfiókok megosztását a függvényalkalmazások között. Ha egy függvényalkalmazás tárfiókot használ, ne használja ezt a fiókot más tárolási műveletekhez vagy igényekhez. Különösen fontos lehet elkerülni az Event Hubs által aktivált függvények tárfiókjainak megosztását, mert az ilyen függvények nagy mennyiségű tártranzakcióval rendelkezhetnek az ellenőrzőpont-ellenőrzés miatt.

  • Hozzon létre egy dedikált fogyasztói csoportot minden függvényalkalmazáshoz: A fogyasztói csoport egy eseményközpont nézete. A különböző fogyasztói csoportok eltérő nézetekkel rendelkeznek, ami azt jelenti, hogy az állapotok, a pozíciók és az eltolások eltérőek lehetnek. A fogyasztói csoportok lehetővé teszik, hogy több fogyasztó alkalmazás saját nézetekkel rendelkezzen az eseménystreamről, és a streamet önállóan, a saját tempójukban és saját eltolásukkal olvassák. További információ a fogyasztói csoportokról: Szolgáltatások és terminológia az Azure Event Hubsban.

    A fogyasztói csoportokhoz egy vagy több fogyasztói alkalmazás van társítva, a fogyasztói alkalmazások pedig egy vagy több fogyasztói csoportot használhatnak. Egy streamfeldolgozási megoldásban minden egyes fogyasztói alkalmazás egy fogyasztói csoportnak felel meg. A függvényalkalmazások a fogyasztói alkalmazások elsődleges példái. Az alábbi ábra két olyan függvényalkalmazást mutat be, amelyek egy eseményközpontból olvasnak, ahol mindegyik alkalmazás saját dedikált fogyasztói csoportokkal rendelkezik:

    Dedikált fogyasztói csoportok minden függvényalkalmazáshoz

    Ne ossza meg a felhasználói csoportokat a függvényalkalmazások és más fogyasztói alkalmazások között. Minden függvényalkalmazásnak különálló alkalmazásnak kell lennie saját hozzárendelt fogyasztói csoporttal, hogy biztosítsa az egyes felhasználók eltolásintegritását, és egyszerűsítse a függőségeket egy eseménystreamelési architektúrában. Az ilyen konfigurációk, valamint az eseményközpont által aktivált függvények saját függvényalkalmazás és tárfiók biztosításával segítik az optimális teljesítmény és skálázás alapjait.

Függvény-üzemeltetési csomagok

A függvényalkalmazások számos üzemeltetési lehetőséggel rendelkeznek, és fontos áttekinteni a képességeiket. Ezekről az üzemeltetési lehetőségekről további információt az Azure Functions üzemeltetési lehetőségei között talál. Jegyezze fel a beállítások méretezését.

A Használat csomag az alapértelmezett. A Használati tervben lévő függvényalkalmazások egymástól függetlenül skálázhatók, és akkor a leghatékonyabbak, ha elkerülik a hosszú ideig futó feladatokat.

A Prémium és dedikált csomagokat gyakran használják több olyan függvényalkalmazás és függvény üzemeltetésére, amelyek processzor- és memóriaigényesebbek. A Dedikált csomaggal a függvényeket egy Azure-alkalmazás Service-csomagban futtathatja, normál App Service-csomagdíjak mellett. Fontos megjegyezni, hogy a csomagok összes függvényalkalmazása osztozik a csomaghoz lefoglalt erőforrásokon. Ha a függvények eltérő terhelésprofilokkal vagy egyedi követelményekkel rendelkeznek, a legjobb, ha különböző tervekben üzemeltetik őket, különösen streamfeldolgozó alkalmazásokban.

Az Azure Container Apps integrált támogatást nyújt a tárolóalapú függvényalkalmazások fejlesztéséhez, üzembe helyezéséhez és kezeléséhez az Azure Functionsben. Ez lehetővé teszi az eseményvezérelt függvények teljes körűen felügyelt, Kubernetes-alapú környezetben való futtatását a nyílt forráskódú monitorozás, az mTLS, a Dapr és a KEDA beépített támogatásával.

Event Hubs-skálázás

Az Event Hubs-névtér üzembe helyezésekor számos fontos beállítást kell megfelelően beállítania a csúcsteljesítmény és a skálázás biztosításához. Ez a szakasz az Event Hubs standard szintjére és a szint azon egyedi funkcióira összpontosít, amelyek hatással vannak a skálázásra a Functions használatakor is. Az Event Hubs-szintekről további információt az Alapszintű és a Standard és a Prémium és a Dedikált szintek című témakörben talál.

Az Event Hubs-névtér egy Kafka-fürtnek felel meg. Az Event Hubs és a Kafka egymáshoz való viszonyáról további információt az Apache Kafkához készült Azure Event Hubsban talál.

Az átviteli egységek (TU-k) ismertetése

Az Event Hubs Standard szinten az átviteli sebesség az időegységenkénti névtérből beírt és beolvasott adatok mennyiségeként van besorolva. A TU-k előre megvásárolt átviteli kapacitásegységek.

A termékváltozatok számlázása óránként történik.

A névtér összes eseményközpontja osztozik a termékváltozatokon. A kapacitásigények megfelelő kiszámításához figyelembe kell vennie az összes alkalmazást és szolgáltatást, mind a közzétevőket, mind a fogyasztókat. A függvények befolyásolják az eseményközpontban közzétett és onnan beolvasott bájtok és események számát.

A TU-k számának meghatározására a hangsúly a bemeneti ponton van. A fogyasztói alkalmazások összesítését, beleértve az események feldolgozásának sebességét is bele kell foglalni a számításba.

További információ: Event Hubs átviteli sebességegységek: Átviteli sebesség mértékegységek.

Vertikális felskálázás automatikus felfújással

Az automatikus felfújás engedélyezhető egy Event Hubs-névtéren olyan helyzetekben, amikor a terhelés meghaladja a konfigurált TU-k számát. Az automatikus felfújás megakadályozza az alkalmazás szabályozását, és segít biztosítani, hogy a feldolgozás, beleértve az események betöltését is, megszakítás nélkül folytatódjon. Mivel a TU-beállítás hatással van a költségekre, az automatikus felfújás segít kezelni a túlterjedéssel kapcsolatos aggodalmakat.

Az automatikus felfújás az Event Hubs egyik funkciója, amelyet gyakran összekevernek az automatikus skálázással, különösen a kiszolgáló nélküli megoldások kontextusában. Az automatikus méretezéstől eltérően azonban az automatikus felskálázás nem lesz vertikálisan leskálázva, ha már nincs szükség további kapacitásra.

Ha az alkalmazásnak olyan kapacitásra van szüksége, amely meghaladja a maximálisan engedélyezett termékváltozatok számát, fontolja meg az Event Hubs Premium vagy a Dedikált szint használatát.

Partíciók és egyidejű függvények

Eseményközpont létrehozásakor meg kell adni a partíciók számát. A partíciók száma rögzített marad, és a Prémium és a Dedikált szinteken kívül nem módosítható. Amikor az Event Hubs függvényalkalmazásokat aktivál, lehetséges, hogy az egyidejű példányok száma egyenlő lehet a partíciók számával.

A Consumption és a Premium üzemeltetési csomagokban a függvényalkalmazás-példányok dinamikusan skálázhatók fel, hogy szükség esetén megfeleljenek a partíciók számának. A dedikált üzemeltetési csomag függvényeket futtat egy App Service-csomagban, és megköveteli, hogy manuálisan konfigurálja a példányokat, vagy állítson be egy automatikus méretezési sémát. További információt az Azure Functions dedikált üzemeltetési csomagjaiban talál.

Végső soron a partíciók és a függvénypéldányok vagy a fogyasztók száma közötti egy-az-egyhez kapcsolat ideális cél a streamfeldolgozási megoldások maximális átviteli sebességéhez. Az optimális párhuzamosság érdekében több fogyasztóval kell rendelkeznie egy fogyasztói csoportban. A Functions esetében ez a célkitűzés a tervben lévő függvények számos példányára lefordítható. Az eredményt partíciószintű párhuzamosságnak vagy a párhuzamosság maximális fokának nevezzük, ahogy az az alábbi ábrán is látható:

A párhuzamosság maximális foka

Úgy tűnhet, hogy érdemes a lehető legtöbb partíciót konfigurálni a maximális átviteli sebesség elérése és a nagyobb mennyiségű esemény lehetőségének figyelembe vétele érdekében. Számos partíció konfigurálásakor azonban több fontos tényezőt is figyelembe kell venni:

  • Több partíció több átviteli sebességet eredményezhet: Mivel a párhuzamosság mértéke a felhasználók száma (függvénypéldányok), minél több partíció van, annál nagyobb lehet az egyidejű átviteli sebesség. Ez a tény akkor fontos, ha egy eseményközponthoz meghatározott számú termékváltozatot oszt meg más fogyasztói alkalmazásokkal.
  • Több függvény több memóriát igényelhet: Ahogy nő a függvénypéldányok száma, úgy a tervben lévő erőforrások memóriaigényét is. Egy bizonyos ponton a túl sok partíció ronthatja a fogyasztók teljesítményét.
  • Fennáll annak a kockázata, hogy az alsóbb rétegbeli szolgáltatások nyomást gyakorolnak a háttérre: Mivel több átviteli sebesség jön létre, fennáll annak a kockázata, hogy túlterheli az alárendelt szolgáltatásokat, vagy visszanyomást kap tőlük. A fogyasztók kifáradásának figyelembe kell vennie a környező erőforrásokra gyakorolt következményeket. A lehetséges következmények közé tartozik a más szolgáltatásoktól való szabályozás, a hálózati telítettség és az erőforrás-versengés egyéb formái.
  • A partíciók ritkán tölthetők fel: A számos partíció és az alacsony mennyiségű esemény kombinációja olyan adatokhoz vezethet, amelyek ritkán oszlanak el a partíciók között. Ehelyett a partíciók kisebb száma jobb teljesítményt és erőforrás-használatot biztosíthat.

Rendelkezésre állás és konzisztencia

Ha nincs megadva partíciókulcs vagy azonosító, az Event Hubs átirányít egy bejövő eseményt a következő elérhető partícióra. Ez a gyakorlat magas rendelkezésre állást biztosít, és segít növelni a fogyasztók átviteli sebességét.

Ha egy eseménykészlet megrendelésére van szükség, az eseménykészítő megadhatja, hogy egy adott partíciót kell használni a készlet összes eseményéhez. A partícióról beolvasott fogyasztói alkalmazás megfelelő sorrendben fogadja az eseményeket. Ez a kompromisszum konzisztenciát biztosít, de veszélyezteti a rendelkezésre állást. Ezt a módszert csak akkor használja, ha meg kell őrizni az események sorrendjét.

A Functions esetében a rendezés akkor érhető el, ha az eseményeket egy adott partíción teszik közzé, és az Event Hubs által aktivált függvény bérletet szerez ugyanarra a partícióra. Jelenleg nem támogatott a partíciók Event Hubs-kimeneti kötéssel való konfigurálásának lehetősége. Ehelyett a legjobb módszer az egyik Event Hubs SDK használata egy adott partíción való közzétételhez.

További információ arról, hogy az Event Hubs hogyan támogatja a rendelkezésre állást és a konzisztenciát: Rendelkezésre állás és konzisztencia az Event Hubsban.

Event Hubs-eseményindító

Ez a szakasz az Event Hubs által aktivált függvények optimalizálásának beállításait és szempontjait ismerteti. A tényezők közé tartozik a kötegelt feldolgozás, a mintavételezés és a kapcsolódó funkciók, amelyek befolyásolják az eseményközpont eseményindító-kötésének viselkedését.

Aktivált függvények kötegelése

Konfigurálhatja az eseményközpont által aktivált függvényeket, hogy egyszerre több eseményt vagy eseményt dolgozzanak fel. Az események kötegének feldolgozása hatékonyabb lehet, ha csökkenti a függvényhívások terhelését. Ha csak egyetlen eseményt kell feldolgoznia, a függvényt több esemény feldolgozására kell konfigurálni meghíváskor.

Az Event Hubs-eseményindító kötés kötegelésének engedélyezése nyelvenként eltérő:

  • A JavaScript, a Python és más nyelvek akkor engedélyezik a kötegelést, ha a számosság tulajdonság a függvény function.json fájljában többre van állítva.
  • A C#-ban a számosság automatikusan konfigurálva lesz, ha egy tömb van kijelölve az EventHubTrigger attribútum típusához.

A kötegelés engedélyezéséről további információt az Azure Functions Azure Event Hubs-eseményindítója tartalmaz.

Eseményindító-beállítások

A host.json fájl számos konfigurációs beállítása kulcsfontosságú szerepet játszik a Functions eseményközpontok triggerkötésének teljesítményjellemzőiben:

  • maxEventBatchSize: Ez a beállítás azoknak az eseményeknek a maximális számát jelöli, amelyeket a függvény fogadhat a meghíváskor. Ha a fogadott események száma kisebb ennél az összegnél, a függvény továbbra is annyi eseményt hív meg, amennyit csak lehet. Nem állíthat be minimális kötegméretet.
  • prefetchCount: Az előfetchek száma az egyik legfontosabb beállítás, ha teljesítményre optimalizál. A mögöttes AMQP-csatorna erre az értékre hivatkozik annak meghatározásához, hogy hány üzenetet kell lekérni és gyorsítótáraznia az ügyfél számára. Az előcsatornaszámnak nagyobbnak vagy egyenlőnek kell lennie a maxEventBatchSize értéknél, és általában ennek az összegnek a többszörösére van beállítva. Ha ezt az értéket a maxEventBatchSize beállításnál kisebb számra állítja, az ronthatja a teljesítményt.
  • batchCheckpointFrequency: Amikor a függvény kötegeket dolgoz fel, ez az érték határozza meg az ellenőrzőpontok létrehozásának sebességét. Az alapértelmezett érték 1, ami azt jelenti, hogy ellenőrzőpont van, amikor egy függvény sikeresen feldolgoz egy köteget. A rendszer egy ellenőrzőpontot hoz létre a felhasználói csoport minden olvasójának partíciószintjén. További információ arról, hogy ez a beállítás hogyan befolyásolja az események visszajátszását és újrapróbálkozását: Event Hub által aktivált Azure-függvény: Visszajátszások és újrapróbálkozások (blogbejegyzés).

Több teljesítménytesztet is elvégezhet az eseményindító kötéséhez beállított értékek meghatározásához. Javasoljuk, hogy növekményesen módosítsa a beállításokat, és folyamatosan mérje a beállítások finomhangolását. Az alapértelmezett értékek ésszerű kiindulópontot jelentenek a legtöbb eseményfeldolgozási megoldáshoz.

Ellenőrző pontok használata

Ellenőrzőpontok jelölik vagy véglegesítik az olvasói pozíciókat egy partícióesemény-sorozatban. A Functions-gazdagép feladata, hogy ellenőrizze az események feldolgozását és a kötegelt ellenőrzőpont gyakoriságának beállítását. Az ellenőrzőpontokkal kapcsolatos további információkért tekintse meg az Azure Event Hubs funkcióit és terminológiáját.

Az alábbi fogalmak segíthetnek megérteni az ellenőrzőpontok és a függvény események feldolgozásának módját:

  • A kivételek továbbra is sikeresek: Ha a függvényfolyamat nem összeomlik az események feldolgozása során, a függvény befejezése sikeresnek minősül, még akkor is, ha kivételek történtek. A függvény befejezése után a Functions-gazdagép kiértékeli a batchCheckpointFrequency értéket. Ha itt az ideje egy ellenőrzőpontnak, létrehoz egyet, függetlenül attól, hogy voltak-e kivételek. Az a tény, hogy a kivételek nem befolyásolják az ellenőrzőpont-kezelést, nem befolyásolhatja a kivételellenőrzés és -kezelés megfelelő használatát.
  • A köteg gyakorisága számít: A nagy mennyiségű eseménystreamelési megoldásokban előnyös lehet a batchCheckpointFrequency beállítást 1-nél nagyobb értékre módosítani. Az érték növelése csökkentheti az ellenőrzőpontok létrehozásának sebességét, és ennek következtében a tárolási I/O-műveletek számát.
  • Visszajátszások történhetnek: Minden alkalommal, amikor egy függvényt meghív az Event Hubs eseményindító kötésével, a legutóbbi ellenőrzőpontot használja a feldolgozás folytatásának helyének meghatározásához. Az eltolás minden fogyasztó esetében az egyes fogyasztói csoportok partíciószintjén lesz mentve. A visszajátszások akkor fordulnak elő, ha egy ellenőrzőpont nem fordul elő a függvény utolsó meghívása során, és a függvény újra meghívódik. Az ismétlődésekről és a deduplikációs technikákról további információt az Idempotency című témakörben talál.

Az ellenőrzőpontok megértése kritikus fontosságú lesz, ha megfontolja a hibakezelés és az újrapróbálkozás ajánlott eljárásait. Ez a cikk későbbi részében tárgyalt témakör.

Telemetriai mintavételezés

A Functions beépített támogatást nyújt az Application Insightshoz, az Azure Monitor bővítményéhez, amely alkalmazásteljesítmény-monitorozási képességeket biztosít. Ezzel a funkcióval naplózhatja a függvénytevékenységekkel, a teljesítménnyel, a futásidejű kivételekkel és egyebekkel kapcsolatos információkat. További információkért tekintse meg az Application Insights áttekintését.

Ez a hatékony funkció néhány kulcsfontosságú konfigurációs lehetőséget kínál, amelyek hatással vannak a teljesítményre. A figyelés és a teljesítmény néhány fontos beállítása és megfontolandó szempontja a következők:

  • Telemetria-mintavételezés engedélyezése: A nagy átviteli sebességű forgatókönyvek esetében ki kell értékelnie a szükséges telemetriai és információmennyiséget. Fontolja meg az Application Insights telemetriai mintavételezési funkciójának használatát annak érdekében, hogy szükségtelen telemetriával és metrikákkal ne rontsa a függvény teljesítményét.
  • Összesítési beállítások konfigurálása: Vizsgálja meg és konfigurálja az adatok az Application Insightsba való összesítésének és küldésének gyakoriságát. Ez a konfigurációs beállítás a host.json fájlban található számos más mintavételezési és naplózási lehetőséggel együtt. További információ: Az összesítő konfigurálása.
  • Az AzureWebJobDashboard letiltása: A Functions-futtatókörnyezet 1.x verzióját megcélzott alkalmazások esetében ez a beállítás tárolja a kapcsolati sztring egy tárfiókba, amelyet az Azure SDK a WebJobs-irányítópult naplóinak megőrzésére használ. Ha a WebJobs-irányítópult helyett az Application Insightst használja, akkor ezt a beállítást el kell távolítani. További információ: AzureWebJobsDashboard.

Ha az Application Insights mintavételezés nélkül engedélyezve van, a rendszer minden telemetriát elküld. Az összes esemény adatainak elküldése káros hatással lehet a függvény teljesítményére, különösen nagy átviteli sebességű eseménystreamelési forgatókönyvek esetén.

A mintavételezés előnyeinek kihasználása és a monitorozáshoz szükséges telemetriai adatok folyamatos felmérése elengedhetetlen az optimális teljesítményhez. A telemetriát általános platformállapot-kiértékeléshez és alkalmankénti hibaelhárításhoz kell használni, nem pedig az alapvető üzleti metrikák rögzítéséhez. További információért lásd a mintavételezés konfigurálásával foglalkozó részt.

Kimeneti kötés

Az Azure Functions Event Hubs kimeneti kötésével egyszerűsítheti a függvényekből származó eseménystreamekben való közzétételt. A kötés használatának előnyei a következők:

  • Erőforrás-kezelés: A kötés kezeli az ügyfél és a kapcsolat életciklusát, és csökkenti a portkimerüléssel és a kapcsolatkészlet kezelésével kapcsolatos problémák lehetőségét.
  • Kevesebb kód: A kötés elvonja a mögöttes SDK-t, és csökkenti az események közzétételéhez szükséges kód mennyiségét. Segítségével könnyebben írható és karbantartható kódot írhat.
  • Kötegelés: Több nyelv esetében a kötegelés támogatott az eseménystreamekben való hatékony közzétételhez. A kötegelés javíthatja a teljesítményt, és egyszerűsítheti az eseményeket küldő kódot.

Határozottan javasoljuk, hogy tekintse át a Functions által támogatott nyelvek listáját és az ezekhez a nyelvekhez tartozó fejlesztői útmutatókat. Az egyes nyelvek Kötések szakasza részletes példákat és dokumentációt tartalmaz.

Kötegelés események közzétételekor

Ha a függvény csak egyetlen eseményt tesz közzé, a kötés beállítása egy érték visszaadására gyakori módszer, amely akkor hasznos, ha a függvény végrehajtása mindig az eseményt küldő utasítással végződik. Ezt a technikát csak olyan szinkron függvényekhez szabad használni, amelyek csak egy eseményt adnak vissza.

A kötegelést javasoljuk, hogy javítsa a teljesítményt, ha több eseményt küld egy streambe. A kötegelés lehetővé teszi, hogy a kötés a lehető leghatékonyabb módon tegye közzé az eseményeket.

A kimeneti kötés több esemény Event Hubsba való küldésére való használatának támogatása c#, Java, Python és JavaScript nyelven érhető el.

Több esemény kimenete a folyamatban lévő modellel (C#)

Az ICollector és az IAsyncCollector típust akkor használja, ha több eseményt küld egy C#-függvényből.

  • Az ICollector<T>. Az Add() metódus szinkron és aszinkron függvényekben is használható. A hívás után azonnal végrehajtja a hozzáadási műveletet.
  • Az IAsyncCollector<T>. Az AddAsync() metódus előkészíti a közzéteendő eseményeket az eseménystreamben. Ha aszinkron függvényt ír, az IAsyncCollector használatával jobban kezelheti a közzétett eseményeket.

Az egy- és több esemény közzétételére használható C#-példákért tekintse meg az Azure Event Hubs Azure Functions-hez készült kimeneti kötését.

Több esemény kimenete az izolált feldolgozói modellel (C#)

A Functions futtatókörnyezet verziójától függően az izolált feldolgozó modell támogatja a kimeneti kötésnek átadott paraméterek különböző típusait. Több esemény esetén a rendszer tömböt használ a készlet beágyazásához. Javasoljuk, hogy tekintse át az izolált modell kimeneti kötési attribútumait és használati adatait, és jegyezze fel a bővítményverziók közötti különbségeket.

Szabályozás és hátnyomás

A szabályozási szempontok a kimeneti kötésekre vonatkoznak, nem csak az Event Hubsra, hanem az Azure-szolgáltatásokra, például az Azure Cosmos DB-re is. Fontos, hogy megismerkedjen azokra a korlátokra és kvótákra, amelyek ezekre a szolgáltatásokra vonatkoznak, és ennek megfelelően tervezze meg őket.

A folyamaton belüli modell alsóbb rétegbeli hibáinak kezeléséhez az AddAsync és a FlushAsync a .NET Functions kivételkezelőjében tördelhető, hogy az IAsyncCollector kivételeit észlelje. Egy másik lehetőség az Event Hubs SDK-k közvetlen használata kimeneti kötések használata helyett.

Ha az izolált modellt használja a függvényekhez, akkor strukturált kivételkezeléssel kell felelősségteljesen elkapni a kivételeket a kimeneti értékek visszaadásakor.

Függvénykód

Ez a szakasz azokat a kulcsfontosságú területeket ismerteti, amelyeket figyelembe kell venni az Event Hubs által aktivált függvény eseményeinek feldolgozására szolgáló kód írása során.

Aszinkron programozás

Javasoljuk, hogy írja meg a függvényt aszinkron kód használatára, és kerülje a hívások blokkolását, különösen I/O-hívások esetén.

A függvények aszinkron feldolgozásához kövesse az alábbi irányelveket:

  • Az összes aszinkron vagy az összes szinkron: Ha egy függvény aszinkron futtatására van konfigurálva, az összes I/O-hívásnak aszinkronnak kell lennie. A legtöbb esetben a részben aszinkron kód rosszabb, mint a teljes mértékben szinkron kód. Válasszon aszinkron vagy szinkron lehetőséget, és tartsa be a választást.
  • A hívások blokkolásának elkerülése: A hívások blokkolása csak a hívás befejeződése után tér vissza a hívóhoz, szemben az azonnal visszatérő aszinkron hívásokkal. A C#-ban például a Task.Result vagy a Task.Wait aszinkron művelettel hívható meg.

További információ a hívások blokkolásáról

Az aszinkron műveletek meghívásának blokkolása a szálkészlet éhezéséhez és a függvényfolyamat összeomlásához vezethet. Az összeomlás azért következik be, mert egy blokkoló híváshoz létre kell hozni egy másik szálat, hogy kompenzálja a most várakozó eredeti hívást. Ennek eredményeképpen kétszer annyi szálra van szükség a művelet elvégzéséhez.

A szinkronizálás aszinkron módon történő elkerülése különösen fontos az Event Hubs használata esetén, mivel a függvény összeomlása nem frissíti az ellenőrzőpontot. Amikor a függvényt legközelebb meghívják, az ebben a ciklusban végződhet, és elakadhat, vagy lassan haladhat végig, mivel a függvényvégrehajtások végül időtúllépést eredményeznek.

A jelenség hibaelhárítása általában az eseményindító beállításainak áttekintésével és a partíciószám növelésével járó kísérletek futtatásával kezdődik. A vizsgálatok számos kötegelési beállítást is megváltoztathatnak, például a köteg maximális méretét vagy az előcsatornaszámot. A benyomás az, hogy ez egy átviteli sebesség problémája vagy konfigurációs beállítás, amelyet csak ennek megfelelően kell hangolni. Az alapvető probléma azonban magában a kódban van, és ott kell megoldani.

Közreműködők

Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködő írta.

Fő szerző:

A nem nyilvános LinkedIn-profilok megtekintéséhez jelentkezzen be a LinkedInbe.

Következő lépések

A folytatás előtt tekintse át az alábbi kapcsolódó cikkeket: