Metodtips för tillförlitliga Azure Functions

Azure Functions är en händelsedriven upplevelse för beräkning 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 tjänsten från tredje part och i lokala system. Med Funktioner 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 sker. Dina funktionsappar är förmodligen också beroende av externa API:er, Azure Services och andra databaser, som också är benägna att vara periodiska otillförlitliga.

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 finns tre grundläggande värdplaner för Functions:

Alla värdplaner är allmänt tillgängliga (GA) när du kör antingen Linux eller Windows.

När det gäller den App Service plattformen är Den Premium-plan som används för att dynamiskt vara värd för dina funktioner Elastic Premium-planen (EP). Det finns andra dedikerade (App Service) planer som kallas Premium. Mer information finns i artikeln premiumplan .

Den värdplan som du väljer avgör 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 Azure Functions värdalternativ.

Det är viktigt att du väljer rätt plan när du skapar din funktionsapp. Funktioner 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

Funktioner 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 loggningsfunktionskörningar. Den används även 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 prestanda och tillgänglighet för dina funktioner. Mer information om hur du felsöker 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 bara 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 dessa inställningar 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 inkludera WEBSITE_CONTENTSHARE, som genereras åt dig.

Du kan använda följande ARM-mallexempel för att konfigurera inställningarna korrekt:

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 loggning av funktionskörningar. Anslutningssträngen för lagringskontot 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.

  • Om du vill förbättra prestanda i produktionen använder du ett separat lagringskonto för varje funktionsapp. Detta gäller särskilt för funktioner som utlöses av Durable Functions och Event Hub.

  • För Event Hub-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 i en enda funktionsapp, men de kan också köras i separata funktionsappar. I premium- och dedikerade (App Service) värdplaner 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.

  • Överväg att lägga till en uppvärmningsutlösare för att minska svarstiden när nya instanser läggs till för Premium-planvärdar. Mer information finns i Azure Functions uppvärmningsutlösare.

  • Överväg att använda distributionsfack för att minimera driftstopp och återställa distributioner. Mer information finns i Azure Functions distributionsplatser.

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:

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 återförsök.

Design för säkerhet

Säkerhet beaktas bäst under planeringsfasen och inte efter att dina funktioner är klara att användas. Information om hur du på ett säkert sätt utvecklar och distribuerar funktioner 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örbruknings- 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 språkarbetsprocesser som tillåts styrs av inställningen FUNCTIONS_WORKER_PROCESS_COUNT . Standardvärdet 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 uppnå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 maxvärdet.

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 batchbearbetningsbeteenden 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 filen host.json för appen. Information om inställningar finns i avsnittet Konfiguration i den specifika utlösarreferensen.

Mer information om hur Functions bearbetar meddelandeströmmar finns i Azure Functions tillförlitlig händelsebearbetning.

Planera för anslutningar

Funktionsappar som körs i förbrukningsplanen omfattas av anslutningsgränser. Dessa begränsningar tillämpas per instans. På grund av dessa begränsningar 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:

Maximera tillgängligheten

Kallstart är ett viktigt övervägande för serverlösa arkitekturer. Mer information finns i Kalla starter. Om kallstart är ett problem för ditt scenario kan du hitta en djupare genomgång i inlägget Understanding serverless cold start (Förstå serverlös kallstart ).

Premium-plan är den rekommenderade planen för att minska förkylningar startar samtidigt som dynamisk skalning upprätthå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
Premiumplan Implementera en uppvärmningsutlösare i funktionsappen
Ange värden 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 hälsokontroll aktiverad
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 prestandan 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 exempel Request eller Exception. Mer information finns i Konfigurera sampling.

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 i redundans

Dina affärsbehov kan kräva att dina funktioner alltid är tillgängliga, även vid avbrott i ett datacenter. Information om hur du använder en metod för flera regioner för att hålla dina kritiska funktioner igång finns i Azure Functions geo-haveriberedskap och hög tillgänglighet.

Nästa steg

Hantera din funktionsapp