Cómo no romper los límites, cómo crear una buena arquitectura y cómo hacer un buen mantenimiento

Serverless en modo infinito

¿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:Serverless en modo infinito

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:Serverless modo infinito

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:

Serverless en modo infinito 3

Serverless en modo infinito Serverless en modo infinito

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:

Serverless en modo infinito

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

mm

Sobre Robert Bermejo

Robert Bermejo lleva más de 10 años en el mundo Microsoft, principalmente en entornos web y desde hace 4 años en Azure, siendo MVP en esta categoría. Organizador de la comunidad de Azure en Barcelona (@CAT_zure) donde mensualmente organiza meetups sobre esta temática, también escribe en la revista CompartiMOSS así como se le puede ver en los diversos eventos nacionales hablando sobre Azure. Actualmente es Team Leader en ENCAMINA y se puede decir que vive en la nube ;)
Esta entrada ha sido publicada en Azure. Enlace permanente.
ENCAMINA, piensa en colores