- Windmill belegt per Benchmark, dass es im Vergleich zu anderen Workflow-Engines wie Airflow, Prefect und Temporal die am schnellsten selbst hostbare Open-Source-Workflow-Engine ist
- Windmill unterstützt verschiedene Programmiersprachen und bietet eine integrierte Entwicklungsumgebung, mit der sich Workflows in wenigen Minuten aufbauen und testen lassen – ohne komplexe SDKs oder Deployment-Prozesse
- Airflow/Prefect unterstützen nur eine Runtime (Python), während Windmill Python, Typescript, Go und Bash unterstützt und direkte SQL-Abfragen für BigQuery, Snowflake, Mysql und Postgresql bietet
- Im Vergleich zu Temporal, das auf das Management von Job-Queues spezialisiert ist, fungiert Windmill auch als langlebige Execution Engine einschließlich Event-Waiting-(Reactivity-)Funktionen
Der Unterschied zwischen Workflow-Engines und Job-Queues
- Job-Queues sind der Kern von Workflow-Engines, und viele Entwickler bauen ihre eigene Logik darauf auf und nutzen Job-Queues, ohne eine Workflow-Engine zu verwenden
- Es gibt bereits verschiedene Queue-Implementierungen wie SQS, Kafka, Redis with RMSQ und Orban
- Viele Entwickler bauen ihre Logik rund um Job-Queues auf und empfinden dadurch eine ähnliche Zufriedenheit wie mit einer Workflow-Engine – praktisch der Bau einer eigenen Workflow-Engine
Was ist eine „All-Inclusive“-Workflow-Engine?
- Eine Workflow-Engine koordiniert Workflows in verteilten Systemen, um Aufgaben unter Einhaltung von Abhängigkeitsbeschränkungen abzuschließen
- Die 5 wichtigsten Vorteile einer Workflow-Engine:
- Ressourcenzuweisung: Cluster können optimal ausgelastet werden, indem alle Aufgaben verschiedenen Workern mit unterschiedlichen Ressourcen (CPU, Speicher, GPU) zugewiesen werden, sodass die gesamten Ressourcen eines Workers für einen Job genutzt werden können
- Parallelisierung: Wenn sich aufgrund der Einschränkungen eines Workflows bestimmte Schritte parallel ausführen lassen (Branches, For-Loops), kann die Workflow-Engine diese Schritte nicht nur auf Threads, sondern auf mehrere physisch getrennte Worker dispatchen
- Observability: Jede Aufgabe hat eine eindeutige ID und kann einzeln beobachtet werden, etwa durch Inspektion von Eingaben, Logs, Ausgaben und Status
- Dauerhaftigkeit: Wenn eine Maschine aus unerwarteten Gründen stoppt oder Side Effects auftreten, muss der Workflow neu gestartet werden
- Ein Workflow sollte bei unerwarteten Ereignissen so schnell wie möglich neu starten können; ein Weg dorthin ist Idempotenz, bei der dieselbe Aufgabe bei mehrfacher Ausführung den gleichen Effekt hat wie bei einmaliger Ausführung
- Wenn Unsicherheit besteht, wird der gesamte Ablauf ohne zusätzliche Auswirkungen erneut abgespielt. Das wird üblicherweise mit Log-Dateien und SDKs umgesetzt, bei denen eine an Aufgaben angehängte eindeutige ID Teil des Logs ist, sodass Side Effects übersprungen werden können
- Eine weitere Methode ist das Erzeugen transaktionaler Snapshots des Flow-Zustands, bei dem der Zustand nach jeder Aufgabe gespeichert wird. Für einen Neustart lädt man einfach den letzten Zustand und setzt die Ausführung von dort fort
- Windmill verwendet Letzteres und geht davon aus, dass Idempotenz bei Bedarf im User Space implementiert werden kann
- Reaktivität: Der Flow wird pausiert, bis er durch ein Event wie einen Webhook oder eine Freigabe wieder aufgenommen wird
Das Geheimnis hinter Windmills hoher Geschwindigkeit
- Windmill nutzt Postgresql und Rust, um durch ein einfaches Design und Optimierungen maximale Effizienz zu erreichen
Systemdesign und Queue
- Windmill liefert ein einzelnes in Rust kompiliertes Binary; Worker und Server sind mit Postgresql verbunden, aber nicht direkt miteinander
- Die Queue wird direkt in Postgresql implementiert, und Jobs können extern über die API ausgelöst werden
Zustand
- Workflow-Engines stellen Aufgaben als Finite-State-Machine (FSM) dar, während Windmill den gesamten Flow selbst als FSM behandelt
Datenübergabe
- Windmill bietet verschiedene Methoden zur Datenübergabe, darunter JavaScript-Ausdrücke, die gemeinsame Nutzung temporärer Ordner und S3-Integration
Worker-Effizienz
- Die Worker von Windmill verarbeiten jeweils nur eine Aufgabe gleichzeitig und führen Jobs ohne Container aus, um die Performance zu verbessern
Fazit
- Windmill ist eine Open-Source-, selbst hostbare serverlose Runtime und Plattform, die auf Postgresql und Rust basiert und durch einfaches Design und Optimierungen sehr hohe Geschwindigkeit bietet
Meinung von GN⁺
Der wichtigste Punkt dieses Artikels ist, dass Windmill verschiedene Programmiersprachen unterstützt und eine integrierte Entwicklungsumgebung bietet, mit der sich Workflows schnell aufbauen und testen lassen – ohne komplexe SDKs oder Deployment-Prozesse. Diese Eigenschaften sind für Softwareentwickler sehr nützlich, und Windmills hohe Performance und Effizienz können dabei helfen, bessere Produkte schneller auf den Markt zu bringen. Der Artikel ist für Entwickler interessant, insbesondere für diejenigen, die eine eigene Workflow-Engine bauen oder bestehende Engines optimieren möchten.
2 Kommentare
Windmill - Open Source für das Erstellen Python-basierter interner Unternehmens-Apps und für Automatisierungsplattformen
Im Mai letzten Jahres wurde es kurz vorgestellt, aber der Entwickler meinte, er sei noch nicht bereit für die Veröffentlichung, und sagte dann: „In 10 Minuten habe ich mein YC-Interview!“ .. und später schrieb er in einem Kommentar, dass er bei YC angenommen wurde.
Nach der YC-Zusage sind sie anderthalb Jahre durchgestartet und haben das Produkt nun offiziell gelauncht.
Hacker-News-Kommentare