Metodtips för tillförlitliga Azure Functions
Azure Functions är en händelsedriven beräkningsupplevelse på begäran som utökar den befintliga Azure App Service-programplattformen med funktioner för att implementera kod som utlöses av händelser som inträffar i Azure, i en tjänst från tredje part och i lokala system. Med Functions kan du skapa lösningar genom att ansluta till datakällor eller meddelandelösningar, vilket gör det enklare att bearbeta och reagera på händelser. Funktioner körs på Azure-datacenter, som är komplexa med många integrerade komponenter. I en värdbaserad molnmiljö förväntas virtuella datorer ibland starta om eller flytta, och systemuppgraderingar kommer att ske. Dina funktionsappar är sannolikt också beroende av externa API:er, Azure Services och andra databaser, som också är utsatta för regelbunden otillförlitlighet.
Den här artikeln beskriver några metodtips för att utforma och distribuera effektiva funktionsappar som förblir felfria och fungerar bra i en molnbaserad miljö.
Välj rätt värdplan
När du skapar en funktionsapp i Azure måste du välja en värdplan för din app. Den plan du väljer påverkar prestanda, tillförlitlighet och kostnad. Det här är de värdplaner som tillhandahålls av Azure Functions:
När det gäller App Service-plattformen är Premium-planen som används för att dynamiskt vara värd för dina funktioner Elastic Premium-planen (EP). Det finns andra dedikerade planer (App Service) som kallas Premium. Mer information finns i artikeln om Premium-plan .
Den värdplan som du väljer bestämmer följande beteenden:
- Hur din funktionsapp skalas baserat på efterfrågan och hur instansallokering hanteras.
- De resurser som är tillgängliga för varje funktionsappinstans.
- Stöd för avancerade funktioner, till exempel Azure Virtual Network-anslutning.
Mer information om hur du väljer rätt värdplan och en detaljerad jämförelse mellan abonnemangen finns i Värdalternativ för Azure Functions.
Det är viktigt att du väljer rätt plan när du skapar funktionsappen. Functions ger en begränsad möjlighet att byta värdplan, främst mellan förbruknings- och Elastic Premium-abonnemang. Mer information finns i Planera migrering.
Konfigurera lagringen korrekt
Functions kräver att ett lagringskonto associeras med din funktionsapp. Anslutningen till lagringskontot används av Functions-värden för åtgärder som att hantera utlösare och körning av loggningsfunktioner. Den används också vid dynamisk skalning av funktionsappar. Mer information finns i Lagringsöverväganden för Azure Functions.
Ett felkonfigurerat filsystem eller lagringskonto i funktionsappen kan påverka funktionernas prestanda och tillgänglighet. Hjälp med att felsöka ett felaktigt konfigurerat lagringskonto finns i artikeln om felsökning av lagring.
Inställningar för lagringsanslutning
Funktionsappar som skalas dynamiskt kan köras antingen från en Azure Files-slutpunkt i ditt lagringskonto eller från de filservrar som är associerade med dina utskalade instanser. Det här beteendet styrs av följande programinställningar:
De här inställningarna stöds endast när du kör i en Premium-plan eller i en förbrukningsplan i Windows.
När du skapar din funktionsapp antingen i Azure Portal eller med hjälp av Azure CLI eller Azure PowerShell skapas de här inställningarna för funktionsappen när det behövs. När du skapar dina resurser från en Azure Resource Manager-mall (ARM-mall) måste du även inkludera WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
i mallen.
I din första distribution med hjälp av en ARM-mall ska du inte ta med WEBSITE_CONTENTSHARE
, som genereras åt dig.
Du kan använda följande ARM-mallexempel för att konfigurera de här inställningarna på rätt sätt:
- Förbrukningsplan
- Dedikerad plan
- Premium-plan med VNET-integrering
- Förbrukningsplan med ett distributionsfack
Konfiguration av lagringskonto
När du skapar en funktionsapp måste du skapa eller länka till ett Azure Storage-konto för generell användning som stöder Blob Storage, Queue Storage och Table Storage. Functions förlitar sig på Azure Storage för åtgärder som att hantera utlösare och loggningsfunktionskörningar. Lagringskontot anslutningssträng för funktionsappen AzureWebJobsStorage
finns i programinställningarna och WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
.
Tänk på följande när du skapar det här lagringskontot:
Om du vill minska svarstiden skapar du lagringskontot i samma region som funktionsappen.
För att förbättra prestanda i produktion använder du ett separat lagringskonto för varje funktionsapp. Detta gäller särskilt för Durable Functions- och Event Hubs-utlösta funktioner.
För Event Hubs-utlösta funktioner ska du inte använda ett konto med Data Lake Storage aktiverat.
Hantera stora datamängder
När du kör på Linux kan du lägga till extra lagringsutrymme genom att montera en filresurs. Att montera en resurs är ett bekvämt sätt för en funktion att bearbeta en stor befintlig datauppsättning. Mer information finns i Montera filresurser.
Organisera dina funktioner
Som en del av din lösning utvecklar och publicerar du förmodligen flera funktioner. Dessa funktioner kombineras ofta till en enda funktionsapp, men de kan också köras i separata funktionsappar. I premium- och dedikerade värdplaner (App Service) kan flera funktionsappar också dela samma resurser genom att köra i samma plan. Hur du grupperar dina funktioner och funktionsappar kan påverka prestanda, skalning, konfiguration, distribution och säkerhet för din övergripande lösning.
För förbrukning och Premium-plan skalas alla funktioner i en funktionsapp dynamiskt tillsammans.
Mer information om hur du organiserar dina funktioner finns i Metodtips för funktionsorganisation.
Optimera distributioner
När du distribuerar en funktionsapp är det viktigt att komma ihåg att distributionsenheten för funktioner i Azure är funktionsappen. Alla funktioner i en funktionsapp distribueras samtidigt, vanligtvis från samma distributionspaket.
Överväg de här alternativen för en lyckad distribution:
Låt dina funktioner köras från distributionspaketet. Den här metoden för att köra från paket ger följande fördelar:
- Minskar risken för problem med filkopieringslåsning.
- Kan distribueras direkt till en produktionsapp, vilket utlöser en omstart.
- Vet att alla filer i paketet är tillgängliga för din app.
- Förbättrar prestandan för ARM-malldistributioner.
- Kan minska kalla starttider, särskilt för JavaScript-funktioner med stora npm-paketträd.
Överväg att använda kontinuerlig distribution för att ansluta distributioner till källkontrolllösningen. Med kontinuerliga distributioner kan du också köra från distributionspaketet.
För Premium-planvärdar bör du överväga att lägga till en uppvärmningsutlösare för att minska svarstiden när nya instanser läggs till. Mer information finns i Uppvärmningsutlösaren för Azure Functions.
Överväg att använda distributionsfack för att minimera driftstopp och återställa distributioner. Mer information finns i Distributionsfack för Azure Functions.
Skriva robusta funktioner
Det finns flera designprinciper som du kan följa när du skriver funktionskoden som hjälper dig med allmänna prestanda och tillgänglighet för dina funktioner. Dessa principer omfattar:
- Undvik tidskrävande funktioner.
- Planera kommunikation mellan funktioner.
- Skrivfunktioner som ska vara tillståndslösa.
- Skriv defensiva funktioner.
Eftersom tillfälliga fel är vanliga inom molnbaserad databehandling bör du använda ett återförsöksmönster vid åtkomst till molnbaserade resurser. Många utlösare och bindningar implementerar redan omförsök.
Design för säkerhet
Säkerhet beaktas bäst under planeringsfasen och inte när dina funktioner är redo att användas. Information om hur du utvecklar och distribuerar funktioner på ett säkert sätt finns i Skydda Azure Functions.
Överväg samtidighet
När efterfrågan bygger på din funktionsapp till följd av inkommande händelser skalas funktionsappar som körs i Förbrukning och Premium-planer ut. Det är viktigt att förstå hur funktionsappen svarar på belastningen och hur utlösarna kan konfigureras för att hantera inkommande händelser. En allmän översikt finns i Händelsedriven skalning i Azure Functions.
Dedikerade (App Service)-planer kräver att du tillhandahåller för att skala ut dina funktionsappar.
Antal arbetsprocesser
I vissa fall är det mer effektivt att hantera belastningen genom att skapa flera processer, så kallade språkarbetsprocesser, i instansen före utskalning. Det maximala antalet tillåtna språkarbetsprocesser styrs av inställningen FUNCTIONS_WORKER_PROCESS_COUNT . Standardinställningen för den här inställningen är 1
, vilket innebär att flera processer inte används. När det maximala antalet processer har nåtts skalas funktionsappen ut till fler instanser för att hantera belastningen. Den här inställningen gäller inte för C#-klassbiblioteksfunktioner som körs i värdprocessen.
När du använder FUNCTIONS_WORKER_PROCESS_COUNT
en Premium-plan eller dedikerad (App Service)-plan bör du tänka på antalet kärnor som tillhandahålls av din plan. Premium-planen EP2
innehåller till exempel två kärnor, så du bör börja med värdet 2
och öka med två efter behov, upp till maxgränsen.
Utlösarkonfiguration
När du planerar för dataflöde och skalning är det viktigt att förstå hur de olika typerna av utlösare bearbetar händelser. Med vissa utlösare kan du styra batchbeteenden och hantera samtidighet. Om du ofta justerar värdena i de här alternativen kan varje instans skalas på rätt sätt för de anropade funktionernas krav. De här konfigurationsalternativen tillämpas på alla utlösare i en funktionsapp och underhålls i host.json-filen för appen. Mer information finns i avsnittet Konfiguration i den specifika utlösarreferensen.
Mer information om hur Functions bearbetar meddelandeströmmar finns i Tillförlitlig händelsebearbetning i Azure Functions.
Planera för anslutningar
Funktionsappar som körs i förbrukningsplanen omfattas av anslutningsgränser. Dessa gränser tillämpas per instans. På grund av dessa gränser och som en allmän metod bör du optimera dina utgående anslutningar från funktionskoden. Mer information finns i Hantera anslutningar i Azure Functions.
Språkspecifika överväganden
Tänk på följande när du väljer språk:
Använd annulleringstoken (endast i processen).
Maximera tillgängligheten
Kallstart är ett viktigt övervägande för serverlösa arkitekturer. Mer information finns i Kalla startar. Om kallstart är ett problem för ditt scenario kan du hitta en djupare genomgång i post Understanding serverless cold start .
Premium-plan är den rekommenderade planen för att minska kylan startar samtidigt som dynamisk skalning bibehålls. Du kan använda följande vägledning för att minska kallstarter och förbättra tillgängligheten i alla tre värdplaner.
Planera | Vägledning |
---|---|
Premium-plan | • Implementera en uppvärmningsutlösare i funktionsappen • Ange värdena för Always-Ready-instanser och Max Burst-gräns • Använd stöd för utlösare för virtuella nätverk när du använder icke-HTTP-utlösare i ett virtuellt nätverk |
Dedikerade planer | • Kör på minst två instanser med Azure App Service Health Check aktiverat • Implementera autoskalning |
Förbrukningsplan | • Granska din användning av Singleton-mönster och samtidighetsinställningarna för bindningar och utlösare för att undvika att artificiellt sätta gränser för hur funktionsappen skalar. • Granska inställningen functionAppScaleLimit , som kan begränsa utskalning• Sök efter en gräns för daglig användningskvot (GB-sek) som angetts under utveckling och testning. Överväg att ta bort den här gränsen i produktionsmiljöer. |
Övervaka effektivt
Azure Functions erbjuder inbyggd integrering med Azure Application Insights för att övervaka funktionskörningen och spårningar som skrivits från koden. Mer information finns i Övervaka Azure Functions. Azure Monitor tillhandahåller även funktioner för att övervaka hälsotillståndet för själva funktionsappen. Mer information finns i Övervakning med Azure Monitor.
Du bör vara medveten om följande när du använder Application Insights-integrering för att övervaka dina funktioner:
Kontrollera att programinställningen AzureWebJobsDashboard har tagits bort. Den här inställningen stöds i äldre versioner av Functions. Om den finns förbättrar borttagningen
AzureWebJobsDashboard
prestanda för dina funktioner.Granska Application Insights-loggarna. Om data som du förväntar dig att hitta saknas kan du överväga att justera samplingsinställningarna för att bättre avbilda ditt övervakningsscenario. Du kan använda inställningen
excludedTypes
för att undanta vissa typer från sampling, till exempelRequest
ellerException
. Mer information finns i Konfigurera sampling.
Med Azure Functions kan du också skicka systemgenererade och användargenererade loggar till Azure Monitor-loggar. Integrering med Azure Monitor-loggar finns för närvarande i förhandsversion.
Skapa redundans
Dina affärsbehov kan kräva att dina funktioner alltid är tillgängliga, även under ett datacenterstopp. Information om hur du använder en multiregional metod för att hålla dina kritiska funktioner alltid igång finns i Geo-haveriberedskap för Azure Functions och hög tillgänglighet.