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
Azure Functions e OpenAPI: la coppia perfetta!
Monitorare metriche delle risorse Azure con Load Testing
Utilizzare la keyword with in JavaScript
Filtrare le chiamate HTTP ad un App Service in base al servizio Azure
Leggere i dati di configurazione di ASP.NET Core da Azure Key Vault
Innestare una query nel metodo Contains di Entity Framework Core
Fare automaticamente il merge di una pull request con un workflow di GitHub
Ottimizzare il codice JavaScript con i Shorthand Patterns - seconda parte
Creare applicazioni distribuite con Azure Container Apps e Dapr
Gestire i file esterni in una PWA
Produrre un inventario automatico di Azure Storage
I più letti di oggi
- Bloccare una pull request che arriva da branch non definiti in GitHub
- Gestire condizioni complesse in JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- La gestione dei verbi PUT e DELETE in un servizio REST con ASP.NET MVC 2
- Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache