Händelsedriven skalning i Azure Functions

I planerna Förbrukning och Premium skalar Azure Functions CPU- och minnesresurser genom att lägga till ytterligare 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 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 resurser inom en instans och skalar samtidigt. Funktionsappar som delar samma förbrukningsplan skalas oberoende av varandra. I Premium plan avgör planstorleken tillgängligt minne och CPU 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 ska skala ut eller skala in. Skalningsstyrenheten använder heuristik för varje utlösartyp. När du till exempel använder en Azure Queue Storage-utlösare skalas den baserat på kölängden och ålder för det äldsta kömeddelandet.

Skalningsenheten för Azure Functions är funktionsappen. När funktionsappen skalas ut allokeras ytterligare resurser för att köra flera instanser av Azure Functions värden. Omvänt tar skalkontrollanten bort funktionsvärdinstanser när beräkningsefterfrågan minskar. Antalet instanser "skalas så småningom in" till noll när inga funktioner körs i en funktionsapp.

Skala kontrollantens övervakningshändelser och skapa instanser

Kallstart

När funktionsappen 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 kallstartstiden. Kallstart är mer av ett problem för synkrona åtgärder, till exempel HTTP-utlösare som måste returnera ett svar. Om kallstarter påverkar dina funktioner kan du överväga att köra i en Premium plan eller i en dedikerad plan med inställningen Alltid på aktiverad.

Förstå skalningsbeteenden

Skalningen kan variera beroende på ett antal faktorer och skalas på olika sätt beroende på vilken utlösare och vilket språk som valts. Det finns några intrikat med skalningsbeteenden att känna till:

  • Maximalt antal instanser: En enda funktionsapp skalar bara ut till högst 200 instanser. En enda instans kan dock bearbeta fler än ett meddelande eller en begäran i taget, så det finns ingen fast gräns för antalet samtidiga körningar. Du kan ange ett lägre maxbelopp 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. Skalning går snabbare när du kör i en Premium plan.
  • Skalningseffektivitet: För Service Bus utlösare använder du Hantera rättigheter för resurser för den mest effektiva skalningen. Med lyssna-behörighet är skalning inte lika korrekt eftersom kölängden inte kan användas för att fatta beslut om skalning. Mer information om hur du anger rättigheter i Service Bus finns i Auktoriseringsprincip för delad åtkomst. Information om event hub-utlösare finns i skalningsvägledningen i referensartikeln.

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 funktionerna för förbrukningsplanen ut till så många som 200 instanser, och funktionerna Premium plan skalas ut till upp till 100 instanser. Du kan ange ett lägre maxvärde för en viss app genom att ändra functionAppScaleLimit värdet. kan functionAppScaleLimit anges till eller för 0 null obegränsade, 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>
$resource = Get-AzResource -ResourceType Microsoft.Web/sites -ResourceGroupName <RESOURCE_GROUP> -Name <FUNCTION_APP-NAME>/config/web
$resource.Properties.functionAppScaleLimit = <SCALE_LIMIT>
$resource | Set-AzResource -Force

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 beter sig när funktionsappen skalar. Mer information finns i Hantera anslutningar i Azure Functions.

Mer information om skalning i Python och Node.js finns i Azure Functions Python-utvecklarguide – Skalning och samtidighet och Azure Functions Node.js utvecklarguide – skalningoch samtidighet .

Faktureringsmodell

Faktureringen för de olika prenumerationerna beskrivs i detalj Azure Functions sidan med priser. Användningen aggregeras på funktionsappnivå och räknar bara den tid som 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