Ridimensionamento e hosting di Funzioni di AzureAzure Functions scale and hosting

È possibile eseguire Funzioni di Azure in due modalità diverse, ovvero con piano a consumo e piano di servizio app di Azure.You can run Azure Functions in two different modes: Consumption plan and Azure App Service plan. Il piano a consumo alloca automaticamente funzionalità di calcolo durante l'esecuzione del codice, aumenta il numero di istanze in base alla necessità per gestire il carico e quindi riduce le prestazioni quando il codice non è in esecuzione.The Consumption plan automatically allocates compute power when your code is running, scales out as necessary to handle load, and then scales down when code is not running. Non è necessario pagare per le macchine virtuali inattive e non è necessario riservare in anticipo la capacità.You don't have to pay for idle VMs and don't have to reserve capacity in advance. Questo articolo è incentrato sul piano a consumo, un modello App senza server.This article focuses on the Consumption plan, a serverless app model. Per informazioni dettagliate sul funzionamento del piano di servizio app, vedere Panoramica approfondita dei piani di servizio app di Azure.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

Nota

L'hosting in Linux è attualmente disponibile solo per un piano di servizio app.Linux hosting is currently only available on an App Service plan.

Se non si ha ancora familiarità con Funzioni di Azure, vedere la panoramica di Funzioni di Azure.If you aren't familiar with Azure Functions, see the Azure Functions overview.

Quando si crea un'app per le funzioni, è necessario configurare un piano di hosting per le funzioni contenute nell'app.When you create a function app, you must configure a hosting plan for functions that the app contains. In entrambe le modalità, le funzioni vengono eseguite da un'istanza dell'host di Funzioni di Azure.In either mode, an instance of the Azure Functions host executes the functions. Il tipo di piano determina:The type of plan controls:

  • Il modo in cui vengono aumentate le istanze dell'host.How host instances are scaled out.
  • Le risorse disponibili per ogni host.The resources that are available to each host.

È attualmente necessario scegliere il tipo di piano di hosting durante la creazione dell'app per le funzioni.Currently, you must choose the type of hosting plan during the creation of the function app. Non è possibile modificare il piano in un secondo momento.You can't change it afterward.

In un piano di servizio app è possibile applicare la scalabilità tra i livelli per allocare quantità diverse di risorse.On an App Service plan you can scale between tiers to allocate different amount of resources. Nel piano a consumo Funzioni di Azure gestisce automaticamente l'allocazione di tutte le risorse.On the Consumption plan, Azure Functions automatically handles all resource allocation.

Piano a consumoConsumption plan

Quando si usa un piano a consumo, le istanze dell'host di Funzioni di Azure vengono aggiunte e rimosse in modo dinamico in base al numero di eventi in ingresso.When you're using a Consumption plan, instances of the Azure Functions host are dynamically added and removed based on the number of incoming events. Questo piano offre la scalabilità automatica e sono previsti costi per le risorse di calcolo solo quando le funzioni sono in esecuzione.This plan scales automatically, and you are charged for compute resources only when your functions are running. In un piano a consumo, una funzione può essere eseguita al massimo per 10 minuti.On a Consumption plan, a function can run for a maximum of 10 minutes.

Nota

Il timeout predefinito per le funzioni in un piano a consumo è di 5 minuti.The default timeout for functions on a Consumption plan is 5 minutes. Il valore può essere aumentato a 10 minuti per l'app per le funzioni modificando la proprietà functionTimeout in host.json.The value can be increased to 10 minutes for the Function App by changing the property functionTimeout in host.json.

La fatturazione si basa sul numero di esecuzioni, il tempo di esecuzione e la memoria usata.Billing is based on number of executions, execution time, and memory used. La fatturazione viene aggregata tra tutte le funzioni all'interno di un'app per le funzioni.Billing is aggregated across all functions within a function app. Per altre informazioni, vedere la pagina relativa ai prezzi per Funzioni di Azure.For more information, see the [Azure Functions pricing page].

Il piano a consumo è l'opzione di hosting predefinita e offre i vantaggi seguenti:The Consumption plan is the default hosting plan and offers the following benefits:

  • Addebiti solo quando le funzioni sono in esecuzione.Pay only when your functions are running.
  • Aumento automatico del numero di istanze anche in periodo di carico elevato.Scale out automatically, even during periods of high load.

Piano di servizio appApp Service plan

Nel piano di servizio app le app per le funzioni vengono eseguite in macchine virtuali dedicate in SKU Basic, Standard, Premium e Isolati, analogamente alle app Web, alle app per le API e alle app per dispositivi mobili.In the App Service plan, your function apps run on dedicated VMs on Basic, Standard, Premium, and Isolated SKUs, similar to Web Apps, API Apps, and Mobile Apps. Le macchine virtuali dedicate vengono allocate alle app del servizio app, ovvero l'host di funzioni è sempre in esecuzione.Dedicated VMs are allocated to your App Service apps, which means the functions host is always running. I piani di servizio app supportano Linux.App Service plans support Linux.

Prendere in considerazione un piano di servizio app nei casi seguenti:Consider an App Service plan in the following cases:

  • Sono presenti macchine virtuali sottoutilizzate, che eseguono già altre istanze del servizio app.You have existing, underutilized VMs that are already running other App Service instances.
  • Si prevede che le app per le funzioni vengano eseguite in modo continuo o quasi continuo.You expect your function apps to run continuously, or nearly continuously. In questo caso, un piano di servizio app può essere più conveniente.In this case, an App Service Plan can be more cost-effective.
  • Sono necessarie altre opzioni per CPU o memoria, rispetto alle opzioni disponibili nel piano a consumo.You need more CPU or memory options than what is provided on the Consumption plan.
  • È necessario un tempo di esecuzione superiore al tempo di esecuzione massimo consentito nel piano a consumo (di 10 minuti).You need to run longer than the maximum execution time allowed on the Consumption plan (of 10 minutes).
  • Sono necessarie funzionalità disponibili solo in un piano di servizio app, ad esempio il supporto per Ambiente del servizio app, la connettività di rete virtuale/VPN e dimensioni maggiori delle macchine virtuali.You require features that are only available on an App Service plan, such as support for App Service Environment, VNET/VPN connectivity, and larger VM sizes.
  • Si vuole eseguire l'app per le funzioni in Linux o fornire un'immagine personalizzata in cui eseguire le funzioni.You want to run your function app on Linux, or you want to provide a custom image on which to run your functions.

Una macchina virtuale separa i costi associati al numero di esecuzioni, al tempo di esecuzione e alla memoria usata.A VM decouples cost from number of executions, execution time, and memory used. Non si pagherà quindi più del costo dell'istanza di macchina virtuale allocata.As a result, you won't pay more than the cost of the VM instance that you allocate. Per informazioni dettagliate sul funzionamento del piano di servizio app, vedere Panoramica approfondita dei piani di servizio app di Azure.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

Con un piano di servizio app, è possibile aumentare manualmente il numero di istanze aggiungendo altre istanze di macchine virtuali oppure abilitare la scalabilità automatica.With an App Service plan, you can manually scale out by adding more VM instances, or you can enable autoscale. Per altre informazioni, vedere Scalare il conteggio delle istanze manualmente o automaticamente.For more information, see Scale instance count manually or automatically. Per aumentare le prestazioni è anche possibile scegliere un piano di servizio App diverso.You can also scale up by choosing a different App Service plan. Per altre informazioni, vedere Aumentare le prestazioni di un'app in Azure.For more information, see Scale up an app in Azure.

Se si prevede di eseguire funzioni JavaScript in un piano di servizio app, è necessario scegliere un piano con un minor numero di vCPU.If you are planning to run JavaScript functions on an App Service plan, you should choose a plan that has fewer vCPUs. Per altre informazioni, vedere Scegliere i piani di servizio app single core.For more information, see the Choose single-core App Service plans.

Always On

Se per l'esecuzione si usa un piano di servizio app, è necessario abilitare l'impostazione Sempre online in modo che l'app per le funzioni venga eseguita correttamente.If you run on an App Service plan, you should enable the Always On setting so that your function app runs correctly. In un piano di servizio app il runtime delle funzione risulterà inattivo dopo pochi minuti di inattività. Solo i trigger HTTP "attiveranno" quindi le funzioni.On an App Service plan, the functions runtime will go idle after a few minutes of inactivity, so only HTTP triggers will "wake up" your functions. Questo approccio è simile alla necessità di abilitazione di AlwaysOn per i processi Web.This is similar to how WebJobs must have Always On enabled.

L'opzione Sempre online è disponibile solo nel piano di servizio app.Always On is available only on an App Service plan. In un piano a consumo, la piattaforma attiva automaticamente le app per le funzioni.On a Consumption plan, the platform activates function apps automatically.

Requisiti dell'account di archiviazioneStorage account requirements

In un piano a consumo o un piano di servizio app è necessario che un'app per le funzioni abbia un account di Archiviazione di Microsoft Azure generale che supporti l'archiviazione BLOB, code, file e tabelle.On either a Consumption plan or an App Service plan, a function app requires a general Azure Storage account that supports Azure Blob, Queue, Files, and Table storage. Funzioni di Azure usa internamente Archiviazione di Azure per operazioni come la gestione dei trigger e la registrazione dell'esecuzione delle funzioni.Internally, Azure Functions uses Azure Storage for operations such as managing triggers and logging function executions. Alcuni account di archiviazione non supportano code e tabelle, ad esempio gli account di archiviazione solo BLOB (tra cui Archiviazione Premium) e gli account di archiviazione di uso generico con replica archiviazione con ridondanza della zona.Some storage accounts do not support queues and tables, such as blob-only storage accounts (including premium storage) and general-purpose storage accounts with zone-redundant storage replication. Tali account vengono filtrati dal pannello Account di archiviazione quando si crea un'app per le funzioni.These accounts are filtered from the Storage Account blade when you're creating a function app.

Per altre informazioni sui tipi di account di archiviazione, vedere Introduzione ai servizi di archiviazione di Azure.To learn more about storage account types, see Introducing the Azure Storage services.

Funzionamento del piano a consumoHow the Consumption plan works

Nel piano a consumo il controller di scalabilità offre la scalabilità automatica di CPU e delle risorse di memoria aggiungendo altre istanze dell'host di Funzioni di Azure, in base al numero di eventi che attivano le rispettive funzioni.In the Consumption plan, the scale controller automatically scales CPU and memory resources by adding additional instances of the Functions host, based on the number of events that its functions are triggered on. Ogni istanza dell'host di Funzioni è limitata a 1,5 GB di memoria.Each instance of the Functions host is limited to 1.5 GB of memory. Un'istanza dell'host è l'app per le funzioni, vale a dire tutte le funzioni all'interno di un'app per le funzioni condividono le risorse all'interno di un'istanza e vengono ridimensionale nello stesso momento.An instance of the host is the Function App, meaning all functions within a funciton app share resources within an instance and scale at the same time.

Quando si usa un piano di hosting a consumo, i file di codice delle funzioni vengono archiviati nelle condivisioni di File di Azure nell'account di archiviazione principale della funzione.When you use the Consumption hosting plan, function code files are stored on Azure Files shares on the function's main storage account. Quando si elimina l'account di archiviazione principale dell'app per le funzioni, i file di codice delle funzioni vengono eliminati e non possono essere recuperati.When you delete the main storage account of the function app, the function code files are deleted and cannot be recovered.

Nota

Quando si usa un trigger di tipo BLOB in un piano a consumo, può verificarsi un ritardo massimo di 10 minuti per l'elaborazione di nuovi BLOB in caso di inattività di un'app per le funzioni.When you're using a blob trigger on a Consumption plan, there can be up to a 10-minute delay in processing new blobs if a function app has gone idle. Quando l'app per le funzioni è in esecuzione, i BLOB vengono elaborati immediatamente.After the function app is running, blobs are processed immediately. Per evitare questo ritardo iniziale, prendere in considerazione una delle opzioni seguenti:To avoid this initial delay, consider one of the following options:

Ridimensionamento in fase di runtimeRuntime scaling

Funzioni di Azure usa un componente denominato controller di scalabilità per monitorare la frequenza degli eventi e determinare se aumentare il numero di istanze o ridurre le prestazioni.Azure Functions uses a component called the scale controller to monitor the rate of events and determine whether to scale out or scale in. Il controller di scalabilità usa le funzionalità di euristica per ogni tipo di trigger.The scale controller uses heuristics for each trigger type. Quando si usa ad esempio un trigger di archiviazione code di Azure, la scalabilità dipende dalla lunghezza della coda e dal tempo di attesa del messaggio meno recente della coda.For example, when you're using an Azure Queue storage trigger, it scales based on the queue length and the age of the oldest queue message.

L'unità di scalabilità è l'app per le funzioni.The unit of scale is the function app. In caso di aumento del numero di istanze dell'app per le funzioni, vengono allocate altre risorse per l'esecuzione di più istanze dell'host di Funzioni di Azure.When the function app is scaled out, additional resources are allocated to run multiple instances of the Azure Functions host. In caso di riduzione delle richieste di calcolo, il controller di scalabilità rimuove le istanze dell'host di Funzioni.Conversely, as compute demand is reduced, the scale controller removes function host instances. Il numero di istanze viene ridotto a zero quando non è in esecuzione alcuna funzione in un'app per le funzioni.The number of instances is eventually scaled down to zero when no functions are running within a function app.

Monitoraggio degli eventi e creazione delle istanze da parte del controller di scalabilità

Introduzione al ridimensionamentoUnderstanding scaling behaviors

Il ridimensionamento può variare in base a numerosi fattori e comportarsi diversamente a seconda del trigger e della lingua selezionati.Scaling can vary on a number of factors, and scale differently based on the trigger and language selected. Esistono tuttavia alcuni aspetti del ridimensionamento comuni a livello di sistema:However there are a few aspects of scaling that exist in the system today:

  • Un'app per le funzioni verrà ridimensionata solo fino a un massimo di 200 istanze.A single function app will only scale to a maximum of 200 instances. Una singola istanza può elaborare più di un messaggio o più di una richiesta alla volta. Pertanto, non esiste alcun limite per quanto riguarda il numero di esecuzioni parallele.A single instance may process more than one message or request at a time though, so there isn't a set limit on number of concurrent executions.
  • Le nuove istanze verranno allocate al massimo una volta ogni 10 secondi.New instances will only be allocated at most once every 10 seconds.

Trigger distinti possono avere limiti di ridimensionamento diversi come illustrato di seguito:Different triggers may also have different scaling limits as well as documented below:

Procedure consigliate e modelli per app scalabiliBest practices and patterns for scalable apps

Esistono molti aspetti di un'app per le funzioni che hanno un impatto sull'accuratezza del ridimensionamento, ad esempio la configurazione dell'host, il footprint del runtime e l'efficienza delle risorse.There are many aspects of a function app that will impact how well it will scale, including host configuration, runtime footprint, and resource effeciency. Per altre informazioni, vedere la sezione relativa alla scalabilità nell'articolo sulle prestazioni.View the scalability section of the performance considerations article for more information.

Modello di fatturazioneBilling model

La fatturazione per il piano a consumo viene illustrata in modo dettagliato nella pagina relativa ai prezzi per Funzioni di Azure.Billing for the Consumption plan is described in detail on the [Azure Functions pricing page]. L'utilizzo viene aggregato a livello di app per le funzioni e viene calcolato solo il tempo di esecuzione del codice di tale funzione.Usage is aggregated at the function app level and counts only the time that function code is executed. Per la fatturazione vengono usate le unità seguenti:The following are units for billing:

  • Utilizzo delle risorse in gigabyte al secondo (GB-s).Resource consumption in gigabyte-seconds (GB-s). Calcolato come combinazione di dimensioni di memoria e tempo di esecuzione per tutte le funzioni in un'app per le funzioni.Computed as a combination of memory size and execution time for all functions within a function app.
  • Esecuzioni.Executions. Conteggiate ogni volta che una funzione viene eseguita in risposta a un trigger di evento.Counted each time a function is executed in response to an event trigger.