14 puntos por GN⁺ 2023-11-24 | 2 comentarios | Compartir por WhatsApp
  • 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

 
xguru 2023-11-24

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.

 
GN⁺ 2023-11-24
Comentarios de Hacker News
  • Parece que los desarrolladores de Windmill hicieron exactamente lo contrario del consejo de "haz una sola cosa y hazla bien". Incluso viendo Windmill.dev, no queda claro para qué sirve el software. Confunde si es competidor de Retool, Airflow o Temporal, si es un constructor de flujos de trabajo no-code, un creador de UI con arrastrar y soltar, un IDE en línea o una herramienta con muchísimas integraciones.
  • Me pregunto si la velocidad de un motor de flujos de trabajo realmente importa una vez que supera cierto nivel. Como muchos flujos incluyen tareas de larga duración, lo importante es la multi-tenencia, es decir, la capacidad de soportar tantas tareas como quieran los usuarios mientras cada una se programa y ejecuta como si fuera la única en el motor de flujos de trabajo.
  • Quiero mover procesos de negocio que hoy viven en hojas de cálculo, correos personales y la memoria del gerente hacia formularios web, cargas, correos automatizados y dashboards. Revisé Airtable, Smartsheet, Budibase y otros, pero parecen más enfocados en gestión de proyectos y no me convencen en integración con calendarios, correo o scripts programados. Si hace falta, puedo programar o usar una API para los datos, y prefiero un enfoque low-code donde el gerente pueda hacer parte del trabajo de UI con una vista tipo hoja de cálculo y un programador se encargue de las integraciones.
  • Me sorprende que la gente dedique tanto tiempo y esfuerzo a escribir y aun así no use ni una vez el corrector ortográfico. Me pregunto si en 2023 todavía hay personas que usan editores de texto que no hacen corrección ortográfica por defecto.
  • Es confuso que digan que es open source pero que haya un límite de 10 usuarios para SSO. Normalmente open source permite modificar el código, así que me pregunto cómo hacen cumplir ese límite de 10 personas. Revisé el código fuente y hay código de verificación de licencia. Si fuera open source, ¿no podría cualquiera quitar ese código? Si no se puede modificar, entonces no es "open source", sino "source-available". El proyecto se ve genial y quería proponérselo a mi jefe, pero no sé cómo explicar esta parte.
  • He seguido a Windmill desde su lanzamiento en HN y empecé a usarlo más desde hace menos de un año. El servidor de Discord es muy activo y Ruben responde en minutos y corrige bugs incluso los fines de semana.
  • Quiero usar el sistema de Windmill, pero el tema de la licencia me frena. Aunque la mayor parte del software está bajo AGPLv3, la sección de licencia comercial del README sugiere una interpretación muy amplia de la AGPL. Decir que, para construir funcionalidad a través de Windmill, tu producto también tendría que ser AGPLv3 implica que incluso una simple llamada por API podría quedar alcanzada por la ley de copyright. Eso hace que posicionar a Windmill como "totalmente open source" sea técnicamente correcto, pero en la práctica se parece más a "source-available". Si Windmill no quiere que su licencia se interprete así, debería aclararlo.
  • Windmill es excelente. Se puede self-hostear y se mantiene fiel a la experiencia de desarrollador (Developer Experience, DX). No lo he necesitado en el trabajo, pero en casa lo uso para ejecutar pequeños web crawlers y tareas de yt-dlp. Es una herramienta muy divertida.
  • Estoy confundido con la licencia.
  • Todavía no encuentro cómo equilibrar guardar código en una base de datos y editarlo desde un IDE web, frente a hacer check-in del código en Git y permitir cambios solo a través de procesos normales de desarrollo y revisión por pares. Windmill guarda principalmente el código en la base de datos, pero ofrece una API para sincronizar desde un repositorio Git. Me pregunto si hay algún mecanismo para imponer reglas que limiten ciertos scripts/funciones/secrets únicamente a flujos de trabajo importados desde el repositorio provisto.