Eseguire funzioni con stato con le Azure Durable Functions

di Andrea Tosato, in Azure Functions,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi