Microservices

Tipps für eine solide Softwarearchitektur

01.05.2024
Von 
Dr. Veikko Krypczyk ist begeisterter Entwickler und Fachautor. Als promovierter Wirtschaftsinformatiker ist er besonders an Fragen einer effizienten Nutzung von IT für Unternehmensprozesse interessiert.

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:

  • Leichtgewichtig: Microservices sollten funktional begrenzt und damit leichtgewichtig sein. Die Inbetriebnahme von einzelnen Diensten erfolgt in der Regel unabhängig. Das ermöglicht ein einfaches Deployment (Bereitstellung). Änderungen lassen sich schnell einarbeiten.

  • Skalierbar: Eine Microservice-basierte Architektur ermöglicht eine schnelle und effiziente Anpassung an wechselnde Lasten. Das Gesamtsystem kann über Austausch, Anpassung und Erweiterung der Services einfach skaliert werden.

  • Unabhängigkeit: Die Dienste sind voneinander komplett unabhängig. Aus diesem Grund sind Microservices für ausfallssichere Systeme gut geeignet. Fehler in einem Microservice haben keine Auswirkung auf andere Dienste. Ausfälle einzelner Dienste lassen sich ohne Beeinträchtigung des Gesamtsystems beheben.

  • Kombinierbar: Microservices können beliebig miteinander beliebig kombiniert werden. So lassen sich auch neue Funktionen gestalten.

  • Innovationsfördernd: Jeder Microservice stellt für sich eine kleine Applikation dar. Die Technologieauswahl für einzelne Dienste ist nicht eingeschränkt, das heißt Experimente mit neuen Technologien können einfach umgesetzt und die am besten zu dem jeweiligen Service passende Technologie ausgewählt werden.

  • Wiederverwendbar: Eine Microservice-Architektur fördert die Wiederverwendbarkeit von Komponenten, beispielsweise auch die mehrfache Nutzung einer komplexen Geschäftslogik.

  • Agil: Microservices unterstützen den agilen Ansatz, in dem Sinne, dass die Arbeit an einzelnen Diensten in kleineren Teams unabhängig voneinander erfolgen kann.

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.
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.

  • Die Client-Side betrifft die Entwicklung von nativen Apps beziehungsweise die Einbindung bestehender Applikationen in die Gesamtarchitektur. Desktop-, Mobile- und Web-Apps können genutzt werden. An dieser Stelle hat sich eine Entwicklung mit Cross Plattform-Technologien, beispielsweise mit RAD Studio für die Betriebssysteme Windows, macOS, Linux (Desktop) und Android bzw. iOS (Mobile), bewährt. Mit entsprechenden Frameworks, wie beispielsweise TMS WEB Core, lassen sich auch Web-Applikationen aus der gleichen Codebasis erstellen. Die ausgewählte Technologie sollte den Entwicklungszyklus beschleunigen und auf die datengetriebene Entwicklung von Geschäftsanwendungen fokussiert werden.

  • Die Server-Side agiert als Backend oder Middleware und bietet die folgenden Funktionen. Über einen flexibel nutzbaren REST-Endpunkt werden die Dienste als universelle API bereitgestellt und können somit von allen Arten von Clients genutzt werden. Eine integrierte Zugriffskontrolle ermöglicht die Festlegung von Berechtigungen für die API-Nutzung durch Benutzerauthentifizierung und -autorisierung. Durch die integrierte API-Analyse erhält man einen Überblick über die Nutzung der Dienste. Auf der Server-Seite gibt es verschiedene Möglichkeiten, darunter die Anbindung von Unternehmensdatenbanken, die Verwaltung von IoT-Hardware und die Integration von Cloud-Diensten. Ebenso werden eine Reihe von Anwendungsdiensten bereitgestellt einschließlich Benutzerverzeichnis- und Authentifizierungsdiensten und Push-Benachrichtigungen.

Zusammenwirken der Komponenten des Anwendungssystems.
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.

  • Rapid Application Development (RAD) ist eine Methode der Softwareentwicklung, die sich darauf konzentriert, Anwendungen schnell zu erstellen und iterativ zu verbessern. Der Fokus liegt dabei auf der raschen Entwicklung von Prototypen und Modellen, um früh im Entwicklungszyklus Feedback zu erhalten. RAD-Methoden betonen die Zusammenarbeit zwischen Entwicklern und Nutzern, um die Anforderungen genau zu verstehen und effektive Lösungen für deren Anforderungen zu liefern. Typischerweise werden visuelle Entwicklungswerkzeuge und reichhaltige Benutzeroberflächen verwendet, um den Prozess zu beschleunigen.

  • Die Low-Code-Entwicklung stellt eine Methode dar, bei der visuelle Entwicklungswerkzeuge und abstrakte Benutzeroberflächen verwendet werden, um den Programmieraufwand zu reduzieren. Der Begriff "Low-Code" bezieht sich darauf, dass weniger handgeschriebener Code benötigt wird, um Anwendungen zu erstellen. Dies ermöglicht es Menschen mit geringeren Programmierkenntnissen, dennoch komplexe Anwendungen zu entwickeln. Low-Code-Plattformen bieten oft vorgefertigte Bausteine, Drag-and-Drop-Funktionen und visuelle Designer, um die Erstellung von Anwendungen zu beschleunigen. Dieser Ansatz fördert zudem die Zusammenarbeit zwischen Mitarbeitenden aus den Fachabteilungen und IT-Entwicklern, um Anwendungen schneller und effizienter zu erstellen.

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)