Szerkesztés

Share via


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

Azure Event Hubs
Azure Functions

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:

    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 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:

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 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ő:

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: