Dieses Projekt ist zu 100 % experimentell. Bitte versuchen Sie nicht, den Controller in einer Produktions- und/oder gemeinsam genutzten Umgebung zu installieren.
Das Ziel des Temporal Worker Controllers besteht darin, die Ausführung von Workern auf Kubernetes zu vereinfachen und gleichzeitig die Worker-Versionierung zu nutzen.
Die deterministischen Einschränkungen von Temporal können beim Rollout oder Rollback von Workflow-Codeänderungen zu Kopfschmerzen führen.
Der traditionelle Ansatz des Workflow-Determinismus besteht darin, neues Verhalten hinter Versionsprüfungen einzuschließen. Mit der Zeit können diese Prüfungen zu einer Quelle technischer Schulden werden, da das sichere Entfernen dieser Prüfungen aus einer Codebasis ein sorgfältiger Prozess ist, der häufig die Abfrage aller laufenden Workflows erfordert.
Worker-Versionierung ist ein alternativer Ansatz, der es ermöglicht, Workflow-Ausführungen an Worker zu binden, die eine bestimmte Coderevision ausführen. Dies ermöglicht es einem Workflow-Autor, Versionsprüfungen im Code wegzulassen und stattdessen mehrere Versionen seines Workers parallel auszuführen, wobei er sich auf Temporal verlässt, um die Workflow-Ausführungen an Worker zu binden, die kompatiblen Code ausführen.
Dieses Projekt zielt darauf ab, eine Automatisierung bereitzustellen, die die Buchhaltung vereinfacht, um zu verfolgen, welche Worker-Versionen noch über aktive Workflows verfügen, den Lebenszyklus versionierter Worker-Bereitstellungen zu verwalten und temporäre APIs aufzurufen, um die Standardversion nach einer Bereitstellung zu aktualisieren.
Registrierung neuer Worker-Versionen
Erstellung versionierter Worker-Bereitstellungsressourcen
Löschen nicht erreichbarer Worker-Bereitstellungen
Manuelle, blaue/grüne und progressive Einführung neuer Worker-Versionen
Automatische Skalierung von Worker-Bereitstellungen
Automatisierter Rollover auf kompatible Worker-Versionen
Kanarische Analyse neuer Worker-Versionen
Optionaler Abbruch nach Timeout für Workflows in alten Versionen
Übergeben ContinueAsNew
Signals an Workflows in alten Versionen
Um mit diesem Controller kompatibel zu sein, müssen Worker mithilfe dieser Standardumgebungsvariablen konfiguriert werden:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
Jedes davon wird automatisch in der Umgebung der Pod-Vorlage festgelegt und muss außerhalb der TemporalWorker
Spezifikation nicht manuell angegeben werden.
Jede TemporalWorker
-Ressource verwaltet eine oder mehrere Standard- Deployment
. Jede Bereitstellung verwaltet Pods, die wiederum Temporal nach Aufgaben abfragen, die an ihre jeweiligen Versionen angeheftet sind.
Flussdiagramm TD
wd[TemporalWorker]
Unterabschnitt „Neueste/Standard-Worker-Version“
d5["Bereitstellung v5"]
rs5["ReplicaSet v5"]
p5a["Pod v5-a"]
p5b["Pod v5-b"]
p5c["Pod v5-c"]
d5 -> rs5
rs5 -> p5a
rs5 -> p5b
rs5 -> p5c
Ende
Unterabschnitt „Veraltete Worker-Versionen“
d1["Bereitstellung v1"]
rs1["ReplicaSet v1"]
p1a["Pod v1-a"]
p1b["Pod v1-b"]
d1 -> rs1
rs1 -> p1a
rs1 -> p1b
dN["Bereitstellung ..."]
Ende
wd -> d1
wd --> dN
wd -> d5
p1a -. „Umfrageversion v1“ .-> Server
p1b -. „Umfrageversion v1“ .-> Server
p5a -. „Umfrageversion v5“ .-> Server
p5b -. „Umfrageversion v5“ .-> Server
p5c -. „Umfrageversion v5“ .-> Server
server["Temporaler Server"]
LadenWenn eine neue Worker-Version bereitgestellt wird, automatisiert der Worker-Controller die Registrierung einer neuen Standard-Worker-Version in Temporal.
Wenn die Ausführung älterer Workflows abgeschlossen ist und veraltete Worker-Versionen nicht mehr benötigt werden, gibt der Worker-Controller auch Ressourcen frei, indem er alte Bereitstellungen löscht.
Sequenzdiagramm
Autonummer
Teilnehmer Dev als Entwickler
Teilnehmer K8s als Kubernetes
Teilnehmer Ctl als WorkerController
Teilnehmer T als Temporal
Dev->>K8s: TemporalWorker „foo“ erstellen (v1)
K8s-->>Ctl: Benachrichtigen Sie den erstellten TemporalWorker „foo“.
Ctl->>K8s: Bereitstellung „foo-v1“ erstellen
Ctl->>T: Registrieren Sie v1 als neuen Standard
Dev->>K8s: TemporalWorker „foo“ (v2) aktualisieren
K8s-->>Ctl: Notify TemporalWorker „foo“ aktualisiert
Ctl->>K8s: Bereitstellung „foo-v2“ erstellen
Ctl->>T: Registrieren Sie v2 als neuen Standard
Ctl->>Ctl: Erkennung bahnbrechender Änderungen zwischen v1 und v2 ausführen
Strg->>T: Wenn die Versionen kompatibel sind, führen Sie v1 und v2 zusammen.
Schleife Poll Temporal API
Ctl-->>T: Warten Sie, bis die Workflow-Ausführungen der Version 1 geschlossen werden
Ende
Ctl->>K8s: Bereitstellung „foo-v1“ löschen
LadenDieses Projekt befindet sich in einem sehr frühen Stadium. Daher werden externe Codebeiträge noch nicht erbeten.
Fehlerberichte und Funktionswünsche sind willkommen! Bitte reichen Sie ein Problem ein.
Sie können sich auch über Temporal Slack an @jlegrone
wenden, wenn Sie Fragen oder Vorschläge haben oder daran interessiert sind, andere Beiträge zu leisten.