Bei der Umsetzung eines Softwareprojekts kommen mehrere Vorgehensweisen infrage. Zum einen ist es möglich, eine monolithische Architektur zu wählen, die alle Funktionen in sich vereint. Alternativ dazu werden auch Microservices immer beliebter. In diesem Konzept wird die Anwendung in einzelne Komponenten unterteilt, die unabhängig voneinander funktionieren. Obwohl diese Herangehensweise in vielen Fällen große Vorteile mit sich bringt, ist ihre Umsetzung nicht immer sinnvoll. Dennoch entscheiden sich Entwickler bei zahlreichen Projekten von Anfang an für die falsche Architektur, was viele Probleme und hohe Kosten zur Folge hat.

 

Monolithische Anwendungen: Die „klassische“  Architektur

Monolithische Anwendungen bestehen aus einer einzigen Einheit, in die alle Funktionalitäten eingebunden sind. Das bringt folgende Vorteile mit sich:

  • Einfachere Behandlung von Querschnittsthemen: Die meisten Anwendungen müssen eine Vielzahl von übergeordneten Bestimmungen erfüllen – etwa im Hinblick auf Datenprotokolle oder Sicherheitsfunktionen. Wenn alles über eine einzige Anwendung läuft, ist es einfacher, die jeweiligen Programmteile an die übergeordneten Richtlinien anzupassen.
  • Weniger operativer Aufwand: Wenn nur eine einzige Anwendung vorhanden ist, muss auch nur eine Anwendung getestet, kontrolliert und gewartet werden. Zudem ist das Deployment weniger komplex.
  • Bessere Performance: Häufig ist die Performance der Programme besser, da ein Shared-memory Access schneller als Interprozesskommunikation (IPC) abläuft.

 

Diesen Vorteilen stehen jedoch auch Nachteile gegenüber:

  • Enge Verflechtung: Die einzelnen Programmteile sind fest miteinander verbunden. Je weiter die Entwicklung der Anwendung voranschreitet, desto schwieriger wird es daher, einzelne Teile zu isolieren, um sie einzeln zu skalieren oder den Code zu warten.
  • Hohe Komplexität: Monolithische Programme sind häufig schwer zu verstehen, da bei vielen Funktionen Abhängigkeiten und Nebeneffekte vorhanden sind.

 

Microservices: Kleine, unabhängige Dienste

Bei der Verwendung von Microservices kommen im Gegensatz zum Monolithen viele unabhängige Bausteine zum Einsatz. Auch diese Architektur bietet einige Vorteile:

  • Bessere Organisation: Die Aufgabe jeder Komponente ist klar von den Aufgaben anderer Module abgegrenzt. Das vermeidet Überschneidungen und verbessert die Organisation.
  • Entkopplung: Unabhängige Einheiten lassen sich einfacher neu konfigurieren, um unterschiedliche Anforderungen zu erfüllen. Außerdem lassen sich einzelne Funktionen, die dringend benötigt werden, besonders schnell umsetzen.
  • Gute Performance: Je nachdem, wie gut die Microservices organisiert sind, erlauben sie ebenfalls eine gute Performance. So ist es beispielsweise möglich, einzelne Komponenten isoliert zu skalieren.
  • Weniger Fehler: Zwischen den einzelnen Microservices bestehen Grenzen. Dadurch beschränken sich auch Fehler auf einzelne Komponenten.

 

Allerdings sind auch im Hinblick auf Microservices einige Nachteile festzuhalten:

  • Behandlung von Querschnittsthemen: Auch in auf Microservices basierenden Anwendungen existieren übergreifende Anforderungen. Um diesen gerecht zu werden, müssen entweder erhöhte Aufwände in Kauf genommen (bspw. beim Testen) oder Querschnittskomponenten erstellt werden.
  • Höherer operativer Aufwand: Microservices werden meist unabhängig voneinander deployt. Dies erhöht den Abstimmungsaufwand.

 

Wann ist die Verwendung monolithischer Programme empfehlenswert?

Die vorherigen Kapitel haben gezeigt, dass beide Möglichkeiten Vor- und Nachteile mit sich bringen. Daher ist es bei jedem Projekt wichtig, sich genau zu überlegen, welche der genannten Punkte von besonderer Bedeutung sind.

 

In folgenden Szenarien kann eine monolithische Architektur von Vorteil sein:

  1. Wenn das Team sehr klein ist oder sich im Aufbau befindet, ist ein Monolith häufig sinnvoller. Auf diese Weise wird das Team nicht mit den oftmals umfangreicheren Anforderungen einer Microservices-Architektur belastet.
  2. Wenn Sie ein Produkt erzeugen, das seine Markttauglichkeit noch nicht unter Beweis gestellt hat, empfiehlt sich ebenfalls die Erstellung einer monolithischen Anwendung. Dadurch sind Sie in der Lage, im Rahmen der Weiterentwicklung in kurzen Abständen neue Versionen herauszugeben.
  3. Wenn Ihr Entwicklerteam noch keine Erfahrungen mit Microservices hat, ist es sinnvoll, zunächst auf eine monolithische Architektur zu setzen. Das reduziert die Risiken erheblich.

 

Sinnvolle Szenarien für Microservices

In den folgenden Szenarien bietet sich der Aufbau von Microservices an:

  1. Wenn Sie einzelne Programmbestandteile besonders schnell benötigen, empfehlen sich Microservices. So können Sie einen bestimmten Dienst zeitnah nutzen, während andere Funktionen erst später hinzukommen.
  2. Wenn für eine bestimmte Funktion eine besonders hohe Effizienz notwendig ist, stellen Microservices ebenfalls eine sinnvolle Lösung dar. Wenn Sie beispielsweise in einem Bereich mit großen Datenmengen arbeiten, empfiehlt es sich, hierbei eine besonders effiziente Programmiersprache zu verwenden, die sich jedoch für andere Bereiche weniger eignet. Microservices machen es möglich, jeden einzelnen Dienst perfekt an die jeweiligen Anforderungen anzupassen.
  3. Wenn Sie planen, Ihr Team zu erweitern, sind Microservices sinnvoll. Klar abgegrenzte Aufgaben machen es einfacher, weitere Mitarbeiter zu integrieren.

 

Fazit: Genaue Analyse der Ausgangssituation ist wichtig

Microservices werden zwar häufig als die moderne Form der Softwareentwicklung angepriesen und werden immer beliebter. Das bedeutet jedoch nicht, dass sie in jeder Situation die beste Lösung darstellen. Daher ist es bei jedem Projekt notwendig, die Anforderungen genau zu überprüfen und zu analysieren. Eine fundierte und vorurteilsfreie Entscheidungsfindung ist somit von entscheidender Bedeutung.