Veröffentlicht am 21-02-2019

Baker: Eine Microservice-Orchestrierungsbibliothek

Für diesen ersten Beitrag bin ich froh, Ihnen eine von uns entwickelte Bibliothek präsentieren zu können: Baker ist eine Open-Source-Scala-Bibliothek, die den Aufwand für die Entwicklung von Orchestrierungslogik in APIs auf ein Drittel im Vergleich zu herkömmlichen Ansätzen reduziert.

Reduzierung der Orchestrierungslogik

Baker-Logo

Baker wurde für einen bestimmten Anwendungsfall entwickelt: Einzelpersonen werden Kunden von ING (Customer On-Boarding) über die mobile App von ING. Die unterstützende API musste die folgenden Anforderungen erfüllen:

  • Implementieren Sie einen Prozessablauf von mehr als zwanzig Schritten.
  • Schritte, die sich über eine unglaublich komplexe Systemlandschaft erstrecken, die sich über mehrere Jahrzehnte und zwölf separate Systeme entwickelt hat;
  • Ein ereignisgesteuerter Prozess, bei dem Geschäftsereignisse in einem Zeitraum von zwei Minuten bis sechs Stunden stattfinden.
  • Wiederverwendungsfunktionalität, die bereits in anderen Geschäftsprozessen integriert ist.

Wir haben erwartet, dass eine direkte Implementierung in Java ein Desaster für Katastrophen ist, da es schwierig ist, über die einmal implementierte Logik nachzudenken. Wir könnten also einen der folgenden Schritte ausführen:

  • Schreiben Sie einmal in Java und schreiben Sie die Mehrheit neu, falls sich der Prozess ändert
  • oder kommen Sie mit einer geeigneten Abstraktion aus, um die API zu erstellen.

Im Folgenden wird veranschaulicht, was unter der Haube passiert, wenn ein Benutzer mithilfe unserer Mobile-Anwendung Kunde wird. Würden Sie sich ohne Orchestrator so leicht bauen? Wir auch nicht!

Mobiler Onboarding-Workflow

Aufgrund all dieser unterschiedlichen Anforderungen wussten wir, dass eine direkte Implementierung ein Fehlschlagrezept war: Wir brauchten etwas, um den gesamten Workflow beherrschbar, zukunftssicher und fehlerfrei zu machen!

Prinzipien

Baker wurde in Scala geschrieben und ist daher mit Java und Kotlin sowie allen anderen JVM-basierten Sprachen kompatibel.

Baker bietet eine domänenspezifische Sprache (DSL) an, die Entwickler beim Entwurf und bei der Entwicklung der Orchestrierungslogik unterstützt. Es überprüft, ob ein Rezept korrekt ist, indem sichergestellt wird, dass in einem Prozess keine losen Enden vorhanden sind. Baker ist auch eine Laufzeit-Engine, die in eine API gesteckt werden kann, die den Prozessablauf ausführt.

Ein Rezept besteht aus:

  • Interaktionen (Aufrufe an zugrundeliegende Datensatzsysteme)
  • Zutaten (Container für Daten)
  • Ereignisse (was passiert und ist relevant für den Prozess)

Ein Rezept kann auch visualisiert werden.

Wechselwirkungen

Eine Interaktion ist analog zu einer Funktion. Es erfordert Eingabe (Zutaten) und liefert Ausgabe (Ereignisse). Innerhalb dieses Vertrages kann es beispielsweise Folgendes tun:

  • Rufen Sie ein externes System an
  • Legen Sie eine Nachricht in einen Bus
  • oder eine reine Funktion ohne Nebenwirkungen, die ein Dokument generiert oder von einer Zutat zur anderen transformiert;

Bei der Ausführung liefert eine Interaktion ein Ereignis als Ausgabe.

Zutaten

Zutaten sind Container für Daten. Sie können primitive Java-Typen oder POJOs sein. Zum Beispiel:

  • eine IBAN (eindeutige Kennung für ein Bankkonto)
  • ein Track & Trace-Code
  • eine Liste von Telefonnummern
  • ein Kundeninformationsobjekt mit Name, E-Mail usw.

Veranstaltungen

Ereignisse bedeuten, dass für eine Prozessinstanz etwas Interessantes passiert. Sie können auch Zutaten bereitstellen, um den Prozess fortzusetzen.

Beispiel Anwendungsfall

Um auf unser Beispiel für mobiles Onboarding zurückzukommen, sieht das Rezept aus dem wirklichen Leben so aus:

Code-Ausschnitt aus einem Bäckerrezept

Seien wir ehrlich, das ist nicht so einfach, wie man hoffen könnte. Aber wir reden hier über den gesamten Prozess, der erforderlich ist, um jeden Benutzer zu einem Kunden von ING zu machen! Zusätzlich können wir einige interessante Dinge sehen:

  • Das Rezept definiert alle Interaktionen und Zutaten, jedoch nicht ihre Beziehungen zueinander. Das ist normal. Bäcker findet das alleine heraus! Jede Interaktion definiert einfach ihre eigenen Anforderungen und der Workflow wird nur auf dieser Basis erstellt.
  • Jedes Element ist für sich sehr einfach und alles macht semantisch Sinn.
  • Die beweglichen Teile des Workflows (Anzahl der Wiederholungen, Eingabetypen usw.) sind leicht zu erkennen.
  • Alles ist an einem einzigen Ort definiert, sodass Sie einfach nach weiteren Informationen suchen können, ohne etwas über Implementierungsartefakte zu wissen.

Wann ist Baker zu verwenden?

Baker ist für Sie da, wenn Sie:

  • Einen JVM-basierten Stack haben;
  • Geschäftsprozesse mit vielen Schritten haben;
  • Sie benötigen eine Feedbackschleife mit Ihren Geschäftsexperten.
  • Verfügt über eine große Anzahl von Teams, die die Funktionalität der anderen Prozesse wiederverwenden können

Zusätzlich profitiert Baker von:

  • Eine erlaubte MIT-Open-Source-Lizenz.
  • Die Vorteile von Petri-Netzen;
  • Die verteilten Rechenfunktionen von AKKA.

Baker wird nicht empfohlen für:

  • Anwendungsfälle mit niedriger Latenz und hohem Durchsatz, wie z. B. Zahlungsabwicklung;
  • Einfache Anwendungsfälle mit zwei oder drei Schritten;
  • Wiederverwendung bietet keinen Mehrwert.

Andere gleichwertige Bibliotheken

Andere große Unternehmen haben die gleichen Probleme wie wir und haben auch eine eigene Lösung geschaffen. Wir werden einige nennen und versuchen, die Hauptunterschiede hervorzuheben. Sie sollten auf jeden Fall auch in sie hineinschauen und sich selbst entscheiden!

Vergleich von Bibliotheken ähnlich Baker

Einen vollständigen Vergleich finden Sie in der Dokumentation von Baker.

Ein Wort zur Wiederverwendung

Neben den Vorteilen in Bezug auf die Orchestrierung bietet Baker auch sehr interessante Eigenschaften hinsichtlich der Wiederverwendung. Obwohl Banking aus vielen verschiedenen Konten, Systemen und Prozessen besteht, ist es sehr häufig, dass diese verschiedenen Produkte viele ähnliche Schritte enthalten.

Als konkretes Beispiel überprüfen wir die Identität einer Person, die Kunde werden möchte, und prüfen, ob sie volljährig ist. Dies würde auch passieren, wenn Sie ein Jugendkonto oder ein Sparkonto eröffnen möchten. Ebenso ist die Generierung neuer Bankkontonummern in verschiedenen Anwendungsfällen zu finden.

Aufgrund der sehr lockeren Kopplung zwischen Zutaten und Wechselwirkungen in Baker wird es möglich, diese generisch zu machen und einen "Katalog" von gebrauchsfertigen Elementen zu erstellen. Der große Vorteil ist, dass es Teams möglich ist, diese Interaktionen im Wesentlichen "zusammenzustellen" und neue Rezepte (dh neue Fähigkeiten) mit hoher Geschwindigkeit zu erstellen.

Und genau wie npm oder Maven-Abhängigkeiten trägt das Wiederverwenden der gleichen Grundstücke auch dazu bei, qualitativ hochwertige Zutaten zu erhalten!

Woran arbeiten wir gerade?

Wir arbeiten an einer serverlosen Implementierung von Baker, damit sich Entwickler auf das Schreiben von Rezepten und deren Bereitstellung in einer gemeinsam genutzten Laufzeitumgebung konzentrieren können. Dies führt zu einer weiteren Verkürzung der Time-to-Market neuer Funktionen für unsere Kunden.

Schlussworte

Dies ist eine sehr kurze Einführung in Baker. Ursprünglich entwickelt, um unsere eigenen Schmerzpunkte zu lösen, wurde es jetzt von zahlreichen anderen Teams von ING in den Niederlanden und in Europa aufgegriffen. Aufgrund der Art und Weise, wie Rezepte strukturiert sind, erstellen Teams jetzt Repositorys für Interaktionen und teilen diese Snippets untereinander. Auf dieselbe Weise können Knotenmodule wiederverwendet werden. Sehr leistungsfähig für große Unternehmen mit vielen Teams, die einige Prozesse gemeinsam haben.

Das Projekt hat jetzt über 100 Sterne auf GitHub und wurde fast 30 Mal gegabelt und wächst weiter. Es wird außerhalb von ING verwendet und verfügt über eine sehr genehmigte Lizenz. Worauf warten Sie noch?

Zusätzliche Ressourcen

Wenn Sie zusätzliche Informationen wünschen, können Sie gerne Fragen zum Github-Projekt eröffnen oder mich (Nikola Kasev) auf Twitter kontaktieren. Vielen Dank an alle Rezensenten, die an diesem Beitrag mitgearbeitet haben, einschließlich Tim Linschoten und Julien Lengrand-Lambert.

Siehe auch

WärmetauscherVA zur Einführung eines neuen AntragsverfahrenHaben Sie sich jemals so gefühlt, als würden Sie beobachtet? Vielleicht sind Sie das Opfer des Hawthorne-Effekts!BICSI Technician - Definition, Jobbeschreibung & amp; GehaltErinnert mich an die Art von Gesprächen rund um das Entfernen des Beta-Labels auf…Wie kaufe ich einen Telefonhalter für ein Auto?