Was sind Mikroservices?
Die Mikroservices-Architektur, auch bekannt als „Mikroservices“, ist ein Ansatz der Software-Entwicklung mit modularen Services, die jeweils unterschiedliche Funktionen erfüllen und voneinander unabhängig sind.
Seit einigen Jahren werden Mikroservices sehr häufig für die Entwicklung und Bereitstellung von Anwendungen eingesetzt. Dieser Architekturtyp ermöglicht die Aufteilung der Anwendungen in kleinere und voneinander entkoppelte Komponenten (Mikroservices), die unabhängig voneinander getestet, gewartet und bereitgestellt werden. Auf diese Weise erhalten Entwicklungsteams mehr Autonomie und kreative Kontrolle über ihren Entwicklungsprozess.
In diesem Beitrag erläutern wir, was eine Mikroservices-Architektur ist, untersuchen die Vor- und Nachteile und blicken auf die Zukunft der Mikroservices.
Zunächst werfen wir jedoch einen Blick auf andere Entwicklungsmethoden – und wie diese heute im Vergleich zu den Mikroservices abschneiden.
Was ist eine monolithische Architektur?
In den Anfängen der Software-Entwicklung wurde der gesamte Quellcode in einer einzigen Bereitstellungseinheit zusammengefasst – bekannt als monolithischer Ansatz. Damals bedurfte es selbst bei kleinen Änderungen an einer bestehenden Anwendung einer vollständig aktualisierten Version einschließlich der Qualitätssicherung. Dies erhöhte die Bereitstellungszeit der Anwendung und den Arbeitsaufwand der daran beteiligten Teams. Wenn Updates Fehler verursachten, musste die gesamte Anwendung deaktiviert, zerlegt und repariert werden.
Für wachsende Unternehmen, die in mehreren Geschäftsbereichen tätig sind, können Fehler in der monolithischen Architektur zum Ausfall aller Services führen – ein nahezu untragbares Risiko.
Die monolithische Architektur im Vergleich zu Mikroservices
Monolithische Anwendungen werden als Einheit entwickelt, in der alle Funktionen dieselbe Laufzeitumgebung nutzen. Mikroservices dagegen nutzen je nach Funktion oder Geschäftsbereich eine andere Umgebung, wobei für jeden Service ein eigenes Entwicklungsteam verantwortlich ist.
Was ist eine Service-orientierte Architektur?
Die Service-orientierte Architektur (SOA) wurde als Lösung für die oben genannten Unzulänglichkeiten entwickelt. Mit SOA werden Anwendungen in separate Komponenten aufgeteilt, die über einen Enterprise Service Bus (ESB) miteinander kommunizieren. Dieser stellt über eine Geschäftsprozess-Sprache (z. B. BPEL) eine Geschäftslogik bereit. Die einzelnen Services sind dabei jeweils auf einen bestimmten Geschäftsprozess ausgerichtet und nutzen ein gemeinsames XML-basiertes Kommunikationsprotokoll (z. B. SOAP) zum Austausch über den ESB.
Zwar können Entwickler mit SOA jeden Service nach Bedarf entwickeln, testen und optimieren, doch wird der Einsatz der Technologie durch das umfangreiche SOAP-Protokoll und die XML-Nutzdaten auf bestimmte Anwendungsfälle beschränkt. Gleichzeitig stellt der ESB für das System einen Single Point of Failure dar. ESB-Probleme können zu einem Ausfall des gesamten Anwendungspakets führen und damit die Vorteile eines schnelleren Entwicklungszyklus mindern.
SOA im Vergleich zu Mikroservices
Während SOA-Komponenten miteinander über einen Enterprise Service Bus kommunizieren – der einen Single Point of Failure darstellt –, nutzen Mikroservices für diesen Zweck APIs.
Was haben APIs damit zu tun?
Nach der Veröffentlichung von „Microservices“ – einem grundlegenden Positionsartikel von James Lewis und Martin Fowler – im Jahr 2014 nahm die Beliebtheit der Technologie enorm zu. Die beiden Autoren geben in dem Artikel eine ausführliche Definition der Mikroservices-Architektur und beschreiben, wie sie sich aus der SOA entwickelt hat. Im Unterschied zum ESB kommunizieren Mikroservice-Komponenten miteinander über APIs, die auch Integrationen in Drittanbieter-Anwendungen ermöglichen.
Im selben Jahr wurde Spring Boot veröffentlicht – ein mächtiges Java-basiertes Open-Source-Framework, mit dem Mikroservices und Anwendungen schneller entwickelt werden können. Mit dem anschließenden Start der Spring Cloud 1.0 wurden Mikroservices immer beliebter, da die Spring- und Java-Entwickler-Communitys nun Zugang zu den Architekturprinzipien hatten, die schon früh von Netflix eingesetzt wurden.
Mikroservices und APIs
Mikroservices sind ein Architekturstil für die Anwendungsentwicklung, mit denen Funktionen an Drittanbieter-Systeme ausgelagert werden können. Dabei ermöglichen APIs den Informationsaustausch der Mikroservices untereinander. Über sie können interne und externe Entwickler auf die Daten oder Funktionen eines Mikroservices zugreifen.
Viele der heutigen führenden Unternehmen sind auf Mikroservices aufgebaut. Sie nutzen die API-Wirtschaft und Entwickler-Communitys, um hochentwickelte und stark integrierte Services anzubieten. Eine Fahrtvermittlungs-App zum Beispiel kann verschiedene APIs einsetzen: Stripe-APIs für Zahlungen, Google Maps für die Kartentechnik und Twilio für den Versand von SMS-Nachrichten.
Mithilfe von APIs können Entwickler in der Mikroservices-Architektur Funktionen auslagern und ihre Anwendungen mit Services von Branchenführern aufwerten. Im oben genannten Beispiel für eine Mikroservices-Architektur kann das Unternehmen sicheres Identitäts- und Zugriffsmanagement mithilfe der Okta-APIs Authentifizierung und Autorisierung in seine Anwendung einbetten.
Wie funktioniert die Mikroservices-Architektur?
Es gibt zwar kein allgemeingültiges Modell, doch haben viele Mikroservices die folgenden gemeinsamen Eigenschaften und funktionieren nach einem ähnlichen Prinzip:
- Mehrere Komponenten: Jeder einzelne Service in der Struktur kann unabhängig von den anderen bereitgestellt, optimiert und erneut bereitgestellt werden, ohne die gesamte Anwendung zu beeinträchtigen.
- Auf Geschäftsbereiche ausgerichtet: Im Unternehmen wird der Einsatz von Mikroservices typischerweise von geschäftlichen Funktionen und Prioritäten bestimmt. Jedes Team übernimmt die Verantwortung für ein spezielles Produkt oder einen Service und setzt dabei funktionsübergreifend viele verschiedene Fähigkeiten ein. Dies steht ganz im Gegensatz zur monolithischen Entwicklungsmethode, bei der sich die Teams jeweils nur auf eine Funktion des gesamten Anwendungspakets konzentrieren.
- Vereinfachtes Routing: In Mikroservices werden APIs als ressourcenschonendes Mittel eingesetzt, um Anfragen zu empfangen und zu verarbeiten sowie darauf zu reagieren. Somit werden komplexe ESBs, die oft hochentwickelte Systeme für die Weiterleitung von Nachrichten und die Anwendung von Geschäftsregeln nutzen, überflüssig.
- Dezentralisierung: Da Mikroservices verschiedene Technologien und Plattformen in sich vereinigen, sind sie nicht für zentrale Governance geeignet. Mikroservice-Entwickler möchten oft nützliche Tools erstellen, die andere für die Lösung ihrer Probleme einsetzen können, und befürworten deshalb eher dezentrale Governance. Zudem sind Mikroservices besser für eine dezentrale Datenverwaltung geeignet, bei der jeder Service seine eigene Datenbank verwaltet.
Welche Vorteile bieten Mikroservices?
Die Mikroservices-Architektur hat unter anderem folgende Vorteile für Ihren Entwicklungsprozess:
- Agilität: Für jeden Service ist ein kleines, unabhängiges Entwicklerteam zuständig. Dies ermöglicht selbstständiges Arbeiten sowie die schnellere Bereitstellung von Updates für den jeweiligen Service, was den Entwicklungszyklus verkürzt.
- Skalierbarkeit: Da das Netzwerk aus kleinen Komponenten besteht, kann jeder Service unabhängig skaliert werden, um die Anforderungen der jeweils unterstützten Anwendungsfunktion zu erfüllen. Die Teams können somit die Kosten einer Funktion genau berechnen, Infrastrukturbedarf mit einplanen und die Verfügbarkeit eines Services ausbauen, wenn dieser stärker genutzt wird.
- Spezialisierung: Jeder Mikroservice soll bestimmte Funktionen bieten und ein konkretes Problem lösen. Aus diesem Grund gibt es keinen einheitlichen Ansatz für die Entwicklung von Mikroservices – Entwickler können für die Lösung des jeweiligen Problems frei unter den besten Tools auswählen.
- Einfache Bereitstellung: Da Mikroservices modular sind und kontinuierliche Integration und Bereitstellung unterstützen, ist es relativ einfach, Code zu aktualisieren, mit neuen Ideen zu experimentieren, neue Funktionen einzuführen und Updates rückgängig zu machen, falls etwas nicht funktionieren sollte.
- Flexibilität: Entwickler können die für bestimmte Funktionen geschriebenen Services als Bausteine für andere Funktionen nutzen und haben ebenso die Möglichkeit, Funktionen von Drittanbietern mithilfe öffentlicher APIs zu integrieren (z. B. Twilio, Okta, Stripe). Sie sind daher für die Entwicklung neuer Features nicht darauf angewiesen, Code von Grund auf neu zu schreiben.
- Evolution: Eine Mikroservices-Architektur kann jederzeit weiterentwickelt werden und ist somit ideal für Systeme, bei denen noch nicht von vornherein feststeht, welche Gerätetypen auf die Anwendung zugreifen werden. Viele Anwendungen basieren anfangs auf monolithischer Architektur und werden dann nach und nach auf Mikroservices neu aufgebaut, die über APIs kommunizieren.
Welche Nachteile bieten Mikroservices?
Trotz der Vorteile von Mikroservices sollten auch ihre Nachteile nicht verschwiegen werden:
- Wartung: Zwar hat der Ausfall eines Services keine Auswirkungen auf das Gesamtsystem, doch sind die einzelnen Services selbst diesem Risiko sehr wohl ausgesetzt. Mikroservice-Anwendungen müssen daher permanent überwacht werden, damit Ausfälle schnell erkannt und die Funktionsfähigkeit so schnell wie möglich wiederhergestellt werden kann. Ebenso sollten Belastungstests durchgeführt werden, die die Resilienz und die Überwachungsfunktionen der Services überprüfen.
- Sicherheit: Jeder Service ist eine potenzielle Schwachstelle. Um die Sicherheit Ihrer Anwendung zu gewährleisten, müssen diese daher wirksam geschützt werden. Produkte wie Advanced Server Access von Okta bieten Authentifizierungs- und Autorisierungsfunktionen für den Schutz der Infrastruktur hinter Ihrer Anwendung.
- Identitäts- und Zugriffsmanagement: Für Mikroservices melden sich Benutzer nicht bei einem zentralen Service, sondern bei mehreren APIs an. Die Benutzeridentitäten befinden sich dabei oft in getrennten Verzeichnissen, die zudem doppelte Profile mit widersprüchlichen Daten enthalten. Benutzer müssen für alle verteilten Komponenten authentifiziert und autorisiert werden. Trotz der entkoppelten Funktionsweise sollte die Identitätsüberprüfung aus Sicherheitsgründen nicht von jeder einzelnen Komponente ausgeführt werden.
Wie sieht die Zukunft von Mikroservices aus?
Während sich die Mikroservices-Architektur ständig weiterentwickelt, gibt es in unseren Augen drei Neuerungen, die eine zunehmend wichtigere Rolle spielen:
Serverlose Architektur
Heutzutage können Entwickler Code in Umgebungen von serverlosen Anbietern bereitstellen, die den Code auf Anfrage ausführen, ohne dass sich Entwickler Gedanken um Serverkapazitäten, Redundanz und Laufzeitumgebungen machen müssen. Neue Services können schnell entwickelt, getestet und bereitgestellt werden, ohne dafür große Anfangsinvestitionen aufbringen zu müssen. Dieser Service wird momentan von AWS Lambda und Google Cloud Functions angeboten.
Edge Computing
Edge Computing soll die Leistung verbessern, die Latenz verringern und dazu dienen, die Mikroservice-Anwendungen effizienter und mit einer höheren Rechenleistung auszuführen. Um Services besser verfügbar und benutzerfreundlicher zu machen, bedient sich Edge Computing moderner Technologien wie Single-Page Applications (SPAs) sowie Content Distribution Network-Anbietern wie Cloudflare und Fastly.
Mehr kreative Gestaltungsmöglichkeiten
Die Mikroservices-Architektur hat bewiesen, dass sie mit gemeinschaftlicher Entwicklung und einem iterativen Ansatz vereinbar ist. Da die öffentliche API-Wirtschaft weiter wächst und Code zunehmend für die mehrfache Nutzung in verschiedenen Services geschrieben wird, erwarten wir, dass Entwickler künftig Zugriff auf eine wachsende Zahl an Ressourcen haben werden, mit denen sie neue und interessante Funktionen in ihre Anwendungen einbetten können.
Erste Schritte mit Mikroservices
Für den Einstieg in das Thema Mikroservices haben wir für Sie eine umfangreiche Bibliothek mit Ressourcen zusammengestellt, um Sie bei der Entwicklung und beim Schutz Ihrer Anwendungen zu unterstützen.
Die folgenden Links enthalten weitere Informationen zur Mikroservices-Architektur und wie man sie schützt:
- Okta Developer Blog (Tutorials und Leitfäden zu Mikroservices)
- GitHub (Projekte und Beispielanwendungen)
- Sicherheitsmuster für Mikroservices-Architekturen (Blog-Artikel)
- Advanced Server Access (Produktseite)