Agile Software-Entwicklung mithilfe von Microservices-Architekturen
14.01.2020
Sieht man sich klassische Anwendungen an, fällt eines auf: Hinter diesen Applikationen steckt sehr viel Arbeit, die mehrere, meist große Entwickler-Teams geleistet haben. Damit einhergehend sind ausgiebige Integrationstests, die dafür sorgen, dass ein komplexes Software-System bestmöglich funktioniert. Doch genau darin steckt das Dilemma: Die Software-Projekte erfordern vor allem zeitlich aufeinander abgestimmte Arbeitsabläufe und das Einhalten von Deadlines. Denn sobald ein Team auf ein anderes warten muss, da deren Anwendungsbestandteile noch nicht fertig sind, gerät das Projekt ins Stocken. Im schlimmsten Fall kann der vereinbarte Abgabezeitpunkt nicht eingehalten werden.
Zeitnot und Anwenderwünsche führen zu agilen Entwicklungsmethoden
Da immer mehr Unternehmen, also auch die größeren wie beispielsweise Daimler und BMW, für immer mehr Individualität eigene Anwendungen entwickeln, spielt der Faktor Zeit eine ganz wesentliche Rolle. Denn aufgrund ständig zunehmender Wünsche seitens der Anwender, eine Applikation mit immer neuen oder besseren Funktionen auszustatten, befinden sich Entwicklerteams ständig unter Zugzwang, die Applikationen besser und besser zu machen. Und das in möglichst immer kürzeren Zeitabständen. Genau unter diesen Bedingungen sind die agilen Software-Entwicklungsmethoden entstanden.
Dazu gehört, neben den Ansätzen wie Continuous Delivery, Anwendungsarchitekturen, die auf sogenannten Microservices fußen. Die Idee dahinter ist recht simpel: Anstatt aus einer Anwendung einen riesigen Monolithen werden zu lassen, der sich nur mit enormen Aufwand beherrschen lässt, geht man dazu über, Applikationen in kleine, gut beherrschbare Portionen zu unterteilen, die am Ende ein großes Ganzes ergeben, nämlich die gewünschte Applikation. Diese Herangehensweise bietet zahlreiche Vorteile:
- Entwickler sind innerhalb ihres Teams unabhängig von der Arbeit der anderen Entwicklergruppen, die an einem anderen Teil der Applikation arbeiten. Damit bestimmt jeder sein Tempo selbst.
- Mit neuen oder verbesserungswürdigen Funktionen oder Programmteilen können sich die einzelnen Microservice-Teams länger als bisher beschäftigen. Nämlich solange, bis sie zum gewünschten Ergebnis gelangen. Damit erreichen die einzelnen Teams einen recht hohen Grad an Fachlichkeit, die zu einem Produkt führt, das eine sehr gut funktionierende Einheit darstellt.
- Für eine größere Unabhängigkeit der einzelnen Microservices besteht die Möglichkeit, aus einer Gruppe fachlich zusammenhängender Microservices sogenannte Self-Contained Systems zu bauen. Damit funktioniert ein Teil der geplanten Anwendungen unabhängig von den übrigen Microservices oder Funktionen.
Schnittstellen-Techniken wie REST und GRPC sorgen für die richtige Kommunikation
Eine große Herausforderung dieser agilen Herangehensweise ist die Kommunikation der einzelnen Microservices untereinander. Denn im besten Fall wissen diese gar nichts voneinander. Für den Fall dass eine Kommunikation erforderlich ist nutzen Microservice-basierte Anwendungen bestimmten Techniken, die vorher genau bestimmt und definiert wurden. Hierfür wird am Anfang eines Projekts eine Makroarchitektur festgelegt, in der die zugrunde liegenden Techniken spezifiziert werden. Daraus resultiert die Verwendung geeigneter Schnittstellen wie REST, JSON, GRPC oder OpenAPI. So wird sichergestellt, dass die Microservices problemlos miteinander reden können.
Microservices ermöglichen Anwendungen, die zu Unternehmen passen
Eric Evans hat 2003 in seinem Buch "Domain-driven Design" darüber nachgedacht, wie sich die Fachlichkeiten eines Unternehmens mithilfe einer methodischen Vorgehensweise modellieren und in Software abbilden lassen. Wichtig dabei ist eine gemeinsame Sprache, mit der Fachabteilungen und Entwickler-Teams kommunizieren, damit am Ende überhaupt die gewünschte Anwendung herauskommen kann. Oder um es mit dem Wissenschaftler Melvin E. Conway zu sagen: "Die Struktur einer Anwendung sollte der des Unternehmens entsprechen, das sie einsetzt." Damit stellt eine gute Software immer das Abbild einer Firma dar - in ihren inneren und äußeren Strukturen. Und das gelingt sehr gut mithilfe einer Microservice-Architektur.