Microservices

Tipps für eine solide Softwarearchitektur

01.05.2024 von Dr. Veikko Krypczyk
Moderne Anwendungsarchitekturen bauen auf Microservices auf. Lesen Sie, welche Rolle die verschiedenen Schichten dabei spielen und worauf Sie bei der Entwicklung achten sollten.
Für ein harmonisches Zusammenspiel der verschiedenen Anwendungsschichten und Mikroservices braucht es eine solide Softwarearchitektur.
Foto: nuchao - shutterstock.com

Microservice-Architekturen sind eine moderne und effektive Methode, Softwareanwendungen zu entwickeln und bereitzustellen. Im Gegensatz zu monolithischen Architekturen, bei denen die gesamte Anwendung als eine einzige, umfassende Einheit betrachtet wird, zerlegt die Microservice-Architektur eine Anwendung in kleine, eigenständige Dienste - sogenannte Microservices. Jeder Microservice steht für eine spezifische Geschäftsfunktion und lässt sich unabhängig entwickeln, bereitstellen und skalieren. Über eine Zwischenschicht, die Middleware, können die Microservices gekoppelt und an die bestehende Unternehmens-IT angebunden werden.

Die Vorteile einer Microservice-Architektur: Entwicklungsteams können sich auf die Entwicklung ihrer jeweiligen spezifischen Dienste konzentrieren. Diese Autonomie unterstützt zudem eine technologische Vielfalt, da für unterschiedliche Services verschiedene Technologien und Programmiersprachen verwendet werden können.

Warum braucht es überhaupt eine Softwarearchitektur?

Eine Softwarearchitektur gewährleistet eine klare Abgrenzung zwischen den verschiedenen Anwendungsebenen. Moderne Softwareapplikationen müssen eine ganze Reihe an Anforderungen erfüllen. Dabei geht es beispielsweise um Benutzerfreundlichkeit, den Einsatz von Cloud-Technologien, diverse Fähigkeiten zur Vernetzung und Integration sowie hohe Sicherheitsanforderungen. Eine gut funktionierende Softwarearchitektur trägt außerdem dazu bei, die Leistung der Anwendung zu optimieren, einschließlich schneller Antwortzeiten und einer auf Effizienz getrimmten Ressourcennutzung. Das sorgt für eine gute Benutzererfahrung.

Wenn Sie mehr über Microservice-Architekturen erfahren wollen, lesen Sie:

Darüber hinaus übernimmt die Softwarearchitektur wichtige Aufgaben aus den Bereichen Datenverschlüsselung, Authentifizierung sowie Autorisierung der User und schützt damit die Daten und Systeme vor einem unautorisierten Zugriff. Es ist daher wichtig, dass die Architektur selbst robust angelegt ist und eine hohe Verfügbarkeit des Systems unterstützt. Eine leicht wartbare Architektur erleichtert es zudem durch Funktionen für Protokollierung, Überwachung und Diagnosen, Fehler zu identifizieren und zu beheben. Zu guter Letzt sollten sich moderne Softwarearchitekturen nahtlos mit anderen Systemen und Plattformen integrieren lassen, um eine möglichst reibungslose Daten- und Informationsübertragung zu ermöglichen.

Welche Vorteile bieten Microservices?

Heutzutage bilden Microservices die Basis für eine Softwarearchitektur. Anstelle einer monolithischen und schwerfälligen Software wird die gesamte Funktionalität auf gut überschaubare Teilsysteme aufgeteilt. Diese Services sind in der Regel über das Internet und RESTful-APIs für die nutzenden Client-Systeme zugänglich. Zwei Gründe sind dafür maßgeblich:

Wie hängen Microservices und Schichtenarchitekturen zusammen?

Moderne Anwendungssysteme basieren auf Schichtenarchitekturen (n-Tier) und Mikroservices. Die n-Tier-Architektur stellt einen gestalterischen Ansatz für die Strukturierung von Softwareanwendungen dar, bei dem die verschiedenen Komponenten in Schichten, den sogenannten Tiers, organisiert sind. Jede Schicht erfüllt eine spezifische Aufgabe und arbeitet autonom von den anderen Schichten.

Varianten der Aufteilung der Schichten einer Anwendungsstruktur auf Client und Server.
Foto: Veikko Krypczyk

Meist umfasst eine n-Tier-Architektur die Präsentations-, Anwendungs- und Datenbankschicht. Es gibt unterschiedliche Varianten, wie diese Schichten auf Client- und Serversysteme aufgeteilt werden können. Mögliche Varianten sind die verteilte Präsentation, die entfernte Präsentation, die verteilte Datenhaltung, die entfernte Datenhaltung und die verteilte Datenhaltung.

Die Aufgaben der einzelnen Schichten lassen sich wie folgt beschreiben:

Wie entwickelt man für eine Microservice-Architektur?

Es braucht einen nahtlosen Entwicklungszyklus vom Client bis zum RESTful Service auf Serverseite, um den gesamten Entwicklungsprozess wirklich effizient gestalten zu können. Die geräte- und plattformübergreifende Programmierung kann ein Lösungsansatz sein, um Software für unterschiedliche Gerätetypen (Desktop, Mobile, Web) und Betriebssysteme (Windows, macOS, Linux, iOS, Android) aus einer gemeinsamen Quellcodebasis heraus zu erstellen. Hier gibt es inzwischen erfreulich viele Ansätze für die unterschiedlichsten Anforderungen, Vorgehensweisen und Programmiersprachen. Auf Server-Seite sollte idealerweise eine vermittelnde Zwischenschicht (Middleware) zum Einsatz kommen.

Folgende Eigenschaften sollten Microservices im besten Fall mitbringen:

Was braucht man für die Entwicklung von Microservices?

Ein Softwaresystem auf der Basis einer Microservice-Architektur umzusetzen, stellt eine größere Herausforderung dar. Die REST-basierten Endpunkte müssen die Geschäftslogik widerspiegeln. Gefragt ist dafür ein umfassendes Knowhow in den Basistechnologien, wie REST, JSON, Authentication und Cloud-Services. Außerdem braucht es die richtigen Tools um zu gewährleisten, dass das Schnittstellendesign der Microservices und die Implementierung der Fachlogik effizient erfolgen. Grundsätzlich lassen sich Entwicklungsaufgaben für Frontend und Backend voneinander entkoppeln.

Microservices erlauben eine getrennte Entwicklung von Front- und Backend.
Foto: Veikko Krypczyk

Ist die Schnittstelle - meist in Form einer REST-basierten API - definiert, dann kann die Entwicklung der Client-Applikationen und die Implementierung der serverseitigen Backendlogik parallel und voneinander unabhängig erfolgen. Microservices lassen sich für neue Softwaresysteme oder im Rahmen von Migrationsprojekten verwenden. Bei Letzteren existiert die Businesslogik bereits teilweise oder ganz in einem Legacy-System. Sie sollte aus solchen monolithischen Softwaresystemen allerdings zu universell über REST adressierbaren Microservices transformiert werden.

Bei einem Microservice-basierten Architekturansatz wirken mehrere Komponenten zusammen. In der Praxis müssen dafür konkrete Technologien ausgewählt werden, welche eine effiziente Umsetzung ermöglichen. Beispielhaft wird hier die Kombination aus einem Tooling für Front- und Backend-Technologie skizziert.

Zusammenwirken der Komponenten des Anwendungssystems.
Foto: Veikko Krypczyk

Eine hohe Produktivität im gesamten Entwicklungszyklus wird erreicht, wenn ein zentrales Entwicklungswerkzeug verwendet wird. Auf der Grundlage einer komponentenbasierten Entwicklung lassen sich Anwendungen für verschiedene Plattformen erstellen und Technologiebrüche vermeiden.

Welche Rolle spielen Rapid Application Development (RAD) und Low-Code-Entwicklung?

Es gibt unterschiedliche Ansätze, die darauf abzielen, Softwareentwicklungsprozesse zu beschleunigen und die Beteiligung von Nicht-Entwicklern an der Erstellung von Anwendungen zu erleichtern.

Beide Ansätze, RAD und Low Code, zielen darauf ab, die Time-to-Market für Anwendungen zu verkürzen, die Flexibilität in der Entwicklung zu erhöhen und die Zusammenarbeit zwischen technischen und nicht-technischen Teammitgliedern zu verbessern. Sie sind besonders nützlich in Umgebungen, in denen schnelle Anpassungen an sich ändernde Anforderungen erforderlich sind und eine hohe Interaktion mit den Usern wichtig ist.

Fazit

Microservice-Architekturen ermöglichen es, auch komplexe Anwendungssysteme aus einzelnen, voneinander unabhängigen Anwendungsmodulen aufzubauen. Einen großen Vorteil bildet die so erreichte Flexibilität auf Clientseite. Hier ist man in der Wahl der Technologie (Desktop, Mobile, Web) nicht eingeschränkt und kann diese komplett auf die Belange der Zielgruppe ausrichten. Serverseitig kann über Middleware ein umfassendes Spektrum an Funktionen und weiteren Services als REST-fähige Web-Endpunkte zur Verfügung gestellt werden. (ba)