¿Verdad que nadie ha escuchado el término Serverless? Y por supuesto Azure Functions es un auténtico desconocido ¿verdad? 😉 Sarcasmo aparte, el año pasado fue el año del Serverless y en concreto de Azure Functions, pero ésta tiene algunas limitaciones, la más importante el timeout máximo de 10 minutos y cómo concatenar diferentes ejecuciones de functions.
Para solucionar estos problemas Microsoft ha sacado la versión preliminar de Durable Azure Functions, que como su nombre indica, sirve para crear funciones que duren en el tiempo. En este artículo veremos una breve introducción de qué son y para qué sirven.
Durable Azure Functions
Las Durable Azure Functions, a partir de ahora DAF, nos permitirán crear workflows de trabajo en functions mediante código, sin cajitas ni configuraciones. Ésto nos permitirá orquestar diferentes llamadas a functions que bien tengan relación entre sí, o bien relación con el flujo de negocio.
Las DAF se basan en el patrón event sourcing, que consiste que va guardando los diferentes estados en los que se encuentra. Así, en el momento en que se suspende el flujo, al reanudarlo puede continuar donde estaba, a la vez que nos permite ir consultando este estado mediante llamadas a su API.
Los tres conceptos básicos a la hora de desarrollar una DAF son:
- OrchestrationClient à Trigger que se lanzará cuando queramos interactuar con una DAF.
- DurableOrchestrationClient à Vinculado al trigger OrchestrationClient, esta clase contiene todo lo necesario para lanzar el orquestador de funciones: iniciarlas, paralas, ver su estado, enviarle eventos….
- OrchestrationTrigger à Trigger que se ejecutará cuando se interactúa con el orquestador.
- DurableOrchestrationContext à Clase que contiene todas las clases necesarias para realizar la orquestación: esperar eventos, reiniciar el orquestador, llamar a funciones…
- ActivityTrigger à Trigger que se lanzará cuando desde un DAF orquestadora llamemos a una function.
En la siguiente URL podéis ver algunos patrones de cómo utilizarlas:
https://docs.microsoft.com/en-US/azure/azure-functions/durable-functions-overview
Podemos ver el siguiente ejemplo, como muestra muy básica de que lo que hace es llamar tres veces a una función y escribimos el resultado.
Primero tenemos la function que nos permitirá ejecutar la functions que orquestará las llamadas:
Como podemos ver esta function para ejecutarse espera que pongamos un elemento en una cola con el nombre de la function a ejecutar.
Por otro lado, tenemos la function que es invocada por la anterior que, a su vez, es la que realizará la orquestación:
Como podemos ver, se llaman tres functions (llamadas RodolfoExecute) mediante el método CallActivityAsync. En este caso, cada vez que se llama a la function, la function RodolfoSay entra en stand by hasta que llega el resultado y continua.
Por último, la function RodolfoExectue:
En las siguientes imágenes se puede ver cómo añadimos un mensaje en la cola y el resultado:
Todo el stack trace de los eventos se guarda en una table, en la cual podemos ver los estados por los que han pasado las functions:
Esto es sólo una visión muy preliminar, pero si os interesa el tema podéis mirar más documentación:
https://docs.microsoft.com/en-US/azure/azure-functions/durable-functions-overview
El código lo podéis ver en: https://github.com/bermejoblasco/DurableFunctions/tree/master