Typische Software-Anwendungen zeigen vor allem eines: Dahinter steckt sehr, sehr viel Arbeit, und das auf viele Entwickler verteilt. In diesem Kontext finden ausgiebige Integrationstests statt, die dafür sorgen sollen, dass ein aufwändig programmiertes Software-System bestmöglich funktioniert. Aber darin steckt das Dilemma: Diese Projekte erfordern zeitlich aufeinander abgestimmte Arbeitsabläufe und das Einhalten von Deadlines. Denn wartet ein Team auf ein anderes, gerät das Projekt ins Stocken. Worst Case: Der vereinbarte Abgabezeitpunkt kann nicht eingehalten werden.
Zeitnot und Anwenderwünsche führen zu agilen Entwicklungsmethoden
Immer mehr Unternehmen entwickeln für mehr Individualität eigene Anwendungen. Hierbei spielt der Faktor Zeit eine wesentliche Rolle. Denn wegen ständig neuer Wünsche seitens der Anwender, eine Software mit immer besseren Funktionen auszustatten, befinden sich Entwicklerteams unter Zugzwang, die Applikationen fortlaufend zu verbessern. Und das immer schneller. Genau unter diesen Bedingungen sind die agilen Software-Entwicklungsmethoden entstanden.
[irp posts=“33865″ ]
Dazu gehört, neben den Ansätzen wie Continuous Delivery, spezielle Anwendungsarchitekturen, die auf Microservices basieren. Die Idee dahinter: Anstatt aus einer Anwendung einen großen Monolithen werden zu lassen, der sich nur mit enormen Aufwand beherrschen lässt, unterteilt man Applikationen in kleine, gut beherrschbare Portionen. Diese ergeben dann am Ende ein großes Ganzes, sprich 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 zu verbessernden 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 individuellen Teams einen hohen Grad an Fachlichkeit, die zu einem Produkt führt, das eine 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 Systeme 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. Denn im besten Fall wissen diese gar nichts voneinander. Für den Fall, dass eine Kommunikation erforderlich ist, nutzen Microservice-basierte Anwendungen vorher genau bestimmte und definierte Techniken. Hierfür wird am Anfang eines Projekts eine Makroarchitektur festgelegt, in der die zugrunde liegenden Ansätze spezifiziert werden. Daraus resultiert der Einsatz von Schnittstellen wie REST, JSON, GRPC oder OpenAPI. So wird sichergestellt, dass die Microservices miteinander reden können.
[irp posts=“168661″ ]
Microservices ermöglichen Anwendungen, die zu Unternehmen passen
Eric Evans hat 2003 in seinem Buch „Domain-driven Design“ aufgeschrieben, 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 mithilfe einer Microservices-Architektur.
Disclaimer: Diesen Beitrag habe ich originär für die x-cellent Technologies GmbH aus München für deren Blog verfasst.