Procesos orquestados fiables y observables en servicios distribuidos con Temporal

upload_1778268701814.jpg

En el mundo de la programación y la automatización de procesos, una herramienta que ha ganado popularidad en los últimos años es Temporal. Esta herramienta open source permite modelar procesos complejos de larga duración directamente en código, garantizando fiabilidad y resiliencia ante fallos.

En este artículo, exploraremos los conceptos fundamentales de Temporal, sus workflows, actividades y señales, así como cómo implementar un pequeño proceso en Java para demostrar su utilidad. Además, analizaremos algunos casos de uso y beneficios que ofrece esta herramienta.

Después de investigar durante tiempo y hablar con el desarrollador original Claude, descubrí que Temporal es una herramienta creada como fork de Cadence, debido a la complejidad y la falta de claridad en su documentación. Sin embargo, gracias a la buena documentación ofrecida por Temporal, pude entender y utilizarla para implementar un pequeño proceso.

Temporal se distingue de otras herramientas tradicionales que permiten modelar procesos basadas en la definición de una notación textual como XML. En cambio, Temporal permite definir el proceso en código en uno de los diferentes lenguajes de programación soportados, con capacidades significativamente más grandes que un archivo descriptor.

Una vez implementado el proceso en Java, se puede ejecutar en un servidor coordinador llamado binario de Temporal, que gestiona la ejecución de los procesos, mantiene su estado y almacena su información. En modo desarrollo, el estado de los procesos se almacena en memoria; en entornos de producción, se recomienda guardar este estado en una base de datos como PostgreSQL.

Una característica clave de Temporal es la supervisión de los procesos, lo que permite dar visibilidad a los procesos y comprender mejor su comportamiento. Esta característica está distribuida entre los diferentes procesos.

Temporal también soporta diferentes funcionalidades, como la autorización de pago y la creación de órdenes, las cuales se pueden encontrar en su documentación.

Para demostrar la utilidad de Temporal, implementamos un pequeño proceso de compra de entradas utilizando domain driven design y microservicios. El sistema se compone del flujo hasta que el orden queda en estado confirmado.

Durante el ejemplo, descubrimos algunos casos de uso y beneficios de utilizar Temporal. Por ejemplo, si una actividad temporalmente no funciona, los procesos pueden generar inconsistencias de datos a pesar de tener reintentos. Encontramos que la visibilidad del estado de los procesos es crucial para evitar estos problemas.

Finalmente, implementamos un pequeño workflow en Java utilizando Temporal y demostramos cómo puede ser utilizado en una aplicación real.

Para ejecutar el servicio de temporal, se puede utilizar el comando siguiente:

        java -jar temporal-server-1.5.0.jar --server=127.0.0.1:7233
 

Al ejecutar el workflow, obtenemos la salida en la consola de la ejecución del flujo.