Osvědčené postupy a diagnostické nástroje Durable Functions
Tento článek podrobně popisuje některé osvědčené postupy při používání Durable Functions. Popisuje také různé nástroje, které pomáhají diagnostikovat problémy při vývoji, testování a použití v produkčním prostředí.
Osvědčené postupy
Použití nejnovější verze rozšíření Durable Functions a sady SDK
Aplikace funkcí používá ke spouštění Durable Functions dvě komponenty. Jednou je sada Durable Functions SDK, která umožňuje psát funkce orchestrátoru, aktivity a entit pomocí cílového programovacího jazyka. Druhým je rozšíření Durable, což je komponenta modulu runtime, která ve skutečnosti spouští kód. S výjimkou aplikací v procesu .NET se sada SDK a rozšíření skládají nezávisle na verzích.
Udržování aktuálnost s nejnovějším rozšířením a sadou SDK zajišťuje, že vaše aplikace bude těžit z nejnovějších vylepšení výkonu, funkcí a oprav chyb. Upgrade na nejnovější verze také zajišťuje, aby Microsoft mohl shromažďovat nejnovější diagnostickou telemetrii, která pomáhá urychlit proces šetření při otevření případu podpory v Azure.
- Pokyny k získání nejnovější verze rozšíření najdete v tématu Upgrade verze rozšíření Durable Functions.
- Abyste měli jistotu, že používáte nejnovější verzi sady SDK, zkontrolujte správce balíčků jazyka, který používáte.
Dodržování omezení kódu Durable Functions
Chování přehrání kódu orchestrátoru vytváří omezení pro typ kódu, který můžete psát ve funkci orchestrátoru. Příkladem omezení je, že vaše funkce orchestrátoru musí používat deterministické rozhraní API, aby při každém přehrání vytvořil stejný výsledek.
Poznámka:
Durable Functions Roslyn Analyzer je analyzátor živého kódu, který vede uživatele jazyka C#, aby dodržovali specifická omezení kódu Durable Functions. Pokyny k jeho povolení v sadě Visual Studio a Visual Studio Code najdete v analyzátoru Durable Functions Roslyn.
Seznamte se s nastavením výkonu Azure Functions v programovacím jazyce.
Při použití výchozího nastavení může modul runtime jazyka, který vyberete, u vašich funkcí uplatňovat striktní omezení souběžnosti. Příklad: Povolení spuštění 1 funkce najednou na daném virtuálním počítači. Tato omezení se obvykle dají uvolnit vyladěním nastavení souběžnosti a výkonu jazyka. Pokud chcete optimalizovat výkon aplikace Durable Functions, budete se muset seznámit s těmito nastaveními.
Níže je seznam některých jazyků, které často využívají vyladění nastavení výkonu a souběžnosti, a jejich pokynů k tomu.
Záruka jedinečných názvů centra úloh na aplikaci
Stejný účet úložiště může sdílet několik aplikací Durable Function. Ve výchozím nastavení se název aplikace používá jako název centra úloh, což zajišťuje, že nedojde k náhodnému sdílení center úloh. Pokud potřebujete explicitně nakonfigurovat názvy centra úloh pro vaše aplikace v host.json, musíte zajistit, aby názvy byly jedinečné. V opačném případě bude více aplikací soutěžit o zprávy, což může vést k nedefinovaným chování, včetně neočekávaně zablokovaných orchestrací ve stavu Čeká na vyřízení nebo Spuštěno.
Jedinou výjimkou je, když nasadíte kopie stejné aplikace ve více oblastech. V tomto případě můžete pro kopie použít stejné centrum úloh.
Postupujte podle pokynů při nasazování změn kódu do spuštěných orchestrátorů.
Je nevyhnutelné, že funkce budou přidány, odebrány a změněny v průběhu životnosti aplikace. Mezi běžné zásadní změny patří změna aktivit nebo podpisů funkcí entity a změna logiky orchestrátoru. Tyto změny jsou problém, pokud mají vliv na orchestrace, které jsou stále spuštěné. Pokud se nasadí nesprávně, změny kódu můžou vést k selhání orchestrací s nedeterministickou chybou, zablokováním na neomezenou dobu, snížením výkonu atd. Při provádění změn kódu, které můžou mít vliv na spouštění orchestrací, najdete doporučené strategie zmírnění rizik.
Udržujte vstupy a výstupy funkcí co nejmenší
Pokud zadáte velké vstupy a výstupy do a z rozhraní API Durable Functions, můžete narazit na problémy s pamětí.
Vstupy a výstupy rozhraní API Durable Functions se serializují do historie orchestrace. To znamená, že velké vstupy a výstupy můžou v průběhu času výrazně přispět k rostoucí historii orchestrátoru, která způsobuje výjimky paměti během opakovaného přehrávání.
Pokud chcete zmírnit dopad velkých vstupů a výstupů na rozhraní API, můžete se rozhodnout delegovat některé práce na dílčí orchestrátory. To pomáhá vyrovnávat zatížení paměti historie z jednoho orchestrátoru na více, a proto udržovat nároky na paměť jednotlivých historie malé.
To znamená, že osvědčeným postupem pro práci s velkými daty je zachovat je v externím úložišti a v případě potřeby materializovat pouze tato data v rámci aktivit. Při použití tohoto přístupu můžete místo komunikace samotných dat jako vstupů a/nebo výstupů rozhraní API Durable Functions předat nějaký jednoduchý identifikátor, který vám umožní načíst tato data z externího úložiště v případě potřeby ve vašich aktivitách.
Zachování malých dat entity
Stejně jako u vstupů a výstupů do rozhraní API Durable Functions, pokud je explicitní stav entity příliš velký, může dojít k problémům s pamětí. Konkrétně musí být stav entity serializován a de serializován z úložiště v libovolném požadavku, takže velké stavy přidávají latenci serializace do každého vyvolání. Proto pokud entita potřebuje sledovat velká data, doporučuje se data přesměrovat do externího úložiště a sledovat v entitě nějaký jednoduchý identifikátor, který umožňuje materializovat data z úložiště v případě potřeby.
Vyladění nastavení souběžnosti Durable Functions
Jedna instance pracovního procesu může souběžně spouštět více pracovních položek, aby se zvýšila efektivita. Zpracování příliš mnoha pracovních položek současně riskuje vyčerpání prostředků, jako je kapacita procesoru, síťová připojení atd. V mnoha případech by to nemělo být problém, protože škálování a omezení pracovních položek se za vás zpracovává automaticky. To znamená, že pokud dochází k problémům s výkonem (například dokončení orchestrátorů trvá příliš dlouho, jsou zablokované ve stavu čekání atd.) nebo provádíte testování výkonu, můžete v souboru host.json nakonfigurovat limity souběžnosti.
Poznámka:
Nejedná se o náhradu za vyladění nastavení výkonu a souběžnosti modulu runtime jazyka ve službě Azure Functions. Nastavení souběžnosti Durable Functions určuje, kolik práce je možné přiřadit danému virtuálnímu počítači najednou, ale nezjistí stupeň paralelismu při zpracování, který funguje uvnitř virtuálního počítače. Druhá možnost vyžaduje vyladění nastavení výkonu modulu runtime jazyka.
Použití jedinečných názvů pro externí události
Stejně jako u funkcí aktivit mají externí události alespoň jednou záruku doručení. To znamená, že za určitých výjimečných podmínek (ke kterým může dojít při restartování, škálování, chybovém ukončení atd.), může vaše aplikace obdržet duplicity stejné externí události. Proto doporučujeme, aby externí události obsahovaly ID, které umožňuje jejich ruční odstranění v orchestrátorech.
Poznámka:
Zprostředkovatel úložiště MSSQL využívá externí události a aktualizuje stav orchestratoru transakčním způsobem, takže v back-endu by nemělo existovat žádné riziko duplicitních událostí, na rozdíl od výchozího poskytovatele úložiště Azure Storage. To znamená, že se přesto doporučuje, aby externí události měly jedinečné názvy, aby byl kód přenosný napříč back-endy.
Investujte do zátěžového testování
Stejně jako u všeho, co souvisí s výkonem, ideální nastavení souběžnosti a architechtura vaší aplikace nakonec závisí na úloze vaší aplikace. Proto se doporučuje, aby uživatelé investovali do nástroje pro testování výkonu, který simuluje očekávané úlohy, a aby ho použili ke spouštění experimentů s výkonem a spolehlivostí pro svou aplikaci.
Vyhněte se citlivým datům ve vstupech, výstupech a výjimkách.
Vstupy a výstupy (včetně výjimek) do a z rozhraní API Durable Functions jsou trvale trvalé ve zvoleném poskytovateli úložiště. Pokud tyto vstupy, výstupy nebo výjimky obsahují citlivá data (například tajné kódy, připojovací řetězec, identifikovatelné osobní údaje atd.), bude je moct získat každý, kdo má ke zdrojům vašeho poskytovatele úložiště přístup pro čtení. Pokud chcete bezpečně pracovat s citlivými daty, doporučujeme uživatelům načíst data v rámci funkcí aktivit z Azure Key Vaultu nebo proměnných prostředí a nikdy tato data nesdělovat přímo orchestrátorům nebo entitám. To by mělo pomoct zabránit úniku citlivých dat do prostředků úložiště.
Poznámka:
Tyto pokyny platí také pro rozhraní API orchestrátoru CallHttp
, které také uchovává datové části požadavků a odpovědí v úložišti. Pokud vaše cílové koncové body HTTP vyžadují ověřování, což může být citlivé, doporučuje se, aby uživatelé implementovali volání HTTP v rámci aktivity nebo používali integrovanou podporu spravované identity, kterou CallHttp
nabízí , což neuchovává žádné přihlašovací údaje do úložiště.
Tip
Podobně se vyhněte protokolování dat obsahujících tajné kódy jako kdokoli, kdo má ke svým protokolům přístup pro čtení (například v Application Insights), by bylo možné tyto tajné kódy získat.
Diagnostické nástroje
K dispozici je několik nástrojů, které vám pomůžou diagnostikovat problémy.
Protokoly durable Functions a Durable Task Framework
Rozšíření Durable Functions
Rozšíření Durable generuje události sledování, které umožňují trasovat kompletní spuštění orchestrace. Tyto události sledování lze najít a dotazovat pomocí nástroje Application Insights Analytics na webu Azure Portal. Podrobnosti o vygenerovaných dat sledování je možné nakonfigurovat v logger
části (Funkce 1.x) nebo logging
(Funkce 2.0) souboru host.json. Viz podrobnosti o konfiguraci.
Durable Task Framework
Od verze 2.3.0 rozšíření Durable jsou protokoly generované podkladovou architekturou Durable Task Framework (DTFx) také k dispozici pro kolekci. Podrobnosti o tom, jak tyto protokoly povolit
portál Azure
Diagnóza a řešení problémů
Azure Function App Diagnostics je užitečný prostředek na webu Azure Portal pro monitorování a diagnostiku potenciálních problémů ve vaší aplikaci. Poskytuje také návrhy, které vám pomůžou vyřešit problémy na základě diagnózy. Viz Diagnostika aplikací funkcí Azure.
Trasování orchestrace trvalých funkcí
Azure Portal poskytuje podrobnosti o trasování orchestrace, které vám pomůžou pochopit stav každé instance orchestrace a sledovat kompletní spuštění. Když se podíváte na seznam funkcí v aplikaci Azure Functions, zobrazí se sloupec Monitorování , který obsahuje odkazy na trasování. Abyste mohli tyto informace získat, musíte mít pro aplikaci povolené Application Insights.
Rozšíření Durable Functions Monitor
Toto je rozšíření editoru Visual Studio Code, které poskytuje uživatelské rozhraní pro monitorování, správu a ladění instancí orchestrace.
Analyzátor Roslyn
Durable Functions Roslyn Analyzer je analyzátor živého kódu, který vede uživatele jazyka C#, aby dodržovali specifická omezení kódu Durable Functions. Pokyny k jeho povolení v sadě Visual Studio a Visual Studio Code najdete v analyzátoru Durable Functions Roslyn.
Technická podpora
Pokud máte dotazy a podporu, můžete problém otevřít v některém z úložišť GitHubu níže. Při hlášení chyby v Azure, včetně informací, jako jsou ID ovlivněných instancí, časové rozsahy v UTC ukazující problém, název aplikace (pokud je to možné) a oblast nasazení výrazně urychlí šetření.