All'interno del servizio Azure Functions, è stato recentemente introdotta una nuova funzionalità: Azure Durable Function. Consente all'applicazione serverless di memorizzare e gestire lo stato durante l'esecuzione. Vengono forniti, in maniera trasparente, checkpoint sullo stato di esecuzione della function e questo ci aiuta a gestire riavvii imprevisti.
Per gestire lo stato abbiamo ora a disposizione un orchestrator function che consente di definire, tramite il nostro codice, un flusso di esecuzione tra più Azure Functions. La definizione del flusso non è quindi grafica come avviene nel servizio Logic Apps, ma deve essere esplicitata dal programmatore.
Il tipico scenario di utilizzo di una Azure Durable Functions trova applicazione quando andiamo a definire una catena di funzioni che tra di loro condividono un dato; tipicamente le variabili di uscita di una funzione e la variabile di ingresso della successiva.

L'orchestrator di funzioni consente salvare lo stato della variabile di output, inoltre ogni qual volta una funzione rimane in attesa del completamento della successiva viene eseguito il check point della funzione. Lo stato di una funzione, gestito da Azure Durable Functions, non viene mai perso in caso la macchina virtuale venga spenta o riavviata.
Una applicazione di Azure Durable Functions è la seguente; vengono richiamate 3 diverse funzioni sequenzialmente. Prima F1, poi F2 ed infine F3.
public static async Task<object> Run(DurableOrchestrationContext ctx) { var x = await ctx.CallActivityAsync<object>("F1"); var y = await ctx.CallActivityAsync<object>("F2", x); return await ctx.CallActivityAsync<object>("F3", y); }
Dietro le quindi l'OrchestratorContext ci agevola notevolmente il lavoro. Ogni qualvolta rimaniamo in attesa del completamento della funzione (await), viene memorizzato un checkpoint con lo stato della funzione chiamante. In questo modo è possibile ripristinare lo stato in ogni momento dell'esecuzione anche su una istanza o una macchina diversa.
Il checkpoint avviene tramite il pattern Event-Sourcing che oltre a memorizzare lo stato corrente del dato, conserva tutti i cambiamenti che l'oggetto ha subito nel tempo. L'utilizzo dell'Event-Sourcing è trasparente e le modifiche che avvengono nel sistema vengono archiviate in un durable storage.
Le Azure Durable Functions utilizzano l'Azure Storage Account e più specificatamente blob, queue e tables.
Viene utilizzato di default lo storage associato al servizio impostato per Azure Functions ma è possibile utilizzarne un diverso per questioni di performance. La gestione della scrittura dei dati sull'Azure Storage è responsabilità diretta delle durable function e non è richiesto al programmatore la loro gestione.
Da sottolineare che in questo momento l'unico linguaggio supportato per la funzionalità descritta è il C#.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare il codice JavaScript utilizzando WeakMap e WeakSet
Creare attributi generici in C#
Effettuare test di carico con Azure Load Testing
Usare gateway dedicati con Azure Cosmos DB per migliorare le prestazioni
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Utilizzare la libreria EntityFrameworkCore.Exceptions per gestire le eccezioni di Entity Framework Core in modo tipizzato
Pubblicare un pacchetto di NuGet nel feed di GitHub
Gestire la query string nell'output cache di ASP.NET Core
Taggare la output cache in base al routing in ASP.NET Core
Le novità di Entity Framework (Core) 7
Introduzione alla security con GitHub
Usare Docusaurus per creare un sito di documentazione
I più letti di oggi
- Rilasciata la versione 1.0 di ASP.NET MVC
- Abilitare HTTP/3 in ASP.NET Core 7.0
- Seconda preview per i Dynamic Data Control 4.0
- Ecco la roadmap di ASP.NET 5: il rilascio definitivo nel corso del primo trimestre 2016
- Rilasciato il Service Pack 3 di SQL Server 2005
- Rilasciata la versione 1.0 di ASP.NET Core
- Questionario sulla qualità di VS 2005
- Disponibile il SP1 di SQL Server 2008