Ez a cikk útmutatást nyújt a skálázhatóság és a teljesítmény optimalizálásához, ha együtt használja Azure Event Hubs és Azure Functions az alkalmazásokban.
Függvények csoportosítása
A függvények általában egy munkaegységet foglalnak bele egy eseményfeldolgozó adatfolyamba. Egy függvény például átalakíthat egy eseményt új adatstruktúrává, vagy bővítheti az alárendelt alkalmazások adatait.
A Függvényekben a függvényalkalmazások biztosítják 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 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 csoportosítást a hozzáférési jogosultságok, az üzembe helyezés és a kód meghívására használt használati minták alapján végezheti el.
A függvények csoportosítással és más szempontokkal kapcsolatos ajánlott eljárásaival kapcsolatos útmutatásért lásd: Ajánlott eljárások a megbízható Azure Functions ésa Azure Functions teljesítményének és megbízhatóságának javítása.
Az alábbi lista útmutatást nyújt a függvények csoportosításához. Az útmutató a tárolási és a fogyasztói csoportok szempontjait veszi figyelembe:
Egyetlen függvényt üzemeltet 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ése érdekében 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 függvényalkalmazások közötti megosztását. 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, mivel az ilyen függvények nagy mennyiségű tárolási tranzakcióval rendelkezhetnek az ellenőrzőpontok 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 különböző 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 a saját tempójukban és saját eltolásukkal olvassák el egymástól függetlenül. A fogyasztói csoportokkal kapcsolatos további információkért lásd: Szolgáltatások és terminológia a Azure Event Hubs.
A fogyasztói csoportokhoz egy vagy több fogyasztói alkalmazás van társítva, és a fogyasztói alkalmazások egy vagy több fogyasztói csoportot használhatnak. Egy streamfeldolgozási megoldásban minden 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 ábrán két függvényalkalmazás látható, amelyek egy eseményközpontból olvasnak, és mindegyik alkalmazás saját dedikált fogyasztói csoporttal rendelkezik:
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 alkalmazásnak kell lennie saját hozzárendelt fogyasztói csoporttal, hogy biztosítsa az egyes fogyasztó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ítenek az optimális teljesítmény és skálázás alapjainak beállításában.
Függvényüzemeltési csomagok
Minden függvényalkalmazást a három üzemeltetési csomag egyikének megfelelően üzemeltetünk. További információ ezekről a csomagokról: Azure Functions üzemeltetési lehetőségek. Jegyezze fel, hogyan méretezhető a három lehetőség.
A használatalapú csomag az alapértelmezett. A használatalapú csomagban lévő függvényalkalmazások egymástól függetlenül méretezhető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 App Service csomagban futtathatja normál App Service díjtételek mellett. Fontos megjegyezni, hogy az ezekben a csomagokban található függvényalkalmazások osztoznak a csomaghoz lefoglalt erőforrásokon. Ha a függvények eltérő terhelési profilokkal vagy egyedi követelményekkel rendelkeznek, a legjobb, ha különböző tervekben üzemelteti őket, különösen streamfeldolgozó alkalmazásokban.
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 Függvények 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 kapcsolatáról az Apache Kafka Azure Event Hubs című témakörben talál további információt.
Az átviteli egységek (TU-k) ismertetése
Az Event Hubs Standard szinten az átviteli sebesség a beírt és a névtérből beolvasott adatmennyiségként van besorolva időegységenként. A termékváltozatok 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érben lévő összes eseményközpont 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 az eseményközpontban közzétett és onnan beolvasott bájtok és események számát befolyásolják.
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, szintén bele kell foglalni a számításba.
További információ: Event Hubs átviteli egységei: Átviteli egységek.
Vertikális felskálázás automatikus feltöltéssel
Az automatikus feltölté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 feltöltés használata 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 feltöltés segít kezelni a túlépítéssel kapcsolatos problémákat.
Az automatikus feltölté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 feltöltés azonban az automatikus skálázással ellentétben nem skáláz le, 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 számú TU-t, fontolja meg az Event Hubs Premium vagya 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 nem módosítható, kivéve a Prémium és a Dedikált szinteket. 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 Használat és Prémium szintű üzemeltetési csomagokban a függvényalkalmazás-példányok dinamikusan felskálázhatók a partíciók számának megfelelően, ha szükséges. A dedikált üzemeltetési csomag függvényeket futtat egy App Service csomagban, és megköveteli a példányok manuális konfigurálását vagy egy automatikus skálázási séma beállítását. További információ: Dedikált üzemeltetési csomagok Azure Functions.
Végső soron a partíciók és a függvényalkalmazás-példányok száma közötti egy-az-egyhez kapcsolat az ideális cél a streamfeldolgozó megoldás 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ényalkalmazások 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 az alábbi ábrán látható módon:
Ú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 fogyasztók száma (függvényalkalmazás-példányok), minél több partíció van, annál nagyobb lehet az egyidejű átviteli sebesség. Ez 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: A függvényalkalmazás-példányok számának növekedésével a tervben lévő erőforrások memóriaigénye is nő. Egy bizonyos ponton a túl sok partíció ronthatja a fogyasztók teljesítményét.
- Fennáll annak a kockázata, hogy a lefelé irányuló szolgáltatások visszanyomása a következő: A nagyobb átviteli sebesség generálásakor fennáll annak a kockázata, hogy túlterheli az alárendelt szolgáltatásokat, vagy visszaterhelé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ásokró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 a kis mennyiségű esemény kombinációja olyan adatokhoz vezethet, amelyek ritkán oszlanak el a partíciók között. Ehelyett kisebb számú partíció 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 az átviteli sebességet a fogyasztók számára.
Ha egy eseménykészlet megrendelésére van szükség, az esemény előállítója 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. Csak akkor használja ezt a módszert, ha az események sorrendjét meg kell őrizni.
A Functions esetében a rendezés akkor történik meg, ha az események egy adott partíción vannak közzétéve, és egy Event Hubs által aktivált függvény bérletet kap ugyanahhoz a partícióhoz. Jelenleg nem lehet konfigurálni egy partíciót az Event Hubs kimeneti kötésével. 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 működését.
Aktivált függvények kötegelése
Konfigurálhat olyan függvényeket, amelyeket egy eseményközpont eseménykötegek vagy egy esemény egyszerre történő feldolgozására aktivál. Az események kötegének feldolgozása hatékonyabb, mert kiküszöböli a függvényhívások többletterhelé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 nyelvek szerint változik:
- 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álódik, ha egy tömb van kijelölve az EventHubTrigger attribútum típusához.
További információ a kötegelés engedélyezéséről: Azure Event Hubs eseményindító Azure Functions.
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 Event Hubs eseményindító-kötésének teljesítményjellemzőiben:
- maxEventBatchSize: Ez a beállítás azt a maximális számú eseményt jelöli, amelyet a függvény a meghívásakor fogadhat. Ha a fogadott események száma ennél kevesebb, 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: A teljesítményre való optimalizálás során az előmunkálatszám az egyik legfontosabb beállítás. A mögöttes AMQP-csatorna erre az értékre hivatkozik annak meghatározásához, hogy hány üzenetet kell beolvasni és gyorsítótárazni az ügyfél számára. Az előbetöltések számának nagyobbnak vagy egyenlőnek kell lennie a maxEventBatchSize értéknél, és általában ennek az összegnek a többszörösére van á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 partíciószinten hoz létre ellenőrzőpontot a fogyasztói csoport minden olvasója számára. 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, tekintse meg az Eseményközpont által aktivált Azure-függvény: Visszajátszások és újrapróbálkozások (blogbejegyzés) című témakört.
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 ezeket a beállításokat. Az alapértelmezett értékek a legtöbb eseményfeldolgozási megoldás esetében ésszerű kiindulópontot jelentenek.
Ellenőrző pontok használata
Ellenőrzőpontok jelzik vagy véglegesítik az olvasói pozíciókat egy partícióesemény-sorozatban. A Functions-gazdagép feladata, hogy az események feldolgozásakor és a kötegelt ellenőrzőpont gyakoriságának beállításával ellenőrizze az ellenőrzőpontot. Az ellenőrzőpontokkal kapcsolatos további információkért lásd: Szolgáltatások és terminológia Azure Event Hubs.
Az alábbi fogalmak segíthetnek megérteni az ellenőrzőpontok közötti kapcsolatot, valamint azt, hogy a függvény hogyan dolgozza fel az eseményeket:
- A kivételek továbbra is a sikerhez számítanak: Ha a függvényfolyamat nem összeomlik az események feldolgozása közben, 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ődésekor 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: Nagy mennyiségű eseménystreamelési megoldás esetén 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 meghív egy függvényt az Event Hubs-eseményindító kötésével, a legutóbbi ellenőrzőponttal határozza meg, hogy hol folytassa a feldolgozást. Minden fogyasztó eltolását a rendszer az egyes fogyasztói csoportok partíciószintjén menti. A visszajátszások akkor fordulnak elő, ha a függvény legutóbbi hívása során nem történik ellenőrzőpont, és a függvény újra meghívódik. Az ismétlődésekkel és deduplikációs technikákkal kapcsolatos további információkért lásd: Idempotencia.
Az ellenőrzőpont-kezelés megértése kritikus fontosságúvá válik, ha megfontolja a hibakezelés és az újrapróbálkozás ajánlott eljárásait. Ezt a témakört a cikk későbbi részében tárgyaljuk.
Telemetriai mintavételezés
A Functions beépített támogatást nyújt az Application Insightshoz, amely az Azure Monitor bővítménye, 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 futtatókörnyezeti kivételekkel és egyebekkel kapcsolatos információkat. További információ: Application Insights – áttekintés.
Ez a hatékony képesség néhány kulcsfontosságú konfigurációs lehetőséget kínál, amelyek befolyásolják a teljesítményt. A monitorozás és a teljesítmény néhány fontos beállítása és megfontolandó szempontja a következő:
- Telemetria-mintavételezés engedélyezése: Nagy átviteli sebességű forgatókönyvek esetén ki kell értékelnie a telemetriai adatok mennyiségét és a szükséges információkat. Fontolja meg az Application Insights telemetriai mintavételezési funkciójának használatát, hogy elkerülje a függvény teljesítményének romlását a felesleges telemetriával és metrikákkal.
- Összesítési beállítások konfigurálása: Vizsgálja meg és konfigurálja az adatok 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 a kapcsolati sztring egy tárfiókba tárolja, amelyet az Azure SDK a WebJobs-irányítópult naplóinak megőrzésére használ. Ha az Application Insightst használja a WebJobs irányítópult helyett, 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 megfelelő mennyiségű telemetria folyamatos értékelé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 Event Hubs kimeneti kötésével Azure Functions egyszerűbbé teheti 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 az ügyfél és a kapcsolat életciklusát is kezeli, és csökkenti a portfogyással é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ít könnyebben írni és karbantartani a kódot.
- Adagoló: A kötegelés több nyelven is támogatott az eseménystreamekben való hatékony közzétételhez. A kötegelés javíthatja a teljesítményt, és leegyszerű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 érték visszaadására való konfigurálása gyakori módszer, amely akkor hasznos, ha a függvény végrehajtása mindig az eseményt küldő utasítással fejeződik be. 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 C#, a Java, a Python és a JavaScript használatával több eseményt is küldhet az Event Hubsnak a kimeneti kötés használatával.
Több esemény kimenete (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ó. Amint meghívja, 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.
A C# használatával egy- és több esemény közzétételére vonatkozó példákért lásd: Azure Event Hubs kimeneti kötés Azure Functions.
Szabályozás és hátnyomás
A szabályozással kapcsolatos szempontok a kimeneti kötésekre vonatkoznak, nemcsak az Event Hubsra, hanem az Olyan Azure-szolgáltatásokra is, mint az Azure Cosmos DB. Fontos, hogy megismerkedjen azokra a korlátozásokra és kvótákra, amelyek ezekre a szolgáltatásokra vonatkoznak, és ennek megfelelően tervezze meg őket.
Az alsóbb rétegbeli hibák kezeléséhez az AddAsync és a FlushAsync a .NET-függvények kivételkezelőjében tördelhető, hogy kiszűrje az IAsyncCollector kivételeit. Egy másik lehetőség az Event Hubs SDK-k közvetlen használata kimeneti kötések használata helyett.
Függvénykód
Ez a szakasz azokat a fő 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ásakor.
Aszinkron programozás
Javasoljuk, hogy a függvényt aszinkron kód használatával írja meg, és kerülje a hívások blokkolását, különösen akkor, ha I/O-hívásokról van szó.
Az alábbiakban azokat az irányelveket kell követnie, amikor függvényt ír az aszinkron feldolgozáshoz:
- Minden aszinkron vagy ö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észlegesen aszinkron kód rosszabb, mint a teljes mértékben szinkron kód. Válasszon aszinkron vagy szinkron elemet, és tartsa meg a választást végig.
- Kerülje a hívások blokkolását: A blokkoló hívások csak a hívás befejezése után térnek vissza a hívóhoz, szemben az azonnal visszatérő aszinkron hívásokkal. A C# egyik példája a Task.Result vagy a Task.Wait aszinkron művelet meghívása.
További információ a hívások blokkolásáról
Az aszinkron műveletek blokkoló hívásainak használata a szálkészlet éhezéséhez és a függvényfolyamat összeomlásához vezethet. Az összeomlás azért történik, 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 esetében, mert a függvény összeomlása nem frissíti az ellenőrzőpontot. A függvény következő meghívásakor előfordulhat, hogy ebben a ciklusban végzi, és úgy tűnik, hogy elakadt, vagy lassan halad, 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 azt is eredményezhetik, hogy a kötegelési lehetőségek közül több is megváltozik, például a köteg maximális mérete vagy az előbetöltések száma. A benyomás az, hogy ez egy átviteli sebességgel kapcsolatos probléma 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ő:
- David Barkol | Fő megoldás – speciális GBB
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:
- A végrehajtások monitorozása az Azure Functionsban
- Azure Functions megbízható eseményfeldolgozás
- Azure Functions tervezése azonos bemenethez
- ASP.NET Core aszinkron útmutatást.
- Azure Event Hubs eseményindító Azure Functions