Absurd: Flujos de trabajo resilientes con PostgreSQL

Fuentes: Absurd In Production

Absurd es un sistema de ejecución duradera innovador que elimina la necesidad de servicios, compiladores o runtimes externos complejos para gestionar flujos de trabajo resilientes. En lugar de eso, se basa exclusivamente en PostgreSQL, utilizando un único archivo SQL (absurd.sql) y SDKs delgados (TypeScript, Python y Go experimental). Su filosofía principal es la simplicidad: toda la lógica de gestión de tareas, almacenamiento de puntos de control, manejo de eventos y programación basada en reclamaciones reside dentro de la base de datos PostgreSQL.

¿Cómo funciona? Absurd divide los flujos de trabajo en tareas, que a su vez se descomponen en pasos. Cada paso actúa como un punto de control. Si una tarea falla, se reanuda desde el último paso completado. La clave es que no requiere que el código sea determinista; se pueden usar funciones no deterministas (como Math.random() o datetime.now()) entre los pasos, ya que solo los límites de los pasos importan para la reanudación. La programación es 'pull-based', lo que significa que los trabajadores solicitan tareas a PostgreSQL según su capacidad, eliminando la necesidad de un coordinador centralizado y simplificando el alojamiento.

Aplicaciones: Inicialmente diseñado para cargas de trabajo de agentes, donde un agente interactúa con un modelo de lenguaje grande (LLM) y procesa resultados, Absurd ha demostrado ser útil en una variedad de escenarios. Esto incluye tareas programadas (crons) donde se evita la ejecución duplicada, procesamiento en segundo plano que debe sobrevivir a los despliegues y cualquier situación donde normalmente se construiría una lógica de reintento y reanudación sobre una cola.

Herramientas y Extensiones: Para facilitar el desarrollo y la depuración, Absurd incluye absurdctl, una herramienta de línea de comandos para gestionar tareas y eventos, y Habitat, un panel web para monitorizar el estado de los flujos de trabajo. Además, se ha integrado con agentes de codificación para depurar el estado del flujo de trabajo directamente desde la herramienta de agente.

Limitaciones y Futuro: Aunque el diseño central ha demostrado ser robusto, Absurd carece de un programador integrado y un modelo de 'push' (notificaciones activas). El equipo considera la posibilidad de explorar la implementación de un modelo de 'durable promises' en el futuro, aunque esto presenta desafíos de complejidad. La simplicidad y la delgadez de los SDKs son una prioridad, lo que facilita su comprensión, depuración y adaptación.