Wenn es um moderne Software-Architektur geht, liegen Microservices bei den Entwicklern noch immer hoch im Kurs, das zeigen aktuelle Trendanalysen (Link zu einer externen Seite). Denn die Vorteile sind verlockend.
Die Vorteile
Microservices ermöglichen die Modularisierung von Anwendungen. Hochkomplexe Software wird in kleine, gut handhabbare Dienste zerlegt. Die Gesamtfunktion bleibt erhalten, kann aber jederzeit schnell und nahtlos durch neue Funktionen erweitert werden. So wächst eine Anwendung über kleine wöchentliche oder sogar tägliche Updates einfach weiter. In monolithischen Architekturen dagegen ist jede Software-Aktualisierung ein Großereignis. Wichtige Innovationen lassen sich so erst umsetzen, wenn die Konkurrenz es wahrscheinlich schon längst getan hat.
Die am häufigsten genannten Vorteile von Microservices:
- Durch kürzere Release-Zyklen und einfache Ersetzbarkeit lässt sich mit ihnen schneller auf Marktveränderungen reagieren.
- Ihre starke Modularisierung erlaubt eine bessere Skalierbarkeit von Anwendungen. Damit wird auch das Deployment in der Cloud erleichtert.
- Microservices unterstützen den Aufbau einer Continuous-Delivery-Pipeline
- Ihr Code muss nicht in das bestehende System integriert werden. Erweiterungen werden dadurch stark vereinfacht.
Tatsächlich lohnt sich der Einsatz von Microservices vor allem, wenn
- Systeme unterschiedlicher Technologien integriert werden sollen,
- Teile eines Systems (temporär) hoher Last ausgesetzt sind und schnell dynamisch skalieren müssen,
- eine Anwendung Cloud-ready sein soll,
- Teile der Anwendung einer hohen Änderungsfrequenz unterliegen,
- schnell auf veränderte Marktgegebenheiten reagiert werden muss oder
- ein Legacy-System erweitert werden soll.
Allerdings bringt der flexible Architekturstil auch einige Punkte mit sich, die beachtet werden sollten. Entwicklungsseitig kann es schwierig sein, gleich zu Anfang einen sinnvollen Schnitt für die Anwendung zu finden. Schließlich entwickeln sich die Anforderungen und das fachliche Know-how erst im Laufe des Entwicklungsprozesses. Außerdem muss die Datenhaltung der verschiedenen aufeinander zugreifenden Microservices vollständig disjunkt sein, damit eine bedingungslose Deploybarkeit gewährleistet ist. Darüber hinaus wird die Infrastruktur komplexer, denn jeder Microservice benötigt eine eigene Umgebung. Und schließlich ist es wahrscheinlich, dass für die Entwicklung neue Technologien erlernt und beherrscht werden müssen.
Neben den technischen Implementierungshürden gibt es eine Reihe organisatorischer Überlegungen, die beim Betrieb von Microservices zu beachten sind. Dennoch holt man sich mit ihnen nicht unweigerlich mehr Komplexität ins Haus. Schließlich müssen viele der genannten Punkte auch bei monolithischen Systemen beachtet werden. Und auch wenn diese bei Microservices durchaus vielfältiger sind: Wenn man weiß, worauf man sich einlässt, ist ihr Einsatz beherrschbar – und kann sich sehr lohnen."
FAZIT VON CHRISTOPH WELLNER, SENIOR SOFTWARE ENGINEER
Herausforderungen im Betrieb – und wie Sie sie meistern können
Der Betrieb von Microservices wiederum stellt ganz eigene Anforderungen. Die wichtigsten Themen: Wartung, Wiederverwendung, Release-Zyklen, Sicherheit und Ressourcenmanagement.
Wartung
Jeder Microservice wird von einem einzigen Team entwickelt. Dieses Team ist vollkommen verantwortlich – für den Service, für die Umsetzung vom UI bis zum Backend, für die Entwicklung bis zum Deployment in die Produktion und auch für die Wartung.
Herausforderung:
Fehler in Microservices fallen meist erst nach Inbetriebnahme auf. Die Teammitglieder sind dann schon in anderen Projekten eingesetzt oder haben sogar die Abteilung oder das Unternehmen verlassen. Deshalb kann das Team unter Umständen nicht sofort auf das Problem reagieren. Besonders schwierig wird es dann, wenn bei der Entwicklung eine seltene Technologie eingesetzt wurde und das Wissen darüber mit den alten Kollegen verschwunden ist.
Tipp:
Um dies zu vermeiden, sollten möglichst wenige unterschiedliche Technologien eingesetzt werden. Diese sollten außerdem von mehreren Mitarbeitern beherrscht werden.
Herausforderung:
Auch die Problemanalyse kann durch die modulare Microservice-Architektur erschwert werden. Ein Fehler in einem Microservice muss schließlich nicht zwangsläufig in diesem selbst seinen Ursprung haben. Er kann ein Folgefehler aus einem anderen Microservice sein.
Tipp:
Um die Fehlerquelle zu ermitteln, ist ein zentrales Logging und Monitoring unabdingbar. Andernfalls müssen mehrere Teams koordiniert und Informationen mühsam gesammelt werden. Ein zentrales Logging ist zum Beispiel mit ELK-Stack (Link zu einer externen Seite) realisierbar. Damit können Log-Nachrichten aus allen Microservices zentral durchsucht und analysiert werden.