© Excellent backgrounds/Shutterstock.com
Microservices in der Praxis

Nie wieder Monolithen!


Bei der Hypoport AG haben wir bereits drei verschiedene Modularisierungsinkarnationen erlebt. Jede Inkarnation brachte uns näher an das Ideal einer flexiblen, wartbaren Architektur. Und dennoch stellten wir nach wenigen Jahren der Produktweiterentwicklung wieder fest: Die Anwendung ist voll von unbeabsichtigter Komplexität, Innovationen sind nur schwer möglich und die Umsetzung von Funktionalität dauerte kontinuierlich länger. Der Microservice-Architekturstil verheißt durch die Zerlegung eines Systems in kleine, unabhängige Services nachhaltige Besserung. Wir haben’s ausprobiert und sind begeistert.

Im Jahr 2010 kannten wir noch keine Microservices und wollten dennoch alles richtig machen: Nie wieder ein Monolith! Ein Greenfield-Projekt bot viele Möglichkeiten, die Architektur zu gestalten. Die angestrebte (eine) Webanwendung haben wir mit dem Product Owner gemeinsam fachlich in acht grobgranulare Module zerlegt. Jedes Modul wurde als Web-App mit eigenständiger NoSQL-Datenbank umgesetzt und alle Web-Apps wurden gemeinsam durch eine Deployment Pipeline kontinuierlich auf das Produktionssystem verteilt. Die Welt war in Ordnung.

Zweieinhalb Jahre und 3 000 Klassen später war jede Web-App intern in zehn bis fünfzig Maven-Projekte unterteilt. Saubere Abhängigkeiten, klare Schnittstellen. Nur: Deployt wurden alle Web-Apps immer gemeinsam durch eine Pipeline. Die Pipeline-Laufzeit und v. a. die Zeit bis zum relevanten Integrationstestergebnis lag im Durchschnitt bei ca. 40 Minuten. Auf dieses Feedback zu warten, ist eine gefühlte Ewigkeit. Das Milk-Maven-Plug-in [1] schaffte uns etwas Luft: Der Maven Reactor wird durch das Plug-in so modifiziert, dass nur die tatsächlich geänderten Maven-Projekte sowie deren Upstream-Dependencies gebaut und getestet werden. Die durchschnittliche Laufzeit sank auf ca. sieben Minuten.

Die Entscheidung, weiterhin mit einem Sourcecode-Root in der Versionsverwaltung und einer Deployment Pipeline zu arbeiten, wurde bewusst getroffen: Zu groß erschienen uns immer noch die Vorteile z. B. bei übergreifenden Refactorings.

Nach einem weiteren Jahr und 2 000 weiteren Klassen war klar: Die Featureumsetzungsgeschwindigkeit nimmt kontinuierlich ab. Ein einfacher Test-driven-Development-Zyklus dauert 20 Sekunden – viel zu viel, wenn TDD die Standardentwicklungsmethode ist. Hinzu kommt, dass die Web-App lokal neu gestartet werden muss, um eine Erweiterung integrativ zu testen. Dabei sind zwei bis drei Minuten Wartezeit leider normal. Auch die P...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang