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:
Leistungsdaten in Echtzeit: Microservice-Umgebungen brauchen Monitoring
Containerisierung: Wie Microservices gegen Provider-Lock-in helfen
Microservices-Architekturen: Vor- und Nachteile für Unternehmen
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:
Benutzerinnen und Benutzer von Anwendungssystemen möchten heutzutage die Software ihrer Wahl von jedem Ort aus, mit verschiedenen Gerätetypen und unabhängig von der verwendeten Systemumgebung einsetzen. Viele Aufgaben werden nicht mehr ausschließlich auf stationären PCs, sondern vermehrt auf mobilen Geräten erledigt. Die Vorstellung, dass eine Anwendung an ein spezifisches Betriebssystem gebunden ist oder die App nur für ein bestimmtes System verfügbar ist, erscheint kaum noch nachvollziehbar. Es gilt daher, diese Anforderungen durch moderne und dynamische Anwendungssysteme zu erfüllen. Ein Ansatz hierfür besteht in der Implementierung geräte- und plattformübergreifender Software auf der Clientseite sowie einer flexiblen Gesamtsystemarchitektur, welche die Funktionalität als lose miteinander verbundene Services auf der Serverseite bereitstellt.
Zu den technologischen Treibern für Microservices zählen Cloud-Plattformen. Die dort gebotene Skalierbarkeit erfordert ein hohes Maß an Flexibilität, was beispielsweise unterschiedliche Lasten der Softwaresysteme anbelangt. Die Integration von Künstlicher Intelligenz in Anwendungssysteme ermöglicht fortschrittliche Analysen, Prozessautomatisierung und personalisierte Benutzererlebnisse. Anwendungssysteme werden vermehrt mit IoT-Geräten integriert, um Daten aus der physischen Welt zu erfassen und zu verarbeiten, insbesondere in Bereichen wie Smart Home und Industrie 4.0. Die Verwendung von Containern und Orchestrierungstools wie Kubernetes, erleichtert die Bereitstellung, Skalierung und Verwaltung von Anwendungen. Aus Sicht der Softwarearchitektur führt die Aufteilung von Anwendungen in kleine, unabhängige Microservices zu einer verbesserten Skalierbarkeit, Wartbarkeit und unterstützt agile Prozesse während der Softwareentwicklung und -pflege.
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.
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:
Präsentationsschicht (Presentation Tier): Diese Schicht ist für die Benutzeroberfläche der Anwendung verantwortlich. Hier erfolgt die Darstellung von Daten für die User sowie die Entgegennahme von Benutzereingaben. Durch die Trennung des User Interface von der Anwendungslogik ermöglicht diese Schicht unabhängige Änderungen.
Anwendungsschicht (Application Tier): In dieser Schicht befindet sich die Anwendungslogik, die Daten verarbeitet und Geschäftsregeln ausführt. Die Anwendungslogik kann mit verschiedenen Benutzeroberflächen wiederverwendet werden, was wiederum Flexibilität und Effizienz fördert.
Datenbankschicht (Data Tier): Diese Schicht ist für die Speicherung, Abfrage und Verwaltung von Daten verantwortlich.
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.
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.
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)