Händelsedriven skalning i Azure Functions

I förbruknings- och Premium-abonnemangen skalar Azure Functions cpu- och minnesresurser genom att lägga till fler instanser av Functions-värden. Antalet instanser bestäms av antalet händelser som utlöser en funktion.

Varje instans av Functions-värden i förbrukningsplanen är begränsad, vanligtvis till 1,5 GB minne och en PROCESSOR. En instans av värden är hela funktionsappen, vilket innebär att alla funktioner i en funktionsapp delar resurs i en instans och skalas samtidigt. Funktionsappar som delar samma förbrukningsplan skalas oberoende av varandra. I Premium-planen avgör planstorleken det tillgängliga minnet och processorn för alla appar i planen på den instansen.

Funktionskodfiler lagras på Azure Files-resurser på funktionens huvudlagringskonto. När du tar bort funktionsappens huvudlagringskonto tas funktionskodfilerna bort och kan inte återställas.

Körningsskalning

Azure Functions använder en komponent som kallas skalningskontrollant för att övervaka händelsefrekvensen och avgöra om du vill skala ut eller skala in. Skalningskontrollanten använder heuristik för varje utlösartyp. När du till exempel använder en Azure Queue Storage-utlösare använder den målbaserad skalning.

Skalningsenheten för Azure Functions är funktionsappen. När funktionsappen skalas ut allokeras fler resurser för att köra flera instanser av Azure Functions-värden. När beräkningsbehovet minskar tar skalningskontrollanten i stället bort instanser av Functions-värden. Antalet instanser "skalas in" när inga funktioner körs i en funktionsapp.

Scale controller monitoring events and creating instances

Kall start

När din funktionsapp har varit inaktiv i ett antal minuter kan plattformen skala antalet instanser där appen körs ned till noll. Nästa begäran har den extra svarstiden för skalning från noll till en. Den här svarstiden kallas för en kallstart. Antalet beroenden som krävs av funktionsappen kan påverka den kalla starttiden. Kallstart är mer ett problem för synkrona åtgärder, till exempel HTTP-utlösare som måste returnera ett svar. Om kalla starter påverkar dina funktioner kan du överväga att köra i en Premium-plan eller i en dedikerad plan med inställningen Always on aktiverad.

Förstå skalningsbeteenden

Skalning kan variera beroende på flera faktorer, och appar skalas olika baserat på de utlösare och språk som valts. Det finns några lite speciella skalningsbeteenden som du bör vara medveten om:

  • Maximalt antal instanser: En enskild funktionsapp skalas bara ut till ett maximalt antal som tillåts av planen. En enda instans kan dock bearbeta fler än ett meddelande eller en begäran i taget, så det finns ingen begränsning för antalet samtidiga körningar. Du kan ange ett lägre maxvärde för att begränsa skalning efter behov.
  • Ny instansfrekvens: För HTTP-utlösare allokeras nya instanser högst en gång per sekund. För icke-HTTP-utlösare allokeras nya instanser högst en gång var 30:e sekund. Skalningen går snabbare när du använder en Premium-plan .
  • Målbaserad skalning: Målbaserad skalning ger en snabb och intuitiv skalningsmodell för kunder och stöds för närvarande för Service Bus-köer och -ämnen, lagringsköer, eventhubbar och Cosmos DB-tillägg. Se till att granska målbaserad skalning för att förstå deras skalningsbeteende.

Begränsa utskalning

Du kanske vill begränsa det maximala antalet instanser som en app använder för att skala ut. Detta är vanligast i fall där en underordnad komponent som en databas har begränsat dataflöde. Som standard skalas funktioner för förbrukningsplan ut till så många som 200 instanser och Premium-planfunktionerna skalas ut till så många som 100 instanser. Du kan ange ett lägre maxvärde för en specifik app genom att ändra värdet functionAppScaleLimit . functionAppScaleLimit Kan anges till 0 eller null för obegränsad eller ett giltigt värde mellan 1 och appens maxvärde.

az resource update --resource-type Microsoft.Web/sites -g <RESOURCE_GROUP> -n <FUNCTION_APP-NAME>/config/web --set properties.functionAppScaleLimit=<SCALE_LIMIT>

Inskalningsbeteenden

Händelsedriven skalning minskar automatiskt kapaciteten när efterfrågan på dina funktioner minskar. Det gör det genom att tömma instanser av deras aktuella funktionskörningar och sedan ta bort dessa instanser. Det här beteendet loggas som tömningsläge. Respitperioden för funktioner som körs för närvarande kan sträcka sig upp till 10 minuter för appar för förbrukningsplan och upp till 60 minuter för Premium-planappar. Händelsedriven skalning och det här beteendet gäller inte för dedikerade planappar.

Följande överväganden gäller för inskalningsbeteenden:

Metodtips och mönster för skalbara appar

Det finns många aspekter av en funktionsapp som påverkar hur den skalar, inklusive värdkonfiguration, körningsfotavtryck och resurseffektivitet. Mer information finns i avsnittet om skalbarhet i artikeln om prestandaöverväganden. Du bör också vara medveten om hur anslutningar fungerar när funktionsappen skalar. Mer information finns i Hantera anslutningar i Azure Functions.

Mer information om skalning i Python och Node.js finns i Utvecklarguide för Azure Functions Python – Skalning och samtidighet och Utvecklarguide för Azure Functions Node.js – Skalning och samtidighet.

Faktureringsmodell

Fakturering för de olika abonnemangen beskrivs i detalj på prissättningssidan för Azure Functions. Användningen aggregeras på funktionsappsnivå och räknar bara den tid då funktionskoden körs. Följande är enheter för fakturering:

  • Resursförbrukning i gigabyte-sekunder (GB-s). Beräknas som en kombination av minnesstorlek och körningstid för alla funktioner i en funktionsapp.
  • Körningar. Räknas varje gång en funktion körs som svar på en händelseutlösare.

Användbara frågor och information om hur du förstår din förbrukningsfaktura finns i vanliga frågor och svar om fakturering.

Nästa steg

Mer information finns i följande artiklar: