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
Configuratione e utilizzo .NET Aspire CLI
Combinare Container Queries e Media Queries
Abilitare .NET 10 su Azure App Service e Azure Functions
Integrare SQL Server in un progetto .NET Aspire
Centralizzare gli endpoint AI Foundry con Azure API Management
Proteggere l'endpoint dell'agente A2A delle Logic App
Montare Azure Blob Storage su Linux con BlobFuse2
Introduzione alle Container Queries
Analizzare il contenuto di una issue con GitHub Models e AI
Impostare automaticamente l'altezza del font tramite CSS
Configurare e gestire sidecar container in Azure App Service
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Inserire le news di Punto Informatico nel proprio sito
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0


