Ein Buch beschreibt den Entwurf komplexer Softwaresysteme unter Zuhilfenahme von Architekturmustern, das zweite den zentralen Datenverteiler Kafka.
Datendrehscheibe
Das allgegenwärtige Cloud-Computing verursacht diverse Seiteneffekte. Es begünstigt beispielsweise Microservice-Architekturen, deren lose gekoppelte Komponenten ständig Daten austauschen müssen. Zudem weckt es mit seiner Agilität auch den Wunsch, vom Nacheinander des Batch Processing wegzukommen und zu einer fortlaufenden Datenverarbeitung zu gelangen. Als Lösung beider Probleme bietet sich Apache Kafka an: Es fungiert als zentrale Datendrehscheibe, operiert fast in Echtzeit, ist skalierbar und ausfallsicher, speichert Daten und lässt sich sowohl im Stil eines Messaging Systems als auch im Stream Processing einsetzen. Analoly Zelenin und Alexander Kropp beschreiben dieses Tool im vorliegenden Buch ausführlich.
Los geht es mit einem einfachen, fiktiven Beispiel, das die grundlegenden Konzepte illustriert: Sender und Empfänger, die hier auch Producer und Consumer heißen; Daten oder Nachrichten, die sich nach Stichworten oder Topics ordnen; Broker, die die Daten organisieren und speichern. Es folgen grundlegende Erläuterungen zu Replikation und Partitionierung, die die Grundlagen für Ausfallsicherheit und Performance bilden. Das nächste Kapitel baut darauf auf und steigt tiefer in die Funktionen von Producern, Brokern und Consumern beim Erzeugen, Versenden, Speichern und Empfangen von Daten ein. Außerdem wird untersucht, wie man durch Log Retention (Lebenszeitbegrenzung) und Log Compaction (Löschen alter Versionen) einer Vermüllung des Systems vorbeugt.
Das letzte Kapitel widmet sich unter der Überschrift “Kafka im Unternehmenseinsatz” einer Reihe von in der Praxis bedeutsamen Ergänzungen aus dem unmittelbaren Kafka-Umfeld. Dazu zählen Kafka Connect zur Anbindung an diverse Applikationen, Kafka Streams zum Filtern und Verarbeiten durchlaufender Daten und die Schemata, mit denen sich Datenstrukturen definieren lassen, die über das einfache Byte-Array hinausgehen, das Kafka intern für alles nutzt. Auch Aspekte wie Datensicherheit oder der Umgang mit Problemen durch Ausfälle einzelner Komponenten kommen hier zur Sprache. Alles in allem präsentiert sich das Buch als gut verständlicher, umfassender und trotzdem kompakter Einführungskurs in das Kafka-Universum.
Mustergültig
Fehler im grundlegenden Entwurf eines komplexen Softwaresystems lassen sich später im Entwicklungsprozess kaum noch korrigieren. Beim Vermeiden solcher Fehler helfen Architekturmuster, die die Interaktion der einzelnen Komponenten modellhaft beschreiben. Gleichzeitig reduzieren sie die Komplexität und erleichtern das Testen. Die Autoren des vorliegenden Werks wollen diese bislang vorwiegend anhand von Java- oder C++-Beispielen diskutierte Methode für die Python-Community erschließen.
Der erste Teil des Buchs stellt Pattern aus dem Bereich des Domain Driven Development (DDD) vor, darunter das Repository- und das Service-Layer- sowie Unit-of-Work-Pattern, die allesamt eng verzahnt sind. Die Autoren präsentieren sie nicht mit rein akademischen Ausführungen, sondern anhand von Beispielen aus eigener Praxis. Dabei zeigen sie, wie etwa das Repository-Pattern auf abstrakte Weise persistenten Storage modelliert und wie man dabei die Details des Datenzugriffs verbirgt. Das entkoppelt das Domänenmodell von der konkreten Datenbank im Hintergrund. Dem Nutzen solcher Abstraktionen, nicht zuletzt auch für die Konstruktion passender Tests, widmet sich das ganze dritte Kapitel.
Teil 2 behandelt Muster aus dem Bereich der ereignisgesteuerten Architektur. Konkret geht es um Domain Events: Sie beschreiben, wie bestimmte Interaktionen andere auslösen, indem sie den Pattern Message Bus für die Kommunikation verwenden, um am Ende Handler aufzurufen, die ein weiteres Muster beschreibt. Weiter spielt hier die Command-Query Responsibility Segregation eine Rolle wie auch das Muster Dependency Injection.
Der Text ist stark mit englischen Fachwörtern und Abkürzungen durchsetzt, aber noch gut verständlich. Zudem helfen viele Codebeispiele und Diagramme dabei, den vorgestellten Gedanken zu folgen. Das Buch empfiehlt sich vor allem für diejenigen Programmierer, die sich in das weite Feld der Architektur-Pattern einarbeiten wollen, dabei aber auf Beispiele in ihrer bevorzugten Sprache Python setzen möchten, statt sich in für sie schwer lesbaren Java- oder C++-Code zu vertiefen.






