Blog

Microservices einfach und schnell mit Cadence orchestrieren

Apr 3, 2023

Die Workflow-Engine Cadence bietet einen innovativen Orchestrierungsansatz, um die Kommunikation der einzelnen Microservices in modernen IT-Architekturen weniger komplex zu gestalten. Damit reduziert sich für Entwickler und Architekten der ansonsten erhebliche Aufwand, der auch ihre Produktivität beeinträchtigt.

Massiv skalierbare Open-Source-Technologien wie Apache Cassandra, PostgreSQL oder Apache Kafka gewinnen zunehmend an Bedeutung. Im Bereich Workfloworchestrierung betrifft das die fehlertolerante, zustandsbehaftete Workflow-Engine Cadence. Die ursprünglich von Uber konzipierte Open-Source-Technologie vereinfacht den Prozess der Entwicklung und des Betriebs von komplexen, mehrstufigen und langlaufenden Prozessen erheblich. Cadence bietet eine hohe Zuverlässigkeit, Fehlertoleranz, Skalierbarkeit und Ausfallsicherheit. Es richtet sich primär an Entwickler und unterstützt sie entscheidend beim Schreiben von Code. Sie können Workflows in Code abbilden und die Businesslogik abstrahiert von der Workflowlogik in Code schreiben. Im Unterschied zu anderen Workflow-Engine-Ansätzen sind dabei wahlweise Java, Go, Python oder Ruby nutzbar. Cadence enthält weder eine Visualisierungsnotation noch ein Tool zur Spezifikation von Workflows, das heißt, die Semantik ist einfach nur Code. Allerdings bietet es mit dem Cadence-Webclient auch die Möglichkeit, Workflows während ihrer Ausführung zu visualisieren.

Durch seine Leistungsmerkmale und vielfältigen Vorteile ist es eine ideale Lösung für den Einsatz in Architekturen, die auf Microservices basieren. Microservices-Architekturen sind oft sehr komplex. Sie bestehen aus vielen verschiedenen Services, die auf unterschiedliche Weise miteinander kommunizieren. In solchen verteilten Systemen können Kommunikationsprotokolle und -muster, die Transaktionssicherheit oder die Fehlerbehandlung oft nur sehr schwer implementiert werden. Es gibt zwar mehrere Möglichkeiten für die Microservices-Kommunikation wie Request-Reponse-Pattern, Event-driven-Architekturen oder die Nutzung eines Microservice als zentralem Orchestrator. Bei einer hohen Anzahl Microservices kommen solche Ansätze – gerade auch in verteilten Umgebungen – aber schnell an ihre Grenzen, etwa hinsichtlich einfachem Fehler-Handling oder problemloser Skalierung. Cadence kann dabei helfen, diese Herausforderungen zu bewältigen, indem es die Orchestrierung von Microservices vereinfacht und den Entwicklungsprozess beschleunigt – gewissermaßen fungiert es dabei als Prozessautomatisierungslösung.

LUST AUF NOCH MEHR ARCHITEKTUR-TRENDS?

Entdecke Workshops vom 19. - 21. Juni

Cadence adressiert die Prozessebene

Vereinfacht ausgedrückt kann man sagen: Was Kubernetes oder Service Meshes auf infrastruktureller Ebene leisten, bietet Cadence auf prozessualer Ebene. Ein Service Mesh unterstützt zwar die Kommunikation und bietet Nachvollziehbarkeit hinsichtlich des Traffics, liefert aber keine Informationen zum Status. Das führt etwa dazu, dass eine Service-Instanz, die ein externes API aufruft, beim Warten auf die Antwort beendet wird.

Wie kann man nun die Persistenz der Ergebnisse einer Transaktion zwischen Microservices erreichen, beispielweise bei einer Bestellung, bei der die Daten verteilt sind, und jeder Service eine andere Aufgabe übernimmt? Eine Auftragstransaktion besteht zum Beispiel aus Kundendaten, Produktdaten oder Preisdaten. Für die Abwicklung einer verteilten Transaktion sind unterschiedliche Architektur- und Systembestandteile von Relevanz, zum Beispiel verschiedene interne und externe Requests, Datenbanken, Caches oder Queues. All das mag auf Kubernetes als Lösung hindeuten, aber das Orchestrierungswerkzeug betrifft nur die Infrastrukturebene. Cadence hingegen adressiert die Prozessebene.

Prinzipiell vereinfacht es die Verfolgung eines komplexen Zustands, die Reaktion auf asynchrone Events oder die Kommunikation mit externen Abhängigkeiten. Cadence unterstützt das durch die Bereitstellung eines fehlervermeidenden Stateful-Programmiermodells, das aus Workflows und Activities besteht.

Workflows sind fehlertolerant und stateful. Aufgrund des Event-Sourcing-Mechanismus sind sie immun gegen Prozess- und Service-Ausfälle. Im Detail ist ein Workflow eine State Machine mit Entscheidungsaufgaben, die den Workflow von einem Zustand in einen anderen bringt. Solange die Workflowausführung nicht beendet ist, steht zumindest noch eine Entscheidungsaufgabe an. Es ist damit nicht möglich, eine Aufgabe zu starten, während eine andere bereits gestartet, aber noch nicht beendet ist. Nicht zuletzt orchestrieren die Workflows die Activities – sequenziell oder parallel.

Workflows können ihren Zustand durch Event Sourcing also wiederherstellen. Das ist allerdings nur möglich, wenn der Code deterministisch ist und jedes Mal, wenn er ausgeführt wird, das gleiche Ergebnis liefert. Da das externe API Aufrufe im Workflowcode verbietet, umfasst das Cadence-Programmiermodell auch Activities. Schließlich werden in einer verteilten Microservices-Architektur auch remote APIs aufgerufen, um Aufgaben auszuführen. Solche Aufrufe können jedoch fehlerhaft sein und nicht fehlertolerant gestaltet werden, da sie außerhalb des Cadence-Workflows liegen. Hier setzen die Activities als wesentliches Element des Cadence-Programmiermodells an. Bestandteile und Funktionen sind zum Beispiel die Businesslogik, der asynchrone Aufruf über Tasklisten, die mögliche Überwachung mit dem Versenden von Heartbeats oder automatische Retries gemäß der Retry Policy.

Workflows und Activities sind somit die zentralen Komponenten des Cadence-Programmiermodells. Doch wie sieht das Ganze nun im Code aus? Der Heartbeat-Mechanismus, der für eine schnelle Reaktion auf Abstürze zur Verfügung steht, liefert dafür ein Beispiel (Abb. 1).

Abb. 1: Der Heartbeat-Mechanismus steht für eine schnelle Reaktion auf Abstürze zur Verfügung [1]

Abb. 1: Der Heartbeat-Mechanismus steht für eine schnelle Reaktion auf Abstürze zur Verfügung [1]

Weitreichendes Anwendungsspektrum

Wann sollte ein Unternehmen nun die Verwendung von Cadence in Betracht ziehen? Konkrete Anwendungsfälle sind aufgrund des Funktionsumfangs zum Beispiel:

  • mehrstufige Geschäftsprozesse, die Microservices-Aufrufe verwenden

  • Systeme, bei denen Polling-Methoden genutzt werden

  • ereignisgesteuerte Anwendungen

  • Kommunikationen mit externen Abhängigkeiten

  • Migrationen

  • Pipelines wie Daten-Pipelines oder ML-Pipelines

Die Vorteile einer fehlertoleranten Orchestrierungs- und Workflowmanagementlösung wie Cadence sind weitreichend: Vor allem vereinfacht sie die Entwicklung und den Betrieb komplexer, langlaufender, automatisierter Geschäftsprozesse, die mehrere Serviceaufrufe beinhalten und eine kontinuierliche Koordination erfordern. Dadurch ist Cadence ideal geeignet für den Einsatz in Microservices-basierten Architekturen. Es ist hochverfügbar und extrem skalierbar bis hin zu mehreren zehntausend Aktualisierungen pro Sekunde und Millionen von Workflows. Nicht zuletzt ist die Workflow-Engine ein echtes Open-Source-Projekt, das von der Community getrieben wird und dessen langfristige Unterstützung durch das Cadence-Team bei Uber gesichert ist.

Die Marktrelevanz von Cadence wird nach allgemeiner Einschätzung künftig deutlich zunehmen. Dazu beitragen könnte auch der aktuell zu beobachtende Trend zur Nutzung von Process-Mining-Anwendungen. Schließlich kann Cadence als Orchestrator auch als eine zentrale Datenquelle für die Prozessanalyse und damit auch für die Prozessoptimierung fungieren; zwei Themen, die derzeit ganz oben auf der IT-Agenda vieler Unternehmen stehen.

Prinzipiell können Unternehmen Cadence in einer On-Premises- oder eigenen Cloud-Infrastruktur einsetzen. Ebenfalls verfügbar sind aber auch vollständig verwaltete Cadence-Lösungen, sodass Unternehmen die Workflow-Engine auch auf Amazon Web Services, Google Cloud Platform oder Microsoft Azure betreiben können. Die Nutzung solcher Managed-Platform-Angebote ist insbesondere für Unternehmen interessant, die intern nicht über ausreichend Ressourcen verfügen, aber trotzdem von den Vorteilen eines innovativen Orches-trierungsansatzes profitieren möchten.