- Windmill demostró mediante benchmarks que es el motor de workflows open source con self-hosting más rápido en comparación con otros motores de workflow como Airflow, Prefect y Temporal
- Windmill soporta varios lenguajes de programación y ofrece un entorno de desarrollo integrado donde se pueden construir y probar workflows en minutos, sin SDKs complejos ni procesos de despliegue
- Airflow/Prefect solo soportan un runtime (Python), mientras que Windmill soporta Python, Typescript, Go y Bash, además de consultas SQL directas para BigQuery, Snowflake, Mysql y Postgresql
- En comparación con Temporal, Temporal está especializado en la gestión de colas de trabajo, mientras que Windmill también funciona como un motor de ejecución durable al incluir capacidad de espera de eventos (reactividad)
Diferencia entre motores de workflow y colas de trabajo
- La cola de trabajo es el núcleo de un motor de workflow, y muchos desarrolladores construyen su propia lógica para aprovechar colas de trabajo sin usar un motor de workflow
- Ya existen varias implementaciones de colas como SQS, Kafka, Redis with RMSQ y Orban
- Muchos desarrolladores construyen su lógica alrededor de colas de trabajo y logran una satisfacción similar a la de un motor de workflow (es decir, crear su propio motor de workflow)
Qué es un motor de workflow "All-Inclusive"
- Un motor de workflow coordina workflows en sistemas distribuidos para completar tareas respetando las restricciones de dependencia entre ellas
- 5 ventajas principales de un motor de workflow:
- Asignación de recursos: permite aprovechar al máximo un clúster, asignando cada tarea a distintos workers con diferentes recursos (CPU, memoria, GPU) y asegurando que los recursos completos del worker puedan dedicarse a la tarea
- Procesamiento paralelo: cuando las restricciones del workflow permiten ejecutar algunos pasos en paralelo (branches, for loops), el motor de workflow puede despachar esos pasos no solo a distintos threads, sino también a varios workers físicamente separados
- Observabilidad: cada tarea tiene un ID único y puede observarse individualmente, incluyendo entradas, logs, salidas y estado
- Durabilidad: si una máquina se detiene por una razón inesperada o ocurre un efecto secundario, el workflow debe reiniciarse
- El workflow debe poder reiniciarse lo más rápido posible cuando ocurra un evento inesperado; una forma de lograrlo es la idempotencia, donde ejecutar una tarea una o varias veces produce el mismo efecto
- En caso de duda, se puede reproducir todo el flujo sin consecuencias. Esto normalmente se implementa usando SDKs y archivos de log que omiten efectos secundarios cuando el ID único adjunto a la tarea aparece como parte del log
- Otro método es crear snapshots transaccionales del estado del flujo y guardar el estado después de cada tarea. Para reiniciar, basta con volver a cargar el último estado y continuar desde ahí
- Windmill usa este último enfoque y asume que la idempotencia puede implementarse en el espacio de usuario cuando se necesite
- Reactividad: pausa el flujo hasta que pueda reanudarse según eventos como webhooks o aprobaciones
El secreto de la velocidad de Windmill
- Windmill aprovecha Postgresql y Rust para maximizar la eficiencia mediante un diseño simple y optimizaciones
Diseño del sistema y cola
- Windmill ofrece un único binario compilado en Rust; los workers y el servidor se conectan a Postgresql, pero no entre sí
- La cola se implementa directamente en Postgresql, y las tareas pueden activarse desde el exterior mediante la API
Estado
- Los motores de workflow suelen representar las tareas como una máquina de estados finitos (FSM), y Windmill trata todo el flujo completo como una FSM
Transferencia de datos
- Windmill ofrece varios métodos para transferir datos, como expresiones de JavaScript, carpetas temporales compartidas e integración con S3
Eficiencia de los workers
- Los workers de Windmill procesan una sola tarea a la vez y ejecutan tareas sin contenedores para mejorar el rendimiento
Conclusión
- Windmill es un runtime y plataforma serverless open source y self-hosted que ofrece gran velocidad gracias a un diseño simple y optimizaciones basadas en Postgresql y Rust
Opinión de GN⁺
El punto más importante de este artículo es que Windmill soporta varios lenguajes de programación y ofrece un entorno de desarrollo integrado para construir y probar workflows rápidamente, sin SDKs complejos ni procesos de despliegue. Estas características son muy útiles para los desarrolladores de software, y el alto rendimiento y la eficiencia de Windmill ayudarán a lanzar mejores productos más rápido. El artículo ofrece contenido interesante para desarrolladores, especialmente para quienes quieran construir su propio motor de workflow u optimizar uno existente.
2 comentarios
Windmill - plataforma open source para crear apps internas empresariales y automatización basada en Python
Se mostró apenas un poco en mayo del año pasado, pero el desarrollador dijo que todavía no estaba listo para hacerlo público y que en 10 minutos tendría una entrevista con YC. Luego dejó un comentario diciendo que había sido aceptado en YC.
Después de entrar a YC y avanzar durante un año y medio, finalmente lanzó oficialmente el producto.
Comentarios de Hacker News