14 points par GN⁺ 2023-11-24 | 2 commentaires | Partager sur WhatsApp
  • Des benchmarks montrent que Windmill est le moteur de workflow open source auto-hébergeable le plus rapide, comparé à d'autres moteurs comme Airflow, Prefect et Temporal
  • Windmill prend en charge plusieurs langages de programmation et propose un environnement de développement intégré permettant de créer et tester des workflows en quelques minutes, sans SDK complexe ni processus de déploiement lourd
  • Airflow/Prefect ne prennent en charge qu'un seul runtime (Python), tandis que Windmill prend en charge Python, Typescript, Go et Bash, ainsi que les requêtes SQL directes vers BigQuery, Snowflake, Mysql et Postgresql
  • Par rapport à Temporal, spécialisé dans la gestion des files de tâches, Windmill fonctionne aussi comme un moteur d'exécution durable en incluant des fonctionnalités d'attente d'événements (réactivité)

Différence entre moteur de workflow et file de tâches

  • La file de tâches est au cœur d'un moteur de workflow, et de nombreux développeurs construisent leur propre logique autour d'elle au lieu d'utiliser un moteur de workflow
  • Il existe déjà diverses implémentations de files, comme SQS, Kafka, Redis with RMSQ et Orban
  • Beaucoup de développeurs bâtissent leur logique autour des files de tâches et obtiennent une satisfaction comparable à celle d'un moteur de workflow (en créant en quelque sorte leur propre moteur de workflow)

Qu'est-ce qu'un moteur de workflow « tout-en-un » ?

  • Un moteur de workflow orchestre des workflows dans un système distribué afin d'achever les tâches tout en respectant les contraintes de dépendance entre elles
  • Les 5 principaux avantages d'un moteur de workflow :
    • Allocation des ressources : il permet d'exploiter au maximum le cluster, d'affecter chaque tâche à des workers différents disposant de ressources différentes (CPU, mémoire, GPU), et de garantir que les ressources complètes du worker peuvent être utilisées par la tâche
    • Traitement parallèle : lorsque les contraintes du workflow permettent d'exécuter certaines étapes en parallèle (branches, boucles for), le moteur de workflow peut distribuer ces étapes non seulement à des threads, mais aussi à plusieurs workers physiquement séparés
    • Observabilité : chaque tâche possède un identifiant unique et peut être observée individuellement, avec inspection des entrées, logs, sorties et états
    • Durabilité : si une machine s'arrête pour une raison imprévue ou si des effets de bord surviennent, il faut pouvoir redémarrer le workflow
      • Le workflow doit pouvoir redémarrer le plus vite possible lorsqu'un événement imprévu se produit. Une façon d'y parvenir est l'idempotence, où l'exécution répétée d'une même tâche produit le même effet qu'une seule exécution.
      • En cas d'incertitude, on peut rejouer l'ensemble du flux sans effet secondaire. Cela est généralement implémenté via des fichiers de log et des SDK qui ignorent les effets de bord lorsque l'identifiant unique attaché à la tâche fait partie des logs.
      • Une autre méthode consiste à créer un snapshot transactionnel de l'état du flux afin de sauvegarder l'état après chaque tâche. Pour redémarrer, il suffit de recharger le dernier état et de reprendre à partir de là.
      • Windmill utilise cette dernière approche et suppose que l'idempotence peut être implémentée côté utilisateur lorsque c'est nécessaire
    • Réactivité : le flux peut être suspendu jusqu'à sa reprise en réponse à un événement tel qu'un webhook ou une approbation

Le secret de la vitesse de Windmill

  • Windmill s'appuie sur Postgresql et Rust pour maximiser l'efficacité grâce à une conception simple et à diverses optimisations

Architecture système et file

  • Windmill fournit un binaire unique compilé en Rust ; les workers et le serveur sont connectés à Postgresql, mais pas entre eux
  • La file est implémentée directement dans Postgresql, et les tâches peuvent être déclenchées de l'extérieur via l'API

État

  • Un moteur de workflow représente les tâches comme une machine à états finis (FSM), et Windmill traite l'ensemble du flux lui-même comme une FSM

Transmission des données

  • Windmill propose plusieurs méthodes de transmission des données, comme les expressions JavaScript, le partage de dossiers temporaires et l'intégration S3

Efficacité des workers

  • Les workers de Windmill traitent une seule tâche à la fois et exécutent les tâches sans conteneur afin d'améliorer les performances

Conclusion

  • Windmill est un runtime et une plateforme serverless open source et auto-hébergeables, fondés sur Postgresql et Rust, offrant une très grande rapidité grâce à une conception simple et optimisée

Avis de GN⁺

Le point le plus important de cet article est que Windmill prend en charge plusieurs langages de programmation et fournit un environnement de développement intégré permettant de créer et tester rapidement des workflows sans SDK complexe ni processus de déploiement lourd. Ces caractéristiques sont très utiles pour les développeurs, et les performances ainsi que l'efficacité de Windmill les aideront à livrer de meilleurs produits plus rapidement. L'article contient des éléments intéressants pour les développeurs, en particulier pour ceux qui souhaitent construire leur propre moteur de workflow ou optimiser un moteur existant.

2 commentaires

 
xguru 2023-11-24

Windmill - plateforme open source pour créer des applications internes d’entreprise et automatiser des workflows, basée sur Python

Le projet avait été brièvement dévoilé en mai dernier, mais le développeur disait alors qu’il n’était pas encore prêt à le rendre public et ajoutait qu’il passait un entretien YC dans 10 minutes ! Puis il a laissé un commentaire pour dire qu’il avait été accepté par YC.
Après avoir foncé pendant un an et demi après son admission chez YC, ils ont finalement lancé officiellement le produit.

 
GN⁺ 2023-11-24
Avis Hacker News
  • On dirait que les développeurs de Windmill ont appliqué exactement l’inverse du conseil « faire une seule chose et bien la faire ». Même en regardant Windmill.dev, il n’est pas clair à quoi sert le logiciel. On ne sait pas si c’est un concurrent de Retool, Airflow ou Temporal, un builder de workflows no-code, un builder d’UI en glisser-déposer, un IDE en ligne, ou un outil avec d’innombrables intégrations.
  • Je me demande si la vitesse d’un moteur de workflow devient vraiment importante au-delà d’un certain seuil. Comme beaucoup de workflows incluent des tâches de longue durée, l’essentiel est le multi-tenant, c’est-à-dire la capacité à prendre en charge autant de tâches que l’utilisateur le souhaite, tout en les planifiant et en les exécutant comme si chacune était la seule dans le moteur de workflow.
  • Je veux faire passer des processus métier depuis des feuilles de calcul, des e-mails personnels et la mémoire d’un responsable vers des formulaires web, des uploads, des e-mails automatisés et des tableaux de bord. J’ai regardé Airtable, Smartsheet, Budibase, etc., mais ils semblent davantage axés sur la gestion de projet, et moins satisfaisants pour l’intégration au calendrier, l’e-mail ou les scripts planifiés. J’ai une préférence pour une approche low-code où il existe une API pour les données, ou bien où je peux coder si nécessaire, avec un responsable qui peut faire une partie du travail d’UI via une vue tableur, et un programmeur qui gère les intégrations.
  • Je suis surpris que des gens consacrent autant de temps et d’efforts à écrire, sans jamais utiliser un correcteur orthographique, ne serait-ce qu’une fois. Je me demande s’il existe encore en 2023 des personnes qui utilisent des éditeurs de texte sans vérification orthographique par défaut.
  • Il est déroutant qu’ils parlent d’open source tout en imposant une limite de 10 utilisateurs pour le SSO. L’open source permet généralement de modifier le code, donc je me demande comment ils font respecter cette limite de 10 personnes. En regardant le code source, j’ai vu du code de vérification de licence. Si c’est open source, n’importe qui ne peut-il pas simplement supprimer ce code ? Si ce n’est pas modifiable, alors c’est « source disponible », pas « open source ». Le projet a l’air intéressant et j’aimerais le proposer à mon manager, mais je ne sais pas comment expliquer ce point.
  • Je suis Windmill depuis son lancement sur HN, et j’ai commencé à l’utiliser davantage depuis moins d’un an. Le serveur Discord est très actif, et Ruben répond en quelques minutes et corrige des bugs même le week-end.
  • J’aimerais utiliser le système Windmill, mais les questions de licence me font hésiter. La majeure partie du logiciel est sous AGPLv3, mais la section sur la licence commerciale dans le README semble suggérer une interprétation très large de l’AGPL. Dire que si l’on construit des fonctionnalités via Windmill, alors le produit doit lui aussi être en AGPLv3, implique que même de simples appels via API pourraient relever du droit d’auteur. Cela rend le positionnement de Windmill comme « totalement open source » techniquement défendable, mais en pratique plus proche de « source disponible ». Si Windmill ne veut pas que sa licence soit interprétée ainsi, il faut le clarifier.
  • Windmill est excellent. Il peut être auto-hébergé et il faut saluer sa fidélité à l’expérience développeur (Developer Experience, DX). Je n’en ai pas eu besoin au travail, mais chez moi je l’utilise pour exécuter un petit crawler web et des tâches yt-dlp. C’est un outil très amusant.
  • La licence me laisse perplexe.
  • Je n’ai pas encore trouvé comment équilibrer le fait de stocker du code dans la base de données et de l’éditer via un IDE web, avec le fait de versionner le code dans Git et de ne le modifier qu’au travers du processus de développement habituel et de peer review. Windmill stocke principalement le code dans la base de données, mais fournit une API permettant de le synchroniser avec un dépôt Git. Je me demande s’il existe un mécanisme permettant d’imposer des règles qui limiteraient certains scripts/fonctions/secrets à des workflows importés uniquement depuis le dépôt fourni.