Le Azure Function sono il servizio FaaS della piattaforma Microsoft che ci permettono di scrivere codice che venga eseguito senza preoccuparci del numero di istanze dei server e della capacità computazionale che mettiamo a disposizione. La loro esecuzione viene attivata tramite timer, tramite richieste HTTP o tramite input che possono variare in maniera non deterministica. Ne sono un esempio i messaggi delle code o i blob dello storage. Il vantaggio delle Function è la possibilità di usare piani a consumo che ci permettano di scalare orizzontalmente automaticamente. Lo stesso possiamo fare con un service plan riservato con l'ausilio dell'autoscale.
Ogni istanza carica il nostro codice e lo esegue, ma anche a livello dell'istanza stessa dobbiamo sapere sfruttare al meglio la CPU e la RAM messa a disposizione.
Normalmente è necessario impostare quindi se lavorare in batch e quanti elementi caricare contemporaneamente (come il caso di MaxConcurrentCalls del Service Bus Trigger), ma di recente è stata inserita la possibilità di adattare dinamicamente la concorrenza in funzione di come le nostre function si comportano.
Per sfruttare questa caratteristica è necessario aggiornare le librerie Microsoft.Azure.WebJobs.Extensions.* dei nostri trigger alla versione 5. Successivamente dobbiamo modificare il file host.json, che troviamo già disponibile inserendo i seguenti flag.
{
"version": "2.0",
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
}
}Il primo indica appunto di abilitare la concorrenza dinamica, il secondo di persistere le decisioni prese. Il motore parte, infatti, con una concorrenza bassa a 1 e alza livello in base alle prestazioni e al carico in coda. Le decisioni vengono memorizzate sul blob per permettere in caso di riavvio dell'istanza di partire con l'ultima decisione presa. Se abilitiamo il log, possiamo vedere queste decisioni sotto la categoria Host.Concurrency e capire, in unione alle prestazioni, se la concorrenza dinamica migliori il nostro applicativo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Keynote .NET Conference Italia 2025
Supportare la sessione affinity di Azure App Service con Application Gateway
Abilitare .NET 10 su Azure App Service e Azure Functions
Analizzare il contenuto di una issue con GitHub Models e AI
Esporre un server MCP esistente con Azure API Management
Personalizzare le pagine di errore su Azure App Service
Utilizzo delle stepped value functions nel CSS
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Gestire il routing HTTP in Azure Container App
Potenziare la ricerca su Cosmos DB con Full Text Search
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Utilizzare Locust con Azure Load Testing


