Gebeurtenisgestuurd schalen in Azure Functions

In de abonnementen Verbruik en Premium schaalt Azure Functions CPU- en geheugenresources door meer exemplaren van de Functions-host toe te voegen. Het aantal exemplaren wordt bepaald op het aantal gebeurtenissen dat een functie activeert.

Elk exemplaar van de Functions-host in het verbruiksabonnement is beperkt, meestal tot 1,5 GB geheugen en één CPU. Een exemplaar van de host is de hele functie-app, wat betekent dat alle functies binnen een functie-app resource binnen een exemplaar delen en tegelijkertijd kunnen worden geschaald. Functie-apps die hetzelfde verbruiksabonnement onafhankelijk van elkaar delen. In het Premium-abonnement bepaalt de abonnementsgrootte het beschikbare geheugen en de CPU voor alle apps in dat abonnement op dat exemplaar.

Functiecodebestanden worden opgeslagen op Azure Files-shares in het hoofdopslagaccount van de functie. Wanneer u het hoofdopslagaccount van de functie-app verwijdert, worden de functiecodebestanden verwijderd en kunnen ze niet worden hersteld.

Schalen van runtime

Azure Functions maakt gebruik van een onderdeel dat de schaalcontroller wordt genoemd om de snelheid van gebeurtenissen te bewaken en te bepalen of u wilt uitschalen of inschalen. De schaalcontroller maakt gebruik van heuristieken voor elk triggertype. Wanneer u bijvoorbeeld een Azure Queue Storage-trigger gebruikt, wordt gebruikgemaakt van schaalaanpassing op basis van doel.

De schaaleenheid voor Azure Functions is de functie-app. Wanneer de functie-app wordt uitgeschaald, worden er meer resources toegewezen om meerdere exemplaren van de Azure Functions-host uit te voeren. Als de rekenvraag daarentegen afneemt, verwijdert de schaalcontroller functiehostexemplaren. Het aantal exemplaren wordt uiteindelijk 'ingeschaald' wanneer er geen functies worden uitgevoerd binnen een functie-app.

Scale controller monitoring events and creating instances

Koude begindatum

Nadat uw functie-app een aantal minuten inactief is geweest, kan het platform het aantal exemplaren schalen waarop uw app wordt uitgevoerd tot nul. De volgende aanvraag heeft de toegevoegde latentie van schalen van nul naar één. Deze latentie wordt een koude start genoemd. Het aantal afhankelijkheden dat door uw functie-app is vereist, kan van invloed zijn op de koude begintijd. Koude start is meer een probleem voor synchrone bewerkingen, zoals HTTP-triggers die een antwoord moeten retourneren. Als koude start invloed heeft op uw functies, kunt u overwegen om te worden uitgevoerd in een Premium-abonnement of in een Dedicated-abonnement met de instelling Altijd ingeschakeld .

Inzicht in schaalgedrag

Schalen kan variëren op basis van verschillende factoren en apps worden anders geschaald op basis van de triggers en de geselecteerde taal. Er zijn enkele complexiteiten van schaalgedrag waar u rekening mee moet houden:

  • Maximumaantal exemplaren: Een app met één functie wordt alleen uitgeschaald naar een maximum dat door het plan is toegestaan. Eén exemplaar kan echter op hetzelfde moment meer dan één bericht of aanvraag verwerken, zodat er geen limiet is voor het aantal gelijktijdige uitvoeringen. U kunt naar behoefte een lager maximum opgeven om de schaal te beperken.
  • Nieuwe instantiesnelheid: voor HTTP-triggers worden nieuwe exemplaren maximaal één keer per seconde toegewezen. Voor niet-HTTP-triggers worden nieuwe exemplaren maximaal één keer per 30 seconden toegewezen. Schalen gaat sneller wanneer u uitvoert in een Premium-plan.
  • Op doel gebaseerd schalen: op doel gebaseerde schaalaanpassing biedt een snel en intuïtief schaalmodel voor klanten en wordt momenteel ondersteund voor Service Bus-wachtrijen en -onderwerpen, opslagwachtrijen, Event Hubs en Cosmos DB-extensies. Zorg ervoor dat u schaalaanpassing op basis van doel bekijkt om inzicht te hebben in het gedrag van de schaalaanpassing.

Uitschalen beperken

Mogelijk wilt u het maximum aantal exemplaren beperken dat een app gebruikt om uit te schalen. Dit is het meest gebruikelijk voor gevallen waarin een downstreamonderdeel, zoals een database, beperkte doorvoer heeft. Verbruiksabonnementsfuncties worden standaard uitgeschaald naar maximaal 200 exemplaren en Premium-abonnementsfuncties worden uitgeschaald naar maximaal 100 exemplaren. U kunt een lager maximum voor een specifieke app opgeven door de functionAppScaleLimit waarde te wijzigen. De functionAppScaleLimit waarde kan worden ingesteld op 0 of null voor onbeperkt, of een geldige waarde tussen en het maximum van 1 de app.

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

Gedrag van inschalen

Gebeurtenisgestuurd schalen vermindert automatisch de capaciteit wanneer de vraag naar uw functies wordt verminderd. Dit doet u door exemplaren van hun huidige functie-uitvoeringen leeg te maken en deze exemplaren vervolgens te verwijderen. Dit gedrag wordt geregistreerd als afvoermodus. De respijtperiode voor functies die momenteel worden uitgevoerd, kan worden verlengd tot 10 minuten voor verbruiksabonnement-apps en maximaal 60 minuten voor Premium-abonnements-apps. Gebeurtenisgestuurd schalen en dit gedrag is niet van toepassing op toegewezen plan-apps.

De volgende overwegingen zijn van toepassing op inschaalgedrag:

Aanbevolen procedures en patronen voor schaalbare apps

Er zijn veel aspecten van een functie-app die van invloed is op de schaal, waaronder hostconfiguratie, runtime-footprint en resource-efficiëntie. Zie de sectie schaalbaarheid van het artikel over prestatieoverwegingen voor meer informatie. U moet ook weten hoe verbindingen zich gedragen wanneer uw functie-app wordt geschaald. Raadpleeg Verbindingen beheren in Azure Functions voor meer informatie.

Zie voor meer informatie over schalen in Python en Node.js de ontwikkelaarshandleiding voor Azure Functions Python: schalen en gelijktijdigheid en Azure Functions Node.js ontwikkelaarshandleiding: schalen en gelijktijdigheid.

Factureringsmodel

Facturering voor de verschillende abonnementen wordt gedetailleerd beschreven op de pagina met prijzen van Azure Functions. Het gebruik wordt geaggregeerd op het niveau van de functie-app en telt alleen de tijd dat functiecode wordt uitgevoerd. Hieronder ziet u eenheden voor facturering:

  • Resourceverbruik in gigabyte-seconden (GB-s). Berekend als een combinatie van geheugengrootte en uitvoeringstijd voor alle functies in een functie-app.
  • Uitvoeringen. Elke keer dat een functie wordt uitgevoerd als reactie op een gebeurtenistrigger, wordt geteld.

Nuttige query's en informatie over het begrijpen van uw verbruiksfactuur vindt u in de veelgestelde vragen over facturering.

Volgende stappen

Zie de volgende artikelen voor meer informatie: