Der Unterstützer von Volcano Engine DataLeap – Workflow-Orchestrierung und Planungssystem FlowX

Für weiteren technischen Austausch und Stellenangebote folgen Sie bitte dem offiziellen WeChat-Konto der ByteDance Data Platform und antworten Sie [1], um der offiziellen Kommunikationsgruppe beizutreten

Hintergrundeinführung

Geschäftsszene

In unserer täglichen Arbeit müssen wir von Zeit zu Zeit eine bestimmte Logik wiederholt planen, und dann benötigen wir ein Planungssystem. Je nach unterschiedlichen Planungsanforderungen lassen sie sich grob in zwei Kategorien einteilen:

Zeitplanung

Aufgaben werden nach einem bestimmten Zeitraum wiederholt geplant. Diese Art von Aufgabe ist relativ einfach zu implementieren und normalerweise kann eine Crontab Aufgaben regelmäßig planen. Allerdings gibt es einige Herausforderungen bei der Anwendung einfacher Crontab-Aufgaben in der tatsächlichen Produktion, einschließlich Fehlerbehandlung, Überwachung und Bereitstellung, maschinenübergreifender Bereitstellung, Wiederholungsversuchen usw.

Abhängig von der Terminplanung

Abhängiger Planungstyp bedeutet normalerweise, dass die Auslösung einer bestimmten Logik nach dem Eintreten eines bestimmten „Ereignisses“ erfolgen muss. Dieses Ereignis kann der Abschluss einer vorgelagerten Aufgabe, die Bereitschaft von Daten auf einem angegebenen Pfad oder andere externe Auslöser sein. Die Abhängigkeiten zwischen Aufgaben bilden einen Worflow. Ein typischer einfacher WorkFlow sieht wie folgt aus:
In der obigen Abbildung muss „Benutzerbindungsrate berechnen“ warten, bis die „Datenvorverarbeitung“ abgeschlossen ist. Anschließend hängt „Benutzerbindungsrate berechnen“ von der Aufgabe „Datenvorverarbeitung“ ab. Abhängigkeiten zwischen Aufgaben erfordern möglicherweise einen „Geschäftszeitversatz“. Beispielsweise muss „Aufbewahrungsrate berechnen“ auf der Grundlage der heutigen Daten und der Daten von vor 7 Tagen berechnet werden, dann muss sich dieser Knoten auch auf die aktuelle Aufgabe „Datenvorverarbeitung“ verlassen Geschäftsdatum. Instanzen und Aufgabeninstanzen von vor 7 Tagen. Nur wenn die Instanzen an beiden Geschäftsterminen erfolgreich sind, wird die Aufgabe „Benutzerbindungsrate berechnen“ für diesen Tag ausgelöst, um die Generierung schmutziger Daten zu vermeiden.

Branchenwahl

Es gibt bereits viele Lösungen für Planungssysteme in der Branche, und auch verwandte Open-Source-Planungssysteme wurden in einem frühen Stadium untersucht. Beinhaltet hauptsächlich Folgendes

Luftstrom

Airflow wurde zuerst von Airbnb entwickelt und dann zu einem Planungssystem in Apache beigetragen. Es wird derzeit häufiger verwendet und die Community ist aktiver. Benutzer können Workflows und Planungshäufigkeit über Python definieren. Die Luftstrompositionierung ist ein allgemeines Planungssystem, das die Bereitstellung mit einem oder mehreren Knoten unterstützt. Das Gesamtarchitekturdiagramm sieht wie folgt aus
Die Hauptlogik der Planung befindet sich im Scheduler-Modul. Der Scheduler ruft die auszuführenden Aufgaben durch „Polling“ aus der Datenbank ab und übergibt sie dem Worker zur Ausführung. Im Multi-Node-Modus verteilt Scheduler Aufgaben über Celery an mehrere Worker. Zu beachten ist, dass selbst im Multi-Node-Modus der Scheduler selbst ein Single Point of Failure ist.

Askaban/Oozie

Azkaban und Oozie sind Open-Source-Planungssysteme, die von LinkedIn bzw. Apache entwickelt wurden. Sie konzentrieren sich auf die Planung von Hadoop Batch und integrieren Hadoop-bezogene Funktionen besser, sodass Benutzer Spark/Hive und andere Aufgaben problemlos ausführen können. Der Unterschied zu Airflow besteht darin, dass Askaban und Oozie DAG über Konfiguration/DSL konfigurieren. Im Vergleich zu Airflow besteht hinsichtlich der Community-Aktivität eine gewisse Lücke.

Andere Open-Source-Systeme

Zu anderen Open-Source-Systemen gehören DolphinScheduler usw. Da es so viele Open-Source-Systeme gibt, warum haben wir uns entschieden, unser eigenes Rad zu bauen – FlowX?
  • Das von uns benötigte Planungssystem ist als universelles Planungssystem positioniert, das mehrere Knotentypen verarbeiten kann.
  • Hochverfügbar und skalierbar. Dieses Planungssystem wird einige Kernverbindungen wie grundlegende Data Warehouses enthalten und muss eine hohe Verfügbarkeit der Planung gewährleisten. Gleichzeitig wird mit der weiteren Geschäftsentwicklung des Unternehmens erwartet, dass die Anzahl der geplanten Aufgaben rasch zunimmt, was eine horizontale Erweiterung erforderlich macht;
  • Einfache Sekundärentwicklung. Das Unternehmen des Unternehmens stellt einige individuelle Anforderungen an das Planungssystem, z. B. die Unterstützung benutzerdefinierter Spiegelung, das Hinzufügen von Steuerknoten, das Hinzufügen automatischer Wiederholungsversuche im Laufe der Zeit usw. und muss in der Lage sein, das System zu geringen Kosten zu ändern.
  • Einfach zu integrieren. Als zentralisiertes Planungssystem ist die Integration in andere Systeme des Unternehmens geplant. Beispielsweise kann es Datenherkunftsfunktionen basierend auf Aufgabenabhängigkeiten für die Verwendung durch Datenkartentools bereitstellen.

Einführung in die Planungsfunktionen

Funktional

  • Unterstützen Sie die regelmäßige Planung (Minutenebene, Stundenebene, Tagesebene, bestimmte Wochen- oder Monatstage)
  • Unterstützung der Abhängigkeitsausführung – Abhängigkeit zwischen Aufgaben – externe HDFS/Hive-Partitionsabhängigkeit – Aufgabenselbstabhängigkeit (abhängig von der Instanz der vorherigen Geschäftszeit) – Unterstützung von Aufgabenabhängigkeiten verschiedener Zeiträume, zum Beispiel können Aufgaben auf Stundenebene vom Tag abhängen. Aufgaben auf Ebenenaufgabe: Unterstützt die Abhängigkeit vom Geschäftszeitversatz (z. B. hängt die aktuelle Instanz von der Upstream-Aufgabeninstanz vor n Tagen oder von der Upstream-Aufgabeninstanz während eines bestimmten Zeitraums im Verlauf ab).
  • Unterstützt das Anhalten und Abbrechen laufender Instanzen, automatische Wiederholungsversuche und Alarme bei Fehlern
  • Auffüllen historischer Daten
  • Sie können den angegebenen Knoten in Worflow und alle nachgelagerten Knoten erneut ausführen, um durch die Datenqualität verursachte Probleme zu beheben.
  • Kontrolle der Aufgabenparallelität
  • Abhängigkeitsempfehlung – das System extrahiert automatisch die erforderlichen Upstream-Tabellen basierend auf der SQL-Logik des Benutzers – wenn die Upstream-Tabelle von einer Aufgabe innerhalb des Planungssystems generiert wird, wird die Upstream-Aufgabe empfohlen – wenn dies bei der Upstream-Tabelle nicht der Fall ist innerhalb des Systems Wenn die Task-Ausgabe generiert wird, wird die Sensor-Sonde-Task empfohlen.

Nicht funktionsfähig

  • Gewährleisten Sie hohe Verfügbarkeit, Skalierbarkeit und Fehlerwiederherstellungsgenauigkeit, ohne dass die Planung fehlt oder doppelt erfolgt
  • Planungsverzögerung in Sekunden
  • Mehrere Konfigurationsmethoden für Benutzeroberfläche und API

Technische Umsetzung

Basiskonzept

TAG

Der vollständige Name von DAG ist Directed Asymmetric Graph. Im Planungssystem stellt ein DAG eine Reihe zusammengehöriger Aufgaben dar, und die Abhängigkeit zwischen Aufgaben wird durch eine gerichtete Kante dargestellt. Wie in der folgenden Abbildung gezeigt, gibt es eine Kante von A nach B, was bedeutet, dass A die Vorgängeraufgabe von B ist, dh Aufgabe B hängt von der Ausführung von Aufgabe A ab.
Wie in der Abbildung gezeigt, ist eine gültige Ausführungssequenz A -> G -> B -> D -> C -> E -> F.

Aufgabe

Jeder Knoten im DAG im Planungssystem stellt eine Aufgabe und einen Teil der Logik dar. Benutzer können unterschiedliche Geschäftslogiken in der Aufgabe implementieren.

Beispiel

Das System generiert eine Instanz basierend auf dem für jede Aufgabe angegebenen Geschäftsdatum. Die Instanz ist die Grundeinheit der Planung. Gleichzeitig werden die Abhängigkeiten zwischen Aufgaben schließlich in Abhängigkeiten zwischen Instanzen umgewandelt.

Diagramm der Systemarchitektur

Modulanalyse

Internetservice

WebService dient als Haupteingang für externe Systeme zur Interaktion mit Benutzern. Benutzer interagieren über WebService durch Vorgänge wie das Erstellen von Aufgaben über die Benutzeroberfläche/API. Die Hauptfunktionen sind wie folgt:
  • Berechtigungsprüfung
  • Aufgabenentwicklung sowie Betrieb und Wartung
  • Betrieb und Wartung der Instanz
  • Erhalten Sie Protokollinformationen
  • Projektmanagement

Meister

Der Meister ist das „Herz“ des Systems. Derzeit wird die Notfallwiederherstellung des Masters über ZK durchgeführt. Zu den Hauptfunktionen von Master gehören die Verwaltung von Aufgabenabhängigkeitsdiagrammen, die Planungsprioritätsverwaltung, die Kontingentverwaltung, die Instanzverteilung sowie die Scheduler- und Worker-Überwachung.
  • Verwaltung von Aufgabenabhängigkeitsdiagrammen
    • Behalten Sie Abhängigkeiten zwischen Aufgaben bei und stellen Sie Dienste für andere Module bereit, z. B. das Abfragen der Upstream- und Downstream-Informationen einer Aufgabe.
    • Generieren Sie eine Plan-/Wiederholungsinstanz und senden Sie das INSTANCE_CREATE-Ereignis an den Planer. Gleichzeitig generiert der Master regelmäßig im Voraus Instanzen, die in Zukunft ausgeführt werden müssen.
  • Planung der Prioritätenverwaltung
    • Verwenden Sie den fairen Planungsalgorithmus von Yarn als Referenz, um das Problem der Planungsreihenfolge unter Bedingungen hoher Last zu lösen. Teilen Sie Prioritätswarteschlangen nach Aufgabenattributen auf, um sicherzustellen, dass Aufgaben geordnet nach Priorität geplant werden, um Flusskontrolle und gewichtetes Gleichgewicht zu erreichen.
  • Quotenverwaltung
    • Durch mehrdimensionale Indikatoren + Vorwärts-/Rückwärtsabgleich + Zeitintervallbeschränkungen können wir Zielaufgaben flexibel anpassen und die entsprechende Parallelität begrenzen, um „Systemplanungsressourcen am frühen Morgen zu gewährleisten und die Rückverfolgung und erneute Ausführung von Datenressourcen während des Tages sicherzustellen“. oder „Begrenzung der Auslastung durch Evaluierungsaufgaben“, „Mehrere Ressourcen“ und andere Zwecke zur Verbesserung der Systemressourcennutzung.
  • Instanzverteilung
    • Instanzen, die die Abhängigkeitsprüfung bestehen und die geplante Zeit erreichen, werden vom Master verteilt
    • Abhängig von der Art der Aufgabe entscheidet der Meister, ob er sie dem Arbeiter zur Ausführung übergibt oder sie direkt an K8s weiterleitet.
  • Modulüberwachung
    • Behalten Sie die aktuell aktive Scheduler-Liste bei, und die erstellten Instanzen werden zur Planungsprüfung an den entsprechenden Scheduler übergeben.
    • Pflegen Sie die aktuell aktive Worker-Liste und verteilen Sie Instanzen zur Ausführung an die entsprechenden Worker/k8s.
    • Überwachen Sie den Scheduler- und Worker-Status und verteilen Sie Instanzen aktiv an andere Knoten, wenn der Status abnormal ist.

Planer

Der Scheduler-Teil enthält hauptsächlich drei Untermodule
  • Abhängigkeitsprüfer
    • Rufen Sie die vom Master verteilten Ereignisse aus der Ereigniswarteschlange ab und überprüfen Sie die Upstream-Abhängigkeiten der entsprechenden Instanzen. Wenn alle Abhängigkeiten erfüllt sind, wird das Ereignis in die nächste Warteschlange geworfen.
    • Wenn die Abhängigkeiten zu diesem Zeitpunkt nicht erfüllt sind, wird das Ereignis verworfen und die aktuelle Instanz wird aktiv durch das Upstream-Erfolgsereignis ausgelöst, um zu vermeiden, dass viele Ressourcen für die Abfrage des Upstream-Status beansprucht werden.
  • Zeitprüfer
    • Entfernen Sie die Ereignisse (Instanzen), die die Abhängigkeitsprüfung bestehen und die Laufzeit erreichen, aus der Warteschlange (DelayedQueue). Wenn es sich um einen normalen Aufgabentyp handelt, wird er zur Verteilung und Ausführung an den Master übergeben. Wenn es sich um eine Aufgabe vom Typ Sensorsonde handelt, wird sie an den Sensorprozessor geworfen, um die Bereitschaft externer Daten zu prüfen.
  • Sensorprozessor
    • Derzeit sind zwei Arten von Sensorprüfungen implementiert: HDFS-Pfad und Hive-Tabelle/-Partition.
    • Der Sensor prüft, ob die entsprechenden HDFS/Hive-Daten bereit sind, und löst in diesem Fall den Downstream-Prozess aus. Wenn er nicht bereit ist, führt der Sensor während einer Erkennung keine kontinuierliche Abfrage durch. Stattdessen verwendet er den automatischen Task-Wiederholungsmechanismus und wartet die angegebene Zeit (derzeit 5 Minuten) ab, bevor er eine erneute Überprüfung durchführt. Bis die externen Daten bereit sind oder die Anzahl der Wiederholungsversuche überschritten wird.
Der Scheduler registriert sich auch im ZK. Der Master verwendet Zk, um zu erkennen, welche Scheduler verfügbar sind. Wenn der Scheduler neu gestartet wird, werden die vom Scheduler verarbeiteten Aufgaben zur Wiederherstellung aus der Datenbank abgerufen.

Arbeiter

Der Worker ist das Modul, das speziell für die Aufgabenausführung verantwortlich ist. Instanzen, die die Abhängigkeitsprüfung bestehen, werden vom Master an den Worker zur Ausführung und Überwachung des Ausführungsstatus der Aufgabe verteilt. Der Worker startet Sub-Threads, um Aufgaben zu übermitteln und zu überwachen, meldet dem Master aktiv den Status und versucht Vorgänge wie Fehler erneut. Der Arbeiter wird sich auch im ZK registrieren, damit der Meister es wahrnehmen kann.

Tierpfleger

Das im System verwendete ZK dient hauptsächlich folgenden Zwecken:
  • Master-Auswahl: Der Master wird von ZK ausgewählt, um Master und Backup zu implementieren, um eine hohe Systemverfügbarkeit zu erreichen.
  • Erkundung: Der Master verwendet ZK, um die verfügbare Liste von Planern und Arbeitern wahrzunehmen.
  • Diensterkennung: Scheduler und Worker ermitteln die Überwachungs-IP und den Port des Masters über ZK.

Zukunftsplan

Zukünftig wird dieses Planungssystem hauptsächlich im Hinblick auf „funktionale Erweiterung“ und „Benutzerfreundlichkeit“ verbessert. umfassen vor allem:
  • Stellen Sie interaktivere Methoden bereit, einschließlich CLI und Konfigurationsdateien
  • Knotentypen verbessern (z. B. Kontrollknoten)
  • Stellen Sie eine Verbindung zu weiteren Systemen her, beispielsweise zur Cronjob- und FaaS-Plattform des Unternehmens
  • Leichte Bereitstellung

Zusammenfassen

Das aktuelle selbstentwickelte Planungssystem FlowX verfügt bereits über relativ vollständige Funktionen und wurde über die Vulkan-Engine DataLeap der Außenwelt zur Verfügung gestellt. Nach mehr als einem Jahr Polieren ist die Systemstabilität gewährleistet. Das System verfügt bereits über viele grundlegende Datenverbindungen und multidirektionale Geschäftsanwendungen. Für Unternehmen integriert es wirklich „Datengenerierung, Datenübertragung, Datenverarbeitung und Geschäftsprozesse“. In Bezug auf den Interaktionsmodus verfügt es neben dem Zugriff über die Web-UI-Bedienung auch über bestimmte API-Zugriffsfunktionen.
 
Microsoft startet neue „Windows-App“ Xiaomi gibt offiziell bekannt, dass Xiaomi Vela vollständig Open Source ist und der zugrunde liegende Kernel NuttX Vite 5 ist . Alibaba Cloud 11.12 wurde offiziell veröffentlicht. Die Ursache des Fehlers wurde offengelegt: Anomalie des Access Key-Dienstes (Access Key). . GitHub-Bericht: TypeScript ersetzt Java und wird zum drittbeliebtesten. Die wundersame Operation des Sprachoperators: das Netzwerk im Hintergrund trennen, Breitbandkonten deaktivieren, Benutzer zum Wechseln optischer Modems zwingen ByteDance: Verwendung von KI zur automatischen Optimierung der Linux-Kernel-Parameter Microsoft Open Source Terminal Chat Spring Framework 6.1 offiziell GA OpenAI, ehemaliger CEO und Präsident Sam Altman & Greg Brockman, wechselt zu Microsoft
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/5588928/blog/10123214
Recomendado
Clasificación