Organisation
Die Appentwickler der Handelskette verteilen sich nicht klassisch-horizontal auf Teams etwa für Backends, Frontends, Middleware, sondern vertikal, das heißt, eine Arbeitsgruppe entwickelt alle Schichten eines Funktionsbausteins.
Wenn an einer großen Applikation zu viele Entwickler parallel arbeiten, gehen Fokus und Verantwortung verloren. Der einzelne Entwickler kann nicht mehr alle fachlichen Aspekte von vorne bis hinten durchdenken. Bei Modulen aus Microservices hingegen bleibt dies möglich. Wenn Backend-Entwickler komplizierte Schnittstellen abliefern, auf denen Frontend-Entwickler aufsetzen müssen, ist im Wortsinn Ärger programmiert.
Das klassische Modell der horizontalen Schichtung der Apps und Teams hat ausgedient. Heute schneidet man beide vertikal entlang funktional vollständiger Module, die sich in Microservices aufteilen. So verstehen die Entwickler den Sinn und Zweck der App besser, kommen mit der Arbeit schneller voran, es entstehen weniger Schnittstellen zwischen Teams, die aus Microservices zusammengesetzte App lässt sich leichter warten.
Methoden und Tools
Wie gut und schnell Entwickler arbeiten, hängt primär von den verfügbaren Methoden und Werkzeugen ab. Einen entscheidenden Anteil am Projekterfolg hat die laufende Integration (Continuous Integration, CI) und Auslieferung (Continuous Delivery, CD) der Microservices. Bei der CI werden die iterativ entwickelten Beiträge des Teams automatisiert in die Gesamtapp eingefügt, ihre Funktion und das Zusammenspiel dabei getestet. Continuous Delivery heißt, nach jeder Programmierrunde den Zwischenstand auszuliefern, um den produktiven Einsatz der Software zu beschleunigen, Feedback der Nutzer einzuholen und die App iterativ zu optimieren.
Die ganze Softwarepipeline muss automatisiert sein. Jedes Rollout kostet Zeit und Geld. Die Entwickler wenden sich an die IT-Zentrale, Tickets für das Rollout werden angelegt und abgearbeitet, manchmal wartet das Team Stunden oder Tage darauf, dass der Kollege in der Zentrale einen Knopf drückt. Frustrierend. Das braucht niemand. Hier schont eine Automation des Rollouts das Budget – und die Nerven!
Wichtig ist auch eine Deployment-Governance, ein Verfahren, das sämtliche Änderungen erfasst und den aktuellen Stand der App verbindlich dokumentiert. Also im Wesentlichen ein Releasemanagement inklusive Festlegung des Funktionsumfangs und Versionskontrolle.
Nur wenn sich jede Änderung an der App im Detail nachvollziehen lässt, wissen wir bei Problemen im Echtbetrieb, wo die Fehleranalyse ansetzen sollte.
Hochgradige Automation rationalisiert nicht nur die Verteilung der Software, sondern auch die Infrastruktur, auf der die App läuft. Die bevorzugte Methode, neue Software schnell und sicher einzusetzen, ist der Betrieb im virtuellen Container, kurz Containerisierung oder Containering genannt.
Das Rollout sollte die Software und die Infrastruktur, auf der sie aufsetzt, umfassen. Das anzuwendende Verfahren heißt Infrastructure as Code oder programmierbare Infrastruktur. Eine Virtualisierung mit Containern hat nur Vorzüge, keine Nachteile. Das Unternehmen behält seinen Softwarestack im Griff, die einzelnen Entwicklungsteams können ihre Rollouts optimal unterstützen. Ein Container enthält alles, was man dazu braucht, von den Umgebungsvariablen über Bibliotheken und die Java-Version bis zur Laufzeitumgebung.
In Betrieb gehen darf eine Software allerdings nur mit einem strengen Monitoring und automatischen Meldungen bei kritischen Zuständen.
Wenn wir einen Geschäftsprozess mit mehreren Microservices abbilden, müssen wir im Detail wissen, wie das Zusammenspiel klappt. Das ist nicht einfach. Dazu brauchen wir Metriken sowohl für den Gesamtprozess wie für die einzelnen Microservices. Nur die Services zu messen und zu analysieren, genügt nicht. Wir müssen den Gesamtablauf als Kette aus Microservices überwachen.
Jedes Entwicklungsteam muss seine Microservices während der gesamten Lebensdauer selbst überwachen. Diese Verantwortung darf man niemals an eine zentrale Stelle abgeben. Was man delegieren kann, sind die Infrastrukturaufgaben, also etwa: Welches Tool verwenden wir zum Monitoring, wer setzt das Tool auf, wer überwacht es? Solche Aufgaben sind in einer Zentrale sogar besser aufgehoben, zumal diese mit Vorgaben für Effizienz in den Teams sorgt.
Die verbreitete, von manchen Quellen empfohlene zentrale Speicherung und Analyse von Logdaten zur Prozesskontrolle erachtet unser Gesprächspartner als weniger relevant. Allerdings muss ein mit Microservices abgebildeter Fachprozess anhand sogenannter Correlation- IDs in seinem Ablauf verfolgbar bleiben.
Erfahrungsgemäß sind Fehler in verteilten Prozessen mit dem zentralen Logsystem allein kaum zu finden. Bei dessen Analyse zeigen die Teams wieder mit den Fingern aufeinander. Selbst wenn das Logsystem mit Correlation-IDs arbeitet, verteilt sich das IT-Wissen auf die unterschiedlichen Teams und es herrscht eine gewisse Scheuklappenmentalität.
Dennoch erweist sich ein zentrales Logging als nützlich. In kompetenter Hand hilft es, den personellen Aufwand bei der Fehleranalyse zu minimieren. Hier sind dann aber eher Fachexperten gefragt als Entwickler. Doch auch wenn sich Fehler damit schneller orten und beheben lassen, heißt das nicht unbedingt, dass sich deswegen das ganze Entwicklungsprojekt beschleunigt.