A Durable Functions ajánlott eljárásai és diagnosztikai eszközei
Ez a cikk a Durable Functions használatakor ajánlott eljárásokat ismerteti. Emellett a fejlesztési, tesztelési és éles használat során felmerülő problémák diagnosztizálására használható különféle eszközöket is ismertet.
Ajánlott eljárások
A Durable Functions bővítmény és az SDK legújabb verziójának használata
A függvényalkalmazások két összetevőt használnak a Durable Functions végrehajtásához. Az egyik a Durable Functions SDK , amely lehetővé teszi vezénylő, tevékenység és entitásfüggvények írását a cél programozási nyelv használatával. A másik a Durable bővítmény, amely a kódot ténylegesen végrehajtó futtatókörnyezeti összetevő. A folyamaton belüli .NET-alkalmazások kivételével az SDK és a bővítmény egymástól függetlenül verziószámozott.
A legújabb bővítmény és SDK naprakészen maradva biztosítja az alkalmazás számára a legújabb teljesítménybeli fejlesztések, funkciók és hibajavítások előnyeit. A legújabb verziókra való frissítés azt is biztosítja, hogy a Microsoft összegyűjtse a legújabb diagnosztikai telemetriát, hogy felgyorsítsa a vizsgálati folyamatot, amikor támogatási esetet nyit az Azure-ban.
- A durable functions bővítmény verziójának frissítése című témakörben talál útmutatást a legújabb bővítményverzió beszerzéséhez.
- Az SDK legújabb verziójának használatához ellenőrizze a használt nyelv csomagkezelőjét.
A Durable Functions kódkorlátozásainak betartása
A vezénylőkód visszajátszási viselkedése kényszereket hoz létre a vezénylő függvényben írható kód típusára. Egy kényszer például az, hogy a vezénylő függvénynek determinisztikus API-kat kell használnia, hogy minden újrajátszáskor ugyanazt az eredményt hozza létre.
Feljegyzés
A Durable Functions Roslyn Analyzer egy élő kódelemző, amellyel a C#-felhasználók betarthatják a Durable Functions adott kódkorlátozásait. A Visual Studióban és a Visual Studio Code-on való engedélyezésére vonatkozó utasításokat a Durable Functions Roslyn Analyzerben találja.
A programozási nyelv Azure Functions-teljesítménybeállításainak megismerése
Az alapértelmezett beállítások használatával a választott nyelvi futtatókörnyezet szigorú egyidejűségi korlátozásokat alkalmazhat a függvényekre. Például: egy adott virtuális gépen egyszerre csak egy függvény végrehajtásának engedélyezése. Ezek a korlátozások általában enyhíthetők a nyelv egyidejűségének és teljesítménybeállításainak finomhangolásával. Ha optimalizálni szeretné a Durable Functions-alkalmazás teljesítményét, ismernie kell ezeket a beállításokat.
Az alábbiakban néhány nyelv nem teljes listáját találja, amelyek gyakran kihasználják a teljesítmény- és egyidejűségi beállítások finomhangolását, valamint az erre vonatkozó irányelveiket.
Egyedi feladatközpont-nevek garantálása alkalmazásonként
Több Durable Function-alkalmazás is használhatja ugyanazt a tárfiókot. Alapértelmezés szerint az alkalmazás neve lesz a feladatközpont neve, ami biztosítja, hogy a tevékenységközpontok véletlen megosztása ne történjen meg. Ha kifejezetten konfigurálnia kell a feladatközpontok nevét az alkalmazásokhoz host.json, győződjön meg arról, hogy a nevek egyediek. Ellenkező esetben a több alkalmazás verseng az üzenetekért, ami meghatározatlan viselkedést eredményezhet, beleértve a vezényléseket is, amelyek váratlanul "elakadnak" a függőben lévő vagy a futó állapotban.
Az egyetlen kivétel, ha ugyanazon alkalmazás példányait több régióban helyezi üzembe; ebben az esetben ugyanazt a feladatközpontot használhatja a másolatokhoz.
Útmutatást követve telepíthet kódmódosításokat futó vezénylőkre
Elkerülhetetlen, hogy a függvények hozzáadva, eltávolítva és módosítva legyenek egy alkalmazás élettartama során. Gyakori kompatibilitástörő változások például a tevékenység- vagy entitásfüggvény-aláírások módosítása és a vezénylési logika módosítása. Ezek a módosítások problémát jelentenek, ha hatással vannak a még futó vezénylésekre. Helytelen üzembe helyezés esetén a kódmódosítások nem determinisztikus hibával meghiúsulhatnak, határozatlan ideig elakadhatnak, teljesítménycsökkenést okozhatnak stb. A javasolt kockázatcsökkentési stratégiákat olyan kódmódosítások végrehajtásakor érdemes figyelembe venni, amelyek hatással lehetnek a vezénylések futtatására.
A függvénybemenetek és -kimenetek lehető legkisebben tartása
Memóriaproblémákba ütközhet, ha nagy bemeneteket és kimeneteket biztosít a Durable Functions API-kba és azokból.
A Durable Functions API-k bemenetei és kimenetei szerializálva vannak a vezénylési előzményekben. Ez azt jelenti, hogy a nagy bemenetek és kimenetek idővel nagy mértékben hozzájárulhatnak a vezénylői előzmények kötetlen növekedéséhez, ami memóriakivételeket okozhat a visszajátszás során.
A nagy bemenetek és kimenetek API-kra gyakorolt hatásának mérséklése érdekében dönthet úgy, hogy néhány munkát delegál az alvezénylőknek. Ez segít kiegyensúlyozni az előzmények memóriaterhelését egyetlen vezénylőtől többig, így az egyes előzmények memóriaigényét kicsiben tartja.
Ez azt mondta, hogy a nagy méretű adatok kezelésének ajánlott eljárása az, ha külső tárolóban tartják, és csak akkor használják ezeket az adatokat a Tevékenységeken belül, ha szükséges. Ha ezt a megközelítést alkalmazza, ahelyett, hogy magát az adatokat a Durable Functions API-k bemeneteként és/vagy kimeneteként kommunikálja, átadhat néhány egyszerű azonosítót, amely lehetővé teszi az adatok külső tárolóból való lekérését, amikor szükséges a tevékenységekben.
Entitásadatok kicsiben tartása
A Durable Functions API-k bemeneteihez és kimeneteihez hasonlóan, ha egy entitás explicit állapota túl nagy, memóriaproblémák léphetnek fel. Az entitásállapotokat minden kérés esetén szerializálni és a tárolóból szerializálni kell, így a nagy állapotok szerializálási késést adnak minden egyes meghíváshoz. Ezért ha egy entitásnak nagy méretű adatokat kell nyomon követnie, javasoljuk, hogy az adatokat külső tárolóba töltse ki, és kövesse nyomon az entitás néhány egyszerűsített azonosítóját, amely lehetővé teszi, hogy szükség esetén a tárolóból származó adatokat hasznosítsa.
A Durable Functions egyidejűségi beállításainak finomhangolása
Egyetlen feldolgozópéldány egyszerre több munkaelemet is végrehajthat a hatékonyság növelése érdekében. A túl sok munkaelem egyidejű feldolgozása azonban azzal jár, hogy kimeríti az erőforrásokat, például a processzorkapacitást, a hálózati kapcsolatokat stb. Ez sok esetben nem okozhat gondot, mert a munkaelemek skálázása és korlátozása automatikusan megtörténik. Ha teljesítményproblémákat tapasztal (például túl sokáig tartó vezénylők, függőben vannak, stb.), vagy teljesítménytesztelést végez, konfigurálhatja az egyidejűségi korlátokat a host.json fájlban.
Feljegyzés
Ez nem helyettesíti a nyelvi futtatókörnyezet teljesítmény- és egyidejűségi beállításainak finomhangolását az Azure Functionsben. A Durable Functions egyidejűségi beállításai csak azt határozzák meg, hogy mennyi munka rendelhető hozzá egy adott virtuális géphez egyszerre, de nem határozza meg a virtuális gépen belüli feldolgozás párhuzamossági fokát. Az utóbbihoz a nyelvi futtatókörnyezet teljesítménybeállításainak finomhangolása szükséges.
Egyedi nevek használata külső eseményekhez
A tevékenységfüggvényekhez hasonlóan a külső események is legalább egyszer teljesítési garanciával rendelkeznek. Ez azt jelenti, hogy bizonyos ritka körülmények között (amelyek újraindítások, skálázás, összeomlások stb. során előfordulhatnak) az alkalmazás ugyanahhoz a külső eseményhez duplikátumokat kaphat. Ezért azt javasoljuk, hogy a külső események olyan azonosítót tartalmazzanak, amely lehetővé teszi, hogy manuálisan duplikálják őket a vezénylőkben.
Feljegyzés
Az MSSQL-tárolószolgáltató a külső eseményeket használja fel, és tranzakciósan frissíti a vezénylő állapotát, így ebben a háttérrendszerben nem merülhet fel ismétlődő események kockázata, ellentétben az alapértelmezett Azure Storage-társzolgáltatóval. Ennek ellenére továbbra is ajánlott, hogy a külső események egyedi névvel rendelkezzenek, hogy a kód hordozható legyen a háttérrendszerek között.
Befektetés a stressztesztelésbe
Mint minden teljesítményhez kapcsolódó, az alkalmazás ideális egyidejűségi beállításai és architechture-jei végső soron az alkalmazás számítási feladataitól függnek. Ezért javasoljuk, hogy a felhasználók olyan teljesítménytesztelési keretrendszerbe fektessenek be, amely szimulálja a várt számítási feladatukat, és hogy az alkalmazásukhoz teljesítmény- és megbízhatósági kísérleteket futtasson.
Bizalmas adatok elkerülése bemenetekben, kimenetekben és kivételekben
A Durable Functions API-k bemenetei és kimenetei (beleértve a kivételeket) tartósan megmaradnak a választott társzolgáltatóban. Ha ezek a bemenetek, kimenetek vagy kivételek bizalmas adatokat (például titkos kulcsokat, kapcsolati sztring, személyazonosításra alkalmas adatokat stb.) tartalmaznak, akkor bárki, aki olvasási hozzáféréssel rendelkezik a társzolgáltató erőforrásaihoz, beszerezheti őket. A bizalmas adatok biztonságos kezelése érdekében ajánlott, hogy a felhasználók lekérik az adatokat a tevékenységfüggvényeken belül az Azure Key Vaultból vagy a környezeti változókból, és soha ne kommunikáljanak közvetlenül a vezénylőkkel vagy entitásokkal. Ezzel megakadályozhatja, hogy bizalmas adatok szivárogjanak be a tárolási erőforrásokba.
Feljegyzés
Ez az útmutató az CallHttp
orchestrator API-ra is vonatkozik, amely a kérések és válaszok hasznos adatait is megőrzi a tárolóban. Ha a cél HTTP-végpontok hitelesítést igényelnek, ami érzékeny lehet, javasoljuk, hogy a felhasználók maguk is implementálják a HTTP-hívást egy tevékenységen belül, vagy használják a beépített felügyelt identitástámogatást CallHttp
, amely nem őriz meg hitelesítő adatokat a tárolóban.
Tipp.
Hasonlóképpen kerülje a titkos kulcsokat tartalmazó adatok naplózását, mivel bárki, aki olvasási hozzáféréssel rendelkezik a naplóihoz (például az Application Insightsban), képes lesz beszerezni ezeket a titkos kulcsokat.
Diagnosztikai eszközök
Számos eszköz áll rendelkezésre a problémák diagnosztizálásához.
Durable Functions és Durable Task Framework-naplók
Durable Functions-bővítmény
A Durable bővítmény követési eseményeket bocsát ki, amelyek lehetővé teszik a vezénylések végpontok közötti végrehajtásának nyomon követését. Ezek a nyomon követési események az Application Insights Analytics eszközzel találhatók és kérdezhetők le az Azure Portalon. A kibocsátott nyomkövetési adatok részletessége konfigurálható a logger
host.json fájl (Functions 1.x) vagy logging
(Functions 2.0) szakaszában. Lásd a konfiguráció részleteit.
Tartós feladat-keretrendszer
A Durable bővítmény 2.3.0-s verziójától kezdve a mögöttes Durable Task Framework (DTFx) által kibocsátott naplók is elérhetők a gyűjteményhez. A naplók engedélyezésének részletei.
Azure Portal
Problémák diagnosztizálása és megoldása
Az Azure Function App Diagnostics egy hasznos erőforrás az Azure Portalon, amely figyeli és diagnosztizálja az alkalmazás lehetséges problémáit. Emellett javaslatokat is nyújt a problémák diagnosztizáláson alapuló megoldásához. Lásd: Azure Function App Diagnostics.
Durable Functions vezénylési nyomkövetések
Az Azure Portal vezénylési nyomkövetési adatokat biztosít az egyes vezénylési példányok állapotának megértéséhez és a végpontok közötti végrehajtás nyomon követéséhez. Ha megtekinti az Azure Functions-alkalmazásban található függvények listáját, megjelenik egy Monitor oszlop, amely hivatkozásokat tartalmaz a nyomkövetésekre. Az információk beszerzéséhez engedélyeznie kell az Application Insights szolgáltatást az alkalmazás számára.
Durable Functions Monitor bővítmény
Ez egy Visual Studio Code-bővítmény , amely felhasználói felületet biztosít a vezénylési példányok figyeléséhez, kezeléséhez és hibakereséséhez.
Roslyn Analyzer
A Durable Functions Roslyn Analyzer egy élő kódelemző, amellyel a C#-felhasználók betarthatják a Durable Functions adott kódkorlátozásait. A Visual Studióban és a Visual Studio Code-on való engedélyezésére vonatkozó utasításokat a Durable Functions Roslyn Analyzerben találja.
Támogatás
Kérdések és támogatás esetén megnyithat egy problémát az alábbi GitHub-adattárak egyikében. Ha hibajelentést tesz az Azure-ban, beleértve az olyan információkat, mint az érintett példányazonosítók, a problémát jelző UTC időtartományok, az alkalmazás neve (ha lehetséges) és az üzembe helyezési régió jelentősen felgyorsítja a vizsgálatot.