Veränderbare Architekturen

05.12.2017
Von: Keit Isensee

Die diesjährige W-JAX ist vorbei und die Hauptthemen haben sich kaum verändert. Es dominieren zwar weiterhin die Bereiche Cloud und Micro Services, doch der Hype der Vergangenheit weicht der beruflichen Realität. Nicht für alle Probleme sind Micro Services oder die Cloud eine gute Lösung und die ersten Projekte sind bereits gescheitert. Thematisch gibt es daher viele Vorträge, die die Probleme adressieren, mit denen man beim Einsatz dieser Technologien zu kämpfen hat. Dazu gehören auch die Probleme, die sich direkt aus den Abhängigkeiten vieler Micro Services untereinander ergeben. Die sehr interessante Keynote von Ben Stopford widmete sich einer wandelbaren Architektur mit Hilfe von Kafka und beschreibt einen Lösungsansatz.

Apache Kafka ist eine verteilte Streaming-Plattform und wird benötigt, um unterschiedliche Datenströme zu verteilen. Es ist sehr ähnlich zu normalen Message-Queues. Der wesentliche Vorteil von Kafka besteht darin, dass es zum einen die Datenströme speichern kann und dabei Fehlertolerant ist und zum anderen sehr hoch skalierbar und ressourcensparend ist. Kafka empfängt Nachrichten, die einem sogenannten Topic angehören. Das Topic dient dazu die Nachrichten Thematisch zu gliedern. Ein Producer schickt Nachrichten und ein Consumer kann Nachrichten zu einem oder auch mehreren Topics empfangen. Einmal empfangene Nachrichten bleiben in Kafka unveränderlich und können auch persistiert werden. In dieser Hinsicht kann man Kafka auch als eine Art inkrementelle Replikation verstehen. 

Ein Beispiel: Micro Services rufen sich gegenseitig auf (z.B. via REST) und übergeben Daten für eine bestimmte Aufgabe.

Ein Aufruf könnte beispielsweise so aussehen: Vom Client kommt über den Webserver eine Bestellung zum Order Service. Der Orderservice bearbeitet die Bestellung und ruft den Shipping Service auf, um den Versand einzuleiten. Der Shipping Service benötigt noch die Adresse der Kunden und befragt den Customer Service. Am Ende kann die Bestellung verschickt werden.

Die Lösung mit Kafka entfernt die direkten Aufrufe der Services. Jeder Service verschickt seine Events an Kafka und empfängt die Events, für die er sich angemeldet hat. Die Services „kennen“ sich untereinander nicht mehr und sind nicht mehr voneinander abhängig.

Apache Kafka kann nicht nur Nachrichten verwalten, sondern auch Streams verarbeiten. Hierfür können sowohl die Nachrichten, als auch andere Datenquellen (Datenbanken) verwendet werden. Ein Strom von Änderungen wird in Kafka verwaltet und kann dabei so verwendet werden, wie wir es seit Java8 kennen.

Nehmen wir als Beispiel eine Mail, die verschickt werden soll, wenn die Bestellung eingegangen und die Bezahlung abgewickelt ist. Beide Ereignisse treten zeitlich nah nacheinander auf. Durch die Verwendung von Streams kann man jetzt den Bestell Stream und den Bezahl Stream verknüpfen und sucht in einem Zeitfenster alle bezahlten Aufträge. Für sie generiert man anschließend eine Mail.

Falls gewünscht, können im Anschluss die Daten in einer Datenbank abgelegt werden.

[1]Quelle: Ben Stopford: The Streaming Transformation; jax.de/big-data-machine-learning/the-streaming-transformation/


Kategorie: Apache Kafka

INDIVIDUELLE SOFTWARE

KONTAKT | IMPRESSUM | DATENSCHUTZ | AGB