-
Maestro: Netflix’ Workflow-Orchestrator
-
TL;DR
- Netflix hat den Quellcode von Maestro veröffentlicht
- Man kann im GitHub-Repository loslegen; wenn ihr es nützlich findet, gebt dem Projekt bitte einen Stern
-
Was ist Maestro?
- Maestro ist ein universeller, horizontal skalierbarer Workflow-Orchestrator, der für die Verwaltung großer Workflows entwickelt wurde
- Er verwaltet den gesamten Lebenszyklus von Workflows wie Datenpipelines und Pipelines zum Training von Machine-Learning-Modellen
- Nutzer können Business-Logik in verschiedenen Formaten paketieren, darunter Docker-Images, Notebooks, bash-Skripte, SQL und Python
- Anders als traditionelle Workflow-Orchestratoren, die nur DAGs (Directed Acyclic Graphs) unterstützen, unterstützt Maestro sowohl azyklische als auch zyklische Workflows und umfasst mehrere wiederverwendbare Muster wie Foreach-Schleifen, Sub-Workflows und bedingte Verzweigungen
-
Der Weg mit Maestro
- Hunderttausende Workflows wurden mit minimalen Unterbrechungen für die Nutzer erfolgreich migriert
- Im vergangenen Jahr ist die Zahl der ausgeführten Jobs um 87,5 % gestiegen; im Durchschnitt werden täglich 500.000 Jobs ausgeführt
-
Skalierbarkeit und Vielseitigkeit
- Maestro ist ein vollständig verwalteter Workflow-Orchestrator, der Tausenden Endnutzern, Anwendungen und Services bei Netflix Workflow-as-a-Service bereitstellt
- Er unterstützt vielfältige Workflow-Anwendungsfälle wie ETL-Pipelines, ML-Workflows und AB-Test-Pipelines
- Netflix ist überzeugt, dass ein einzelner Orchestrator dies übernehmen sollte, da sich die Datentabellen des Unternehmens in einem einzigen Data Warehouse befinden
-
Einführung in Maestro
- Es verwendet Workflow-Definitionen, die im JSON-Format definiert sind
- Benutzerdefinierte Felder werden mit von Maestro verwalteten Feldern kombiniert, um flexible und leistungsfähige Orchestrierungsdefinitionen zu bilden
- Workflow-Definitionen bestehen aus Eigenschaften und versionierten Workflows
- Zu den Eigenschaften gehören Informationen zu Autor und Eigentümer sowie Ausführungseinstellungen
- Versionierte Workflows enthalten eindeutige Kennungen, Namen, Beschreibungen, Tags, Timeout-Einstellungen und Prioritätsstufen
-
Strategien zur Workflow-Ausführung
- Sequenzielle Ausführungsstrategie: Führt Workflows einzeln in FIFO-Reihenfolge aus
- Strenge sequenzielle Ausführungsstrategie: Blockiert die Ausführung bei blockierenden Fehlern; diese müssen manuell behoben werden
- Nur-ersten-ausführen-Strategie: Entfernt neue Workflow-Instanzen aus der Warteschlange, bis der aktuell laufende Workflow abgeschlossen ist
- Nur-letzten-ausführen-Strategie: Führt nur den zuletzt ausgelösten Workflow aus und stoppt bereits laufende Instanzen
- Parallele Ausführungsstrategie mit Concurrency-Limit: Führt mehrere Workflow-Instanzen parallel gemäß einem vordefinierten Concurrency-Limit aus
-
Unterstützung für Parameter und Ausdruckssprache
- Unterstützt dynamische Parameter und Code-Injektion, wodurch Flexibilität und Dynamik von Workflows deutlich verbessert werden
- Um Sicherheits- und Safety-Probleme zu adressieren, wurde ein eigener Parser für eine benutzerdefinierte Ausdruckssprache entwickelt
- Simple and Safe Expression Language (SEL): Eine einfache und sichere Ausdruckssprache, die entwickelt wurde, um Risiken im Zusammenhang mit Code-Injektion zu begegnen
- Ausgabeparameter: Ermöglichen es, Ausgabeparameter aus Benutzerausführungen an das System zurückzugeben
- Parametrisierte Workflows: Werden zur Laufzeit schrittweise auf Basis benutzerdefinierter Parameter initialisiert
-
Muster für die Workflow-Ausführung
- Foreach-Unterstützung: Wird verwendet, um denselben Job wiederholt mit unterschiedlichen Parametern auszuführen
- Unterstützung für bedingte Verzweigungen: Führt nachfolgende Schritte nur aus, wenn bestimmte Bedingungen erfüllt sind
- Sub-Workflow-Unterstützung: Ermöglicht die gemeinsame Nutzung gemeinsamer Funktionen über mehrere Workflows hinweg
-
Schritt-Runtime und Schritt-Parameter
- Schritt-Runtime-Interface: Eine Schnittstelle, die einen Job zur Laufzeit beschreibt
- Zusammenführung von Schritt-Parametern: Injiziert vor der Schrittausführung Runtime-Parameter und Tags, um das Verhalten eines Schritts dynamisch zu steuern
-
Schritt-Abhängigkeiten und Signale
- Mit Schritt-Abhängigkeiten lassen sich Ausführungsabhängigkeiten ausdrücken
- Signale sind Nachrichtenteile, die Informationen einschließlich Parameterwerten übertragen
-
Breakpoints
- In Workflow-Schritten können Breakpoints gesetzt werden, die ähnlich wie Breakpoints auf Code-Ebene funktionieren
- Wenn ein Breakpoint erreicht wird, geht der betreffende Schritt in den Status „pausiert“ über, und der Fortschritt des Workflow-Graphen wird gestoppt, bis der Nutzer ihn manuell fortsetzt
-
Timeline
- Erfasst alle wichtigen Ereignisse, einschließlich der Timeline der Schrittausführung
- Ist nützlich für das Debugging und bietet Einblicke in den Zustand von Schritten
-
Retry-Richtlinien
- Unterstützt Retry-Richtlinien für Schritte, die aufgrund von Fehlern einen terminalen Zustand erreicht haben
- Unterscheidet zwischen Retries bei Plattformfehlern und bei benutzerdefinierten Bedingungen
-
Aggregierte Ansicht
- Ermöglicht die Anzeige des aggregierten Status aller Schritte einer Workflow-Instanz
- Berechnet den aggregierten Status durch Kombination der Runtime-Daten der aktuellen Ausführung mit Basisaggregationen
-
Rollup
- Bietet eine übergeordnete Zusammenfassung einer Workflow-Instanz
- Beschreibt detailliert den Status jedes Schritts und die Anzahl der Schritte je Status
-
Maestro-Ereignisveröffentlichung
- Erzeugt Ereignisse und veröffentlicht sie an externe Systeme, wenn sich Workflow-Definitionen, Workflow-Instanzen oder Schritt-Instanzen ändern
- Unterscheidet zwischen internen und externen Ereignissen
-
Erste Schritte mit Maestro
- Wurde bei Netflix umfassend eingesetzt; nun wurde der Quellcode veröffentlicht
- Der Code ist im GitHub-Repository zu finden; bei Fragen oder Feedback wird darum gebeten, ein GitHub-Issue zu erstellen
-
Danksagung
- Dank an die Teammitglieder, die zum Maestro-Projekt beigetragen haben, sowie an die Kolleginnen und Kollegen bei Netflix
GN⁺-Zusammenfassung
- Maestro ist ein Orchestrator, der für die Verwaltung großskaliger Workflows bei Netflix entwickelt wurde und Business-Logik in verschiedenen Formaten unterstützt
- Durch dynamische Parameter und Code-Injektion werden Flexibilität und Dynamik deutlich verbessert
- Verschiedene Ausführungsstrategien und Muster erleichtern die Definition und Verwaltung komplexer Workflows
- Eignet sich gut für die Verarbeitung einer einzelnen Datenquelle wie dem Data Warehouse von Netflix
- Andere Orchestratoren mit ähnlichen Funktionen sind Apache Airflow und Prefect
1 Kommentare
Hacker-News-Kommentare
Von technischen Unternehmensblogs und internen Systemen beeindruckt gewesen, inzwischen aber erkannt, dass Code auch eine Belastung ist
Fragt sich, warum es so viele Iterationen braucht, bis Ingenieure mit einer Workflow-Lösung zufrieden sind
Meinung des Gründers von Windmill.dev
Geteilte Erfahrungen mit Activebatch
Verwirrung über die Nutzung von Netflix/Conductor
Meinung zu Orchestratoren
Vergleich mit Temporal
Positive Bewertung des Projekts
Frage zu den Unterschieden zu Conductor
Kritik am Artikelinhalt