4 Punkte von GN⁺ 2024-07-24 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2024-07-24
Hacker-News-Kommentare
  • Von technischen Unternehmensblogs und internen Systemen beeindruckt gewesen, inzwischen aber erkannt, dass Code auch eine Belastung ist

    • Bevorzugt die Nutzung von Open Source, erfordert jedoch Wartung des Codes und das Hinzufügen von Funktionen
    • Alles, was kein geschäftskritischer Code ist, ist eine Verschwendung von Ressourcen
  • Fragt sich, warum es so viele Iterationen braucht, bis Ingenieure mit einer Workflow-Lösung zufrieden sind

    • Netflix, Uber und Amazon haben alle mehrere Lösungen gebaut
    • Ingenieure scheinen es interessant zu finden, Workflow-Engines zu bauen
  • Meinung des Gründers von Windmill.dev

    • Maestro und Windmill haben viele Gemeinsamkeiten
    • Wichtigste Unterschiede:
      • Windmill ist in Rust geschrieben
      • Maestro verwendet CockroachDB, Windmill nutzt einen eigenen Sharding-Algorithmus
      • Lizenzunterschied: Maestro hat Apache 2.0, Windmill AGPL
      • Im Vergleich zu Maestro, das von Netflix unterstützt wird, ist Windmill ein kleines Unternehmen
      • Bei Maestro fehlen Dokumentation für Self-Hosting und eine UI
  • Geteilte Erfahrungen mit Activebatch

    • Activebatch bietet mit einer einfachen MS-SQL-DB- und Windows-GUI-Installation eine leistungsstarke Automatisierungsumgebung
    • Airflow und andere Open-Source-Konkurrenten sind komplex
    • Schade, dass Activebatch wegen seines Enterprise-Vertriebsmodells nicht breiter genutzt wird
  • Verwirrung über die Nutzung von Netflix/Conductor

    • Das Projekt scheint Netflix/Conductor zu verwenden, nutzt aber eine archivierte Version
    • Verwendet nicht Orkes Conductor
  • Meinung zu Orchestratoren

    • Open Source und öffentliche Entwicklung sind großartig, aber es gibt bereits viele Orchestratoren
    • Es ist unwahrscheinlich, dass eine neue Option kommerziell breit eingesetzt wird
  • Vergleich mit Temporal

    • Maestro ist in Java geschrieben, Temporal in Go
  • Positive Bewertung des Projekts

    • Wollte für ML- und Data-Engineering-Projekte etwas Ähnliches bauen
    • Freut sich darauf, es zu testen
  • Frage zu den Unterschieden zu Conductor

    • Findet viele Ähnlichkeiten im Code
    • Verwendet JSON als Sprache zur Workflow-Definition
  • Kritik am Artikelinhalt

    • Wirkt, als wäre er von einer KI geschrieben
    • Es werden Beispiel-Workflows für reale Anwendungsfälle benötigt