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
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Generare token per autenicarsi sulle API di GitHub
Utilizzare Azure AI Studio per testare i modelli AI
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Utilizzare Tailwind CSS all'interno di React: installazione
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Estrarre dati randomici da una lista di oggetti in C#
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Hosting di componenti WebAssembly in un'applicazione Blazor static
Eseguire operazioni sui blob con Azure Storage Actions
Creazione di componenti personalizzati in React.js con Tailwind CSS