Osvědčené postupy pro spolehlivé služby Azure Functions
Azure Functions je prostředí založené na událostech na vyžádání, které rozšiřuje stávající aplikační platformu služby Aplikace Azure service s možnostmi implementace kódu aktivovaného událostmi, ke kterým dochází v Azure, ve službě třetích stran a v místních systémech. Funkce umožňují vytvářet řešení připojením ke zdrojům dat nebo řešením pro zasílání zpráv, což usnadňuje zpracování a reakci na události. Funkce běží v datových centrech Azure, která jsou složitá s mnoha integrovanými komponentami. V hostované cloudovém prostředí se předpokládá, že virtuální počítače se můžou občas restartovat nebo přesunout a dojde k upgradům systémů. Aplikace funkcí také pravděpodobně závisejí na externích rozhraních API, službách Azure a dalších databázích, které jsou také náchylné k pravidelné nespolehlivosti.
Tento článek podrobně popisuje některé osvědčené postupy pro navrhování a nasazování efektivních aplikací funkcí, které zůstávají v pořádku a dobře fungují v cloudovém prostředí.
Volba správného plánu hostování
Při vytváření aplikace funkcí v Azure musíte zvolit plán hostování vaší aplikace. Zvolený plán má vliv na výkon, spolehlivost a náklady. Toto jsou plány hostování poskytované službou Azure Functions:
V kontextu platformy Služby App Service je plán Premium používaný k dynamickému hostování vašich funkcí plánem Elastic Premium (EP). Existují další plány Dedicated (App Service), které se nazývají Premium. Další informace najdete v článku o plánu Premium.
Zvolený plán hostování určuje následující chování:
- Způsob škálování aplikace funkcí na základě poptávky a způsobu, jakým se spravuje přidělování instancí
- Prostředky dostupné pro každou instanci aplikace funkcí.
- Podpora pokročilých funkcí, jako je připojení k virtuální síti Azure.
Další informace o výběru správného plánu hostování a podrobném porovnání plánů najdete v tématu Možnosti hostování služby Azure Functions.
Při vytváření aplikace funkcí je důležité zvolit správný plán. Služba Functions poskytuje omezenou možnost přepnout plán hostování, a to především mezi plány Consumption a Elastic Premium. Další informace najdete v tématu Plánování migrace.
Správně nakonfigurovat úložiště
Funkce vyžadují, aby byl účet úložiště přidružený k vaší aplikaci funkcí. Připojení účtu úložiště používá hostitel služby Functions k operacím, jako je správa triggerů a spouštění funkcí protokolování. Používá se také při dynamickém škálování aplikací funkcí. Další informace najdete v tématu Aspekty úložiště pro Azure Functions.
Chybně nakonfigurovaný systém souborů nebo účet úložiště ve vaší aplikaci funkcí může ovlivnit výkon a dostupnost vašich funkcí. Nápovědu k řešení potíží s nesprávně nakonfigurovaným účtem úložiště najdete v článku o řešení potíží s úložištěm .
Nastavení připojení k úložišti
Aplikace funkcí, které se škálují dynamicky, můžou běžet buď z koncového bodu služby Azure Files ve vašem účtu úložiště, nebo ze souborových serverů přidružených k vašim instancím se škálováním na více instancí. Toto chování se řídí následujícími nastaveními aplikace:
Tato nastavení se podporují jenom v případech, kdy používáte plán Premium nebo plán Consumption ve Windows.
Když vytvoříte aplikaci funkcí na webu Azure Portal nebo pomocí Azure CLI nebo Azure PowerShellu, vytvoří se tato nastavení pro vaši aplikaci funkcí v případě potřeby. Při vytváření prostředků ze šablony Azure Resource Manageru (šablona ARM) musíte do šablony zahrnout WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
také.
Při prvním nasazení pomocí šablony ARM nezahrňte WEBSITE_CONTENTSHARE
, která se pro vás vygeneruje.
Následující příklady šablon ARM vám pomůžou správně nakonfigurovat tato nastavení:
- Plán Consumption
- Vyhrazený plán
- Plán Premium s integrací virtuální sítě
- Plán Consumption s slotem nasazení
Konfigurace účtu úložiště
Když vytváříte aplikaci funkcí, musíte vytvořit nebo propojit účet služby Azure Storage pro obecné účely, který podporuje služby Blob Storage, Queue Storage a Table Storage. Funkce spoléhají na Službu Azure Storage pro operace, jako je správa triggerů a spouštění funkcí protokolování. Účet úložiště připojovací řetězec pro vaši aplikaci funkcí se nachází v AzureWebJobsStorage
nastavení aplikace a WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
v nastavení aplikace.
Při vytváření tohoto účtu úložiště mějte na paměti následující aspekty:
Pokud chcete snížit latenci, vytvořte účet úložiště ve stejné oblasti jako aplikace funkcí.
Pokud chcete zvýšit výkon v produkčním prostředí, použijte pro každou aplikaci funkcí samostatný účet úložiště. To platí zejména u aktivovaných funkcí Durable Functions a Event Hubs.
U aktivovaných funkcí služby Event Hubs nepoužívejte účet s povoleným Data Lake Storage.
Zpracování velkých datových sad
Při spuštění v Linuxu můžete přidat další úložiště připojením sdílené složky. Připojení sdílené složky představuje pohodlný způsob, jak funkce zpracovat velkou existující datovou sadu. Další informace najdete v tématu Připojení sdílených složek.
Uspořádání funkcí
V rámci vašeho řešení pravděpodobně vyvíjíte a publikujete více funkcí. Tyto funkce se často kombinují do jedné aplikace funkcí, ale můžou se spouštět i v samostatných aplikacích funkcí. V plánech hostování Premium a Dedicated (App Service) může několik aplikací funkcí také sdílet stejné prostředky spuštěním ve stejném plánu. Způsob seskupení funkcí a aplikací funkcí může mít vliv na výkon, škálování, konfiguraci, nasazení a zabezpečení celkového řešení.
V případě plánu Consumption a Premium se všechny funkce v aplikaci funkcí dynamicky škálují společně.
Další informace o uspořádání funkcí najdete v tématu Osvědčené postupy organizace funkcí.
Optimalizace nasazení
Při nasazování aplikace funkcí je důležité mít na paměti, že jednotkou nasazení funkcí v Azure je aplikace funkcí. Všechny funkce v aplikaci funkcí se nasazují současně, obvykle ze stejného balíčku pro nasazení.
Zvažte tyto možnosti úspěšného nasazení:
Spusťte funkce z balíčku pro nasazení. Toto spuštění z přístupu k balíčkům přináší následující výhody:
- Snižuje riziko problémů s uzamčením kopírování souborů.
- Je možné nasadit přímo do produkční aplikace, která aktivuje restartování.
- Víme, že všechny soubory v balíčku jsou k dispozici pro vaši aplikaci.
- Zlepšuje výkon nasazení šablon ARM.
- Může zkrátit dobu studeného spuštění, zejména pro funkce JavaScriptu s velkými stromy balíčků npm.
Zvažte použití průběžného nasazování pro připojení nasazení k řešení správy zdrojového kódu. Průběžná nasazení také umožňují spouštět z balíčku nasazení.
U hostování plánů Premium zvažte přidání triggeru pro přípravu, aby se snížila latence při přidání nových instancí. Další informace najdete v tématu Trigger pro přípravu služby Azure Functions.
Pokud chcete minimalizovat výpadky nasazení a umožnit vrácení nasazení zpět, zvažte použití slotů nasazení. Další informace najdete v tématu Sloty nasazení azure Functions.
Psaní robustních funkcí
Při psaní kódu funkce můžete postupovat několika principy návrhu, které pomáhají s obecným výkonem a dostupností vašich funkcí. Mezi tyto principy patří:
- Vyhněte se dlouhotrvajícím funkcím.
- Plánování komunikace mezi funkcemi
- Zápis funkcí, které mají být bezstavové.
- Psát obranné funkce.
Vzhledem k tomu, že v cloud computingu jsou běžná přechodná selhání, měli byste při přístupu ke cloudovým prostředkům použít vzor opakování. Mnoho triggerů a vazeb již implementuje opakování.
Navrhování s důrazem na zabezpečení
Zabezpečení se nejlépe považuje za fázi plánování, a ne po tom, co jsou vaše funkce připravené k přechodu. Informace o tom, jak bezpečně vyvíjet a nasazovat funkce, najdete v tématu Zabezpečení azure Functions.
Zvažte souběžnost
Vzhledem k tomu, že poptávka vychází z vaší aplikace funkcí v důsledku příchozích událostí, aplikace funkcí běžící v plánech Consumption a Premium se škálují na více instancí. Je důležité pochopit, jak vaše aplikace funkcí reaguje na načtení a jak se triggery dají nakonfigurovat tak, aby zpracovávaly příchozí události. Obecný přehled najdete v tématu Škálování řízené událostmi ve službě Azure Functions.
Vyhrazené plány (App Service) vyžadují, abyste zajistili horizontální navýšení kapacity aplikací funkcí.
Počet pracovních procesů
V některých případech je efektivnější zpracovat zatížení vytvořením více procesů, označovaných jako procesy pracovních procesů jazyka, v instanci před horizontálním navýšením kapacity. Maximální povolený počet povolených jazykových procesů je řízen nastavením FUNCTIONS_WORKER_PROCESS_COUNT . Výchozí hodnota pro toto nastavení je 1
, což znamená, že se nepoužívá více procesů. Po dosažení maximálního počtu procesů se aplikace funkcí škáluje na více instancí, aby zvládla zatížení. Toto nastavení se nevztahuje na funkce knihovny tříd jazyka C#, které se spouští v hostitelském procesu.
Při použití FUNCTIONS_WORKER_PROCESS_COUNT
plánu Premium nebo plánu Dedicated (App Service) mějte na paměti počet jader poskytovaných vaším plánem. Plán Premium EP2
například poskytuje dvě jádra, takže byste měli začít s hodnotou 2
a podle potřeby zvýšit o dvě až na maximum.
Konfigurace triggeru
Při plánování propustnosti a škálování je důležité pochopit, jak různé typy triggerů zpracovávají události. Některé triggery umožňují řídit chování dávkování a spravovat souběžnost. Často úpravou hodnot v těchto možnostech může každá instance odpovídajícím způsobem škálovat podle požadavků vyvolaných funkcí. Tyto možnosti konfigurace se použijí pro všechny triggery v aplikaci funkcí a uchovávají se v souboru host.json aplikace. Podrobnosti o nastavení najdete v části Konfigurace konkrétního odkazu na aktivační událost.
Další informace o tom, jak Functions zpracovává streamy zpráv, najdete v tématu Spolehlivé zpracování událostí ve službě Azure Functions.
Plánování připojení
Aplikace funkcí spuštěné v plánu Consumption podléhají omezením připojení. Tato omezení se vynucují pro jednotlivé instance. Vzhledem k těmto limitům a obecně osvědčeným postupem byste měli optimalizovat odchozí připojení z kódu funkce. Další informace najdete v tématu Správa připojení ve službě Azure Functions.
Aspekty specifické pro jazyk
Pro jazyk, který si zvolíte, mějte na paměti následující aspekty:
Používejte asynchronní kód, ale vyhněte se blokování volání.
Používejte tokeny zrušení (pouze v procesu).
Maximalizace dostupnosti
Studený start je klíčovým aspektem bezserverových architektur. Další informace najdete v tématu Začátek studená verze. Pokud je pro váš scénář problém studený start, najdete podrobnější informace v příspěvku Principy bezserverového studeného startu .
Plán Premium je doporučeným plánem pro snížení chladu při zachování dynamického škálování. Následující doprovodné materiály můžete použít ke snížení počtu studených startů a zlepšení dostupnosti ve všech třech plánech hostování.
Plánování | Pokyny |
---|---|
Plán Premium | • Implementace triggeru warmup ve vaší aplikaci funkcí • Nastavte hodnoty pro instance Always-Ready a maximální limit nárazového nárůstu. • Použití podpory triggerů virtuální sítě při použití triggerů mimo protokol HTTP ve virtuální síti |
Vyhrazené plány | • Spusťte alespoň na dvou instancích s povolenou kontrolou stavu služby Aplikace Azure • Implementace automatického škálování |
Plán Consumption | • Zkontrolujte své použití vzorů Singleton a nastavení souběžnosti pro vazby a triggery, abyste se vyhnuli uměle umisťování limitů, jak se vaše aplikace funkcí škáluje. • Zkontrolujte functionAppScaleLimit nastavení, které může omezit horizontální navýšení kapacity.• Zkontrolujte limit denní kvóty využití (GB-s) nastavený během vývoje a testování. Zvažte odebrání tohoto limitu v produkčních prostředích. |
Efektivní monitorování
Azure Functions nabízí integrovanou integraci s Aplikace Azure lication Insights pro monitorování spouštění a trasování funkcí napsaných z kódu. Další informace najdete v tématu Monitorování azure Functions. Azure Monitor také poskytuje zařízení pro monitorování stavu samotné aplikace funkcí. Další informace najdete v tématu Monitorování pomocí služby Azure Monitor.
Při monitorování funkcí byste měli vědět o následujících aspektech:
Ujistěte se, že je odebráno nastavení aplikace AzureWebJobsDashboard . Toto nastavení bylo podporováno ve starší verzi služby Functions. Pokud existuje, odebrání
AzureWebJobsDashboard
zvyšuje výkon vašich funkcí.Projděte si protokoly Application Insights. Pokud data, která očekáváte, že chybí, zvažte úpravu nastavení vzorkování, aby lépe zachytila váš scénář monitorování. Toto
excludedTypes
nastavení můžete použít k vyloučení určitých typů z vzorkování, napříkladRequest
.Exception
Další informace najdete v tématu Konfigurace vzorkování.
Azure Functions také umožňuje odesílat systémem generované a uživatelem generované protokoly do protokolů služby Azure Monitor. Integrace s protokoly služby Azure Monitor je aktuálně ve verzi Preview.
Sestavení v redundanci
Vaše obchodní potřeby můžou vyžadovat, aby vaše funkce byly vždy dostupné i během výpadku datového centra. Informace o tom, jak používat víceregionální přístup k udržování důležitých funkcí vždy spuštěných, najdete v tématu Geografické zotavení po havárii a vysoká dostupnost azure Functions.