Das Versprechen von Skalierbarkeit, Performance und Sicherheit Wo Microservices ihre Stärken ausspielen können

Autor / Redakteur: Klaas Freitag * / Stephan Augsten

Microservices gewährleisten schnelle Anwendungsentwicklung sowie hohe Skalierbarkeit, Flexibilität und Sicherheit. Sie eignen sich vor allem für komplexe Applikationen, bei denen steigende Datenmengen schnell, effizient, sicher und einfach zugänglich sein müssen.

Firmen zum Thema

Microservices-Architekturen bergen viele Vorteile im Hinblick auf Stabilität, Skalierbarkeit und Flexibilität.
Microservices-Architekturen bergen viele Vorteile im Hinblick auf Stabilität, Skalierbarkeit und Flexibilität.
(© greenbutterfly - stock.adobe.com)

Microservices liegen im Trend. Aktuell werden sie vor allem in schnell iterierenden, großen Softwareprojekten genutzt. Bekannte Anwendungsfälle sind Netflix oder Amazon und im Open-Source-Umfeld die Plattform GitLab.

Mit Microservices können Nutzerinnen und Nutzer große Aufgabenstellungen in kleinere Projekte aufgliedern und auf mehrere Teams verteilen. Dadurch ist auch eine komplexe Open-Source-Anwendungssoftware schnell, einfach und vor allem überschaubar realisierbar.

Microservices charakterisiert vor allem die hohe Modularität, die Vorteile in den Bereichen Deployment, Skalierbarkeit, Performance und Flexibilität bietet. Entwicklerinnen und Entwickler können Services einzeln konzipieren und unabhängig voneinander in Produktion bringen.

Richtig gemacht, lässt sich jeder Service allein ausführen und damit auch skalieren; dies ermöglicht eine bestmögliche Optimierung der Performance. Schließlich bringt der modulare Ansatz auch eine hohe Flexibilität mit sich. So können einzelne Dienste als Ganzes leicht ersetzt werden, etwa durch eine neue Variante mit einer höheren Funktionalität.

Hohe Sicherheit durch verteilte Services

Die lose Kopplung von Services erhöht auch die Stabilität und Sicherheit einer gesamten Anwendung signifikant. Dies trifft insbesondere im Vergleich zu einer monolithischen Software-Architektur zu, bei der Erweiterungen, wie die Integration neuer Features, eine Codeänderung oder -ergänzung im Basissystem erfordern. Jede Veränderung führt damit unter Umständen zu Ausfallzeiten.

Bei einer Microservices-Architektur hingegen werden neue Features in Services gesplittet, die von der Core-Plattform lediglich verwaltet werden. Jede Erweiterung, sprich Extension, ist ein in sich abgeschlossener eigener Service, etwa das Backend, die Speichertreiber, eine API oder ein Web-Frontend. Die Extensions können andere Services nur begrenzt störend beeinflussen und auch Änderungen betreffen immer nur einen bestimmten Dienst.

Auch wenn eine Extension mit einem Schadprogramm infiziert sein sollte, bleiben die Auswirkungen limitiert. Schließlich ist jede Erweiterung ein dedizierter Microservice, der alleine läuft oder in einem Binary gebündelt wird. Dadurch ist der Angriffsvektor niedriger, weil ein Schadprogramm immer nur eine Extension befällt und nicht die gesamte Anwendung lahmlegt. Das führt zu einer hohen Stabilität und Sicherheit der gesamten Anwendung, auch wenn ein Schadprogramm einmal Fuß gefasst haben sollte.

Gerade im Unterschied zu monolithischen Softwareprojekten – wie zum Beispiel in der klassischen PHP-Welt – zeigen sich die Sicherheitsvorteile von Microservices. Wird ein Code aus einer Extension in einen laufenden PHP-Prozess hineingeladen, erhält er im Prinzip uneingeschränkte Zugriffsmöglichkeit, das heißt, er hat theoretisch Zugang zu allen Speicherbereichen. Bei einer Microservices-Umgebung hat jeder Service seinen eigenen Speicherbereich und keinen Zugriff auf andere Segmente. Die Kommunikation erfolgt ausschließlich über APIs mit einer bestimmten Berechtigung.

Eine Microservice-basierte Architektur ist überdies für die Fehlerbehebung äußerst komfortabel, da einzelne Services on-the-fly austauschbar sind. So können fehlerbehaftete Dienste schnell heruntergefahren und neue automatisch gestartet werden. Durch den modularen Austausch werden Downtimes vermieden und für den User erfolgt keine sichtbare Unterbrechung.

Flexibilität bei der Programmiersprache

Microservices bieten zudem eine hohe Flexibilität bei der Wahl der Programmiersprache. Open-Source-Communities und Kunden können Extensions in einer beliebigen Sprache schreiben. Open-Source-Anbieter öffnen sich damit weiter zur Community und können Binaries und Produkte flexibel und individuell schnüren. Die Software lässt sich damit gut auf die konkreten Bedürfnisse und Anwendungsfälle der Kunden zuschneiden. Durch die Unabhängigkeit von einer bestimmten Programmiersprache sind nicht zuletzt Integrationen zu anderen Open-Source-Produkten gut realisierbar.

Zunehmend beliebter – gerade im Microservices-Umfeld – wird die kompilierbare Programmiersprache Go. Sie beinhaltet eine Vielzahl von Tools, die Entwicklungsteams bei der Arbeit entscheidend unterstützen, etwa im Cross-Platform-Bereich. Das heißt, Entwicklerinnen und Entwickler schreiben einen Code und kompilieren ihn für verschiedenste Plattformen.

Mit einer einzigen Codebasis ist es somit möglich, Go-Software nahezu überall auszuführen. Außerdem ist Go relativ einfach zu erlernen und anzuwenden. Hauptsächlich auch unter den Aspekten Geschwindigkeit und Performance kann Go punkten, da weder ein Skript-Interpreter noch eine virtuelle Laufzeitumgebung benötigt werden. Ein weiterer Nutzen von Go ist die Unterstützung von Nebenläufigkeit, die die Parallelisierung rechenintensiver Operationen ermöglicht.

Requests werden von lang laufenden Prozessen bedient. In der PHP-Welt kann ein solches Szenario nur schwer umgesetzt werden. Wenn hier ein Request anliegt, wird – vereinfacht ausgedrückt – ein PHP-Prozess aufgebaut und ausgeführt. Sobald der Request beantwortet ist, beendet sich der PHP-Prozess wieder. Ein Request muss bei einer PHP-Architektur also solange offenbleiben, bis eine lang laufende Aktion ausgeführt ist. Allerdings gibt es diesbezüglich Limitierungen durch die PHP-Request-Time-Outs.

Generell kann eine Anwenderin oder ein Anwender mit Microservices und einer API-basierten Architektur Sprachbarrieren überbrücken. So ist es zum Beispiel möglich, Go-Services für performancekritische Komponenten und einen Python- oder PHP-Service für Spezialanwendungen zu nutzen. Zahlreiche Anwendungen und Tools – gerade im Umfeld Cloud-nativer Entwicklungen – sind inzwischen in Go geschrieben. Bekannte Beispiele sind die Container-Lösung Docker oder das Orchestrierungs- und Automatisierungswerkzeug Kubernetes.

Neues Web-Frontend von ownCloud Infinite Scale.
Neues Web-Frontend von ownCloud Infinite Scale.
(Bild: ownCloud)

Auch ownCloud setzt bei der Entwicklung der Lösung ownCloud Infinite Scale auf eine Microservices-Architektur und die Programmiersprache Go. Die von Grund auf neu entwickelte, quelloffene Collaboration-Plattform bietet praktisch unbegrenzte Skalierbarkeit. Die Plattform skaliert beliebig im Hinblick auf Nutzer, Anzahl und Größe der Dateien oder auch parallele Zugriffsanfragen. Mit der neuen Lösung geht ownCloud den Weg von einer monolithischen zu einer Microservices-basierten Plattform.

Klaas Freitag
Klaas Freitag
(Bild: ownCloud)

Prinzipiell bringt die Ablösung einer monolithischen durch eine Microservices-Architektur viele Vorteile im Hinblick auf Stabilität, Skalierbarkeit und Flexibilität – gerade auch hinsichtlich der Deployment-Optionen für die Anwenderinnen und Anwender. Sie können ihre Lösungen in einer Hybrid oder Public Cloud, aber auch in einer Private OpenStack Cloud oder in einem lokal installierten Kubernetes-Cluster nutzen. Und dabei darf nicht vergessen werden, dass Microservices ein elementarer Bestandteil des Cloud-nativen Ansatzes sind, in dem die Zukunft der Anwendungsentwicklung und -bereitstellung liegt.

* Klaas Freitag ist CTO bei ownCloud in Nürnberg.

(ID:47368631)