Daten in einer Microservice-Welt
1.06.2023Anatoly Zelenin
IT-Trainer und Apache Kafka Experte
Mehr Artikel aus dieser Reihe
- Warum Apache Kafka?
- Daten in einer Microservice-Welt (Dieser Beitrag)
- Ausblick auf Data Mesh
- Daten als Produkt
Unternehmen – in jeder Größenordnung – setzen vermehrt auf Microservice-Architekturen. Das heißt: Eine bislang große und komplexe Anwendung wird in mehrere Einheiten unterteilt. Diese Microservices sollen ausschließlich über Schnittstellen (kurz API) miteinander kommunizieren.
Die vermeintlichen Vorteile sind offensichtlich.
Unternehmen organisieren ihre Teams fortan in kleineren Einheiten. Diese entwickeln unabhängig voneinander ihre Lösungen. Der Nutzen? Sie können die Ergebnisse schneller ausprobieren und dadurch Fehler früher erkennen.
Ebenso wichtig: Dadurch, dass Teams kleiner sind, verbessert sich üblicherweise die Kommunikation. Bekanntlich steigt mit der Anzahl der Involvierten die Menge der potenziellen Missverständnisse. Ich sag ja: Das Streben nach Microservices ist logisch. Zumindest in der Theorie. Denn genau beim Thema Kommunikation gibt es Probleme.
Was REST oft wirklich bedeutet
Tatsächlich reden bei einem Entwicklungsprojekt nicht nur Menschen miteinander, sondern auch IT-Systeme kommunizieren untereinander. Wir sprechen von: REST. Ausgeschrieben heißt das: Representational State Transfer. Über das HTTP-Protokoll tauschen sich die einzelnen Microservices miteinander aus. Fragen werden gestellt oder beantwortet.
REST heißt, aus dem Englischen übersetzt, aber auch Ruhe. Und das ist leider passend. In klassischen Microservice-Architekturen müssen die Anwenderinnen und Anwender vor allem eines: warten.
Ein Beispiel:
Service A möchte von Service B eine Antwort auf eine Frage bekommen. Soweit unkompliziert. Das Problem?
B kann sie nicht beantworten, ohne vorher C zu fragen. C braucht wiederum Informationen von D und E für die Antwort. Und A? Wartet und wartet und wartet.
Es kommt noch schlimmer:
Vielleicht hat das Team, welches Service E betreibt, gerade eine neue Version veröffentlicht, die nicht mehr mit Cs Annahmen übereinstimmt. E kann die Anfrage dadurch nicht beantworten. Die Microservice-Architektur ist damit zum Scheitern verurteilt, ehe das Projekt überhaupt begonnen hat.
Wie Kafka Microservice-Architekturen rettet
Die offensichtliche Lösung ist altbekannt. Teams koordinieren ihre Aktivitäten und sprechen fortan alle Änderungen untereinander ab. Das Problem: Die Einheiten bauen damit genau das auf, was sie mit den Microservices eigentlich vermeiden wollten: Abhängigkeiten zwischen den Teams und damit auch zwischen den Services.
Das, was die Arbeit erleichtern sollte, erschwert sie nun. Das kostet Zeit und Geld. Zum Glück gibt es Apache Kafka, das diese Abhängigkeiten auch innerhalb einer Microservice-Architektur deutlich reduzieren kann.
Kafka verzichtet auf das Anfrage-Antwort-Spiel. Stattdessen veröffentlichen unterschiedliche (Micro-)Services permanent ihre Ereignisse. Die Services, die sich für die Informationen interessieren, horchen in Echtzeit auf diese Aktualisierungen und reagieren entsprechend schnell.
Mehr noch: Kafka kann diese Ereignisse in den unterschiedlichen Services auffangen und unternehmensweit verteilen. Man kann sich die Software als effektive und effiziente Drehscheibe für Datenströme vorstellen.
Was Kafka in der Praxis bedeutet
Um es plastischer zu erklären: Wenn du einen Service nutzt, der für Adressen zuständig ist, veröffentlicht dieser die Änderungen in dem Moment, in dem diese Anpassungen vorgenommen wurden.
Noch praxisnaher:
Wenn sich ein Grußkarten-Service um den Versand kümmert, kann er dank Kafka auf eine lokale Kopie der relevanten Daten zugreifen. Das Anfragen des Adress-Service entfällt fortan. Verzögerungen durch Downtimes oder Wartungen kannst du dir mithilfe von Kafka sparen – oder zumindest minimieren.
Ein weiterer Vorteil: Das Chaos, das durch die massenhaften Verbindungen der miteinander kommunizierenden Services entsteht, wird durch die Drehscheibe ebenso reduziert.
Die entscheidenden Vorteile von Kafka: Relativ günstig, sicher, effizient
Natürlich gab es Messaging-Systeme schon vor Kafka. Doch die Software Kafka bringt zwei große architekturelle Neuerungen mit sich:
-
Die Performance und die gleichzeitige Zuverlässigkeit Kafkas ist schwer zu übertreffen. Selbst mit einem kleinen und relativ kostengünstigen Kafka-Cluster, der aus 3 handelsüblichen (Cloud)-Servern besteht, können wir Datendurchsätze von mehreren 100 MBs und Millionen Nachrichten pro Sekunde erreichen. Das Risiko für Datenverluste ist äußerst gering, da Kafka Daten über mehrere Server repliziert und verteilt.
-
Kafka verschickt die Nachrichten nicht nur zwischen unterschiedlichen Systemen, sondern kann diese Daten aufbewahren. Bei der Einführung eines neuen Service muss dieser die Daten nicht irgendwie “synchronisieren”. Stattdessen kann er alle notwendigen Daten einfach aus Kafka lesen. Danach ist er auf dem gleichen Stand wie alle anderen Services.
Und wenn doch jemand freitags um 16:00 Uhr fehlerhaft deployt, lässt es sich mit Kafka in der Zeit “zurückreisen” und die Ursprungsdaten – vor dem Einführen des Bugs – wiederherstellen. Denn Kafka vergisst nur, wenn wir es wollen.
Anatoly Zelenin vermittelt als IT-Trainer hunderten Teilnehmern Apache Kafka in interaktiven Schulungen. Seine Kunden aus dem DAX-Umfeld und dem deutschen Mittelstand schätzen seit über einem Jahrzehnt seine Expertise und seine begeisternde Art. Darüber hinaus ist er nicht nur IT-Berater und -Trainer, sondern erkundet auch als Abenteurer unseren Planeten.