Schlüsselpunkte
- Sie können einzelne Teile Ihrer Anwendung unabhängig voneinander skalieren und damit an die Nachfrage anpassen. Das spart Kosten und Server-Ressourcen.
- Fällt ein Teil Ihres Systems aus, läuft der Rest der Anwendung in der Regel weiter. So lässt sich ein kompletter Systemausfall vermeiden.
- Die Verwaltung vieler kleiner Services ist komplex. Sie brauchen daher automatisierte Tools, die das Starten, Stoppen und Verbinden zuverlässig übernehmen.
- Da die Services verteilt sind und häufig neu starten, benötigen Sie zentrale Überwachungstools, um die Performance im Blick zu behalten und Fehler schnell zu finden.
- Für große, komplexe Projekte ist dieser Ansatz ideal. Durch den zusätzlichen Aufwand bei Einrichtung und Wartung lohnt er sich für die meisten kleineren Unternehmen jedoch nicht.
- Wichtige Daten müssen Sie getrennt von Ihren Services speichern und automatisierte Systeme nutzen, die diese Daten sichern und Fehler melden.
Eine Microservices-Architektur bietet Vorteile für Anwendungen, die hoch skalierbar, ausfallsicher und verfügbar sein müssen. Sie eignet sich außerdem für Anwendungsfälle, in denen Latenz eine Rolle spielt, da sich Komponenten in der Nähe der Endbenutzer:innen verteilen lassen. Microservices dienen aber nicht nur dem Hosting von Consumer- und Software-as-a-Service-Anwendungen: Sie lassen sich ebenso für interne Infrastruktur und Tools einsetzen, bei denen Zuverlässigkeit im Vordergrund steht.
Dieser Leitfaden erklärt, wie Sie Microservices skalieren, worin sich dieser Ansatz von klassischen Anwendungsarchitekturen unterscheidet und welche Folgen das für die Verwaltung, Überwachung und Wartung von Microservices-Systemen durch IT-Teams hat.
Was sind Microservices?
Microservices (beziehungsweise eine Microservices-Architektur) sind eine Art, Anwendungen aus unabhängigen Komponenten-Services zu entwickeln, von denen jeder eine bestimmte Funktionalität kapselt. Die Komponenten sind lose gekoppelt und kommunizieren über APIs (meist via HTTP). Fällt ein Service aus, arbeiten die übrigen weiter. Microservices kommen üblicherweise bei gehosteten Client-Server-Anwendungen und -Diensten zum Einsatz, nicht bei Anwendungen, die lokal auf Ihren Geräten laufen (auch wenn sie sich zu diesem Zweck containerisieren lassen).
Da jeder Komponenten-Service eigenständig ist, lässt er sich einzeln skalieren. Ein einfacher E-Commerce-Shop kann zum Beispiel in Komponenten für die Zahlungsabwicklung, den E-Mail-Versand und die Darstellung von Webseiten aufgeteilt sein. Bei einem plötzlichen Traffic-Anstieg, ohne dass tatsächlich jemand den Warenkorb abschließt und damit Zahlungen und E-Mails auslöst, müsste nur der Webserver-Microservice skaliert werden. Das ist ressourcenschonend und kosteneffizient und stellt zugleich sicher, dass immer genügend Kapazität für die Nachfrage bereitsteht.
Microservices und monolithische Architekturen
Microservices sind eine Alternative zur monolithischen Architektur, bei der alles in einer einzigen Codebasis steckt, die typischerweise auf einem einzelnen leistungsstarken Server gehostet wird.
Der größte Vorteil eines Microservices-Ansatzes ist die Skalierbarkeit. Um eine monolithische Anwendung zu skalieren, können Sie entweder die verfügbaren Ressourcen erhöhen (also mehr Arbeitsspeicher und CPU, bekannt als vertikale Skalierung) oder eine weitere Instanz der Anwendung betreiben und die Last darauf verteilen (horizontale Skalierung).
Je nach Größe und Art Ihrer Anwendung kann die Skalierung von Monolithen sehr ineffizient sein, weil Sie unter Umständen Ressourcen für eine komplette Anwendung bereitstellen, obwohl nur eine kleine Komponente stark ausgelastet ist. Bei Microservices lässt sich jede Komponente horizontal skalieren, sodass sich der gesamte Ressourcenverbrauch optimieren lässt.
Auch das Thema Hochverfügbarkeit adressieren Microservices: Bei einem Monolithen stürzt im Fall eines Absturzes alles ab. Stürzt dagegen ein einzelner Microservice ab, laufen die übrigen weiter, während er sich wiederherstellt. Fällt etwa Ihr Microservice für den E-Mail-Versand aus, können Kund:innen weiter einkaufen und erhalten ihr Bestell-Update lediglich mit Verzögerung, anstatt gar nicht mehr einkaufen zu können.
So verändern Microservices das Zusammenspiel im System
Wenn Microservices horizontal skalieren, werden Container oder Instanzen je nach Nachfrage erzeugt und wieder verworfen. Alles, was im lokalen Arbeitsspeicher oder Storage liegt, geht dabei verloren. Zu einer skalierbaren Microservices-Anwendung gehört deshalb, das mit persistentem Storage, Datenbanken und Möglichkeiten zum Teilen von Zuständen (etwa Key-Value-Stores) abzufangen.
Microservices sind außerdem stark von der Netzwerk-Performance abhängig: Die Komponenten müssen permanent miteinander kommunizieren, mit niedriger Latenz und ohne Unterbrechung.
Neue Fehlermuster in verteilten Microservices-Systemen
Einer der Vorteile von Microservices ist zwar, dass Komponenten weiterlaufen können, wenn andere ausfallen. Je nach Anwendungsfall und den Design-Entscheidungen während der Entwicklung ist das aber nicht immer umsetzbar.
Komponenten sind zwangsläufig auf die Verfügbarkeit anderer angewiesen, und manche Vorgänge müssen in einer bestimmten Reihenfolge ablaufen. Fehler müssen also weitergereicht werden, und das Error Handling muss auch mit Teilausfällen umgehen können, nicht nur mit Komplettausfällen.
Skalierung funktioniert in verteilten Umgebungen anders (mit Nebenwirkungen)
Skalierung in Kombination mit isolierten Komponenten, die sich einzeln aktualisieren lassen (solange ihre APIs konsistent bleiben), führt dazu, dass Nodes laufend erzeugt und wieder verworfen werden, weil Ressourcen nach Bedarf zugewiesen werden. Manchmal lebt ein Container oder eine Instanz eines bestimmten Services nur lange genug, um eine einzige Anfrage zu beantworten.
Das beeinträchtigt die Transparenz erheblich, denn der Zustand jeder Komponente geht beim Verwerfen verloren, einschließlich der Fehlerprotokolle, die Sie zur Diagnose von Problemen brauchen.
Koordination zwischen Services als Herausforderung
Microservices müssen koordiniert bleiben und füreinander erreichbar sein, und Abhängigkeiten zwischen Services müssen in den Konfigurationen berücksichtigt werden. Dafür kommen Tools wie Kubernetes zum Einsatz, oder Sie nutzen die nativen Funktionen von Cloud-Plattformen wie Azure und AWS, um Container und virtuelle Maschinen zu verwalten.
Treten Latenz- oder Verbindungsprobleme auf, können Microservices-Architekturen unzuverlässig oder nicht verfügbar werden.
Die Performance hängt von Zweck und Beziehungen der Microservices ab
In einer Microservices-Architektur lässt sich die Performance pro Komponente priorisieren. Ein Webserver sollte beispielsweise so schnell wie möglich antworten, damit Endbenutzer:innen ein optimales Erlebnis haben, während ein Server für E-Mail-Benachrichtigungen ein paar Sekunden bis zum Versand brauchen darf, ohne dass der Betrieb darunter leidet.
In manchen Fällen ist ein Microservice tatsächlich eine externe API, etwa eine Kommunikations-API für den SMS-Versand. An sie werden andere Performance-Erwartungen gestellt als an einen Service, der im selben Rechenzentrum wie Ihre Anwendung gehostet wird.
Das macht die Performance-Optimierung komplexer und zu mehr als einer reinen Zahlenfrage.
So wächst die Komplexität in Microservices-Systemen mit der Zeit
Microservices wirken zunächst komplexer, können den IT-Betrieb bei richtigem Einsatz aber sogar vereinfachen: Oft ist es leichter, einen einzelnen Service isoliert zu untersuchen als einen kompletten monolithischen Anwendungs-Stack.
Die Einrichtung ist anfangs zwar komplex, doch Orchestrierung und Automatisierung machen die Bereitstellung von Microservices-Anwendungen für DevOps-Teams immer einfacher. CI/CD-Tools und Infrastructure-as-Code-Tools wie Terraform nehmen Ihnen einen Großteil der Arbeit ab und reduzieren das Risiko von Fehlkonfigurationen.
Unterschiede und Herausforderungen bei Performance- und Sicherheitsüberwachung von Microservices
Entscheidend für den Erfolg jedes IT-Systems sind Transparenz und ein proaktiver Umgang mit Problemen. IT- und DevOps-Teams, die ständig „Brände löschen“, können keine stabilen, nachhaltigen IT-Services liefern. Wenn Sie Microservices-Anwendungen hosten, müssen Sie virtuelle Maschinen und Container überwachen und Fehler beheben können.
Containers as a Service (CaaS) lässt sich ebenfalls nutzen, um die direkte Verwaltung der Infrastruktur zu abstrahieren. Diese Services bieten schlanke Oberflächen für die Verwaltung containerisierter Anwendungen und übernehmen viel vom Konfigurations-, Wartungs- und Sicherheitsaufwand, der mit dem Betrieb von Plattformen zur Container-Orchestrierung verbunden ist.
Eine weitere Herausforderung bei Microservices sind Backups: Laufende Instanzen sollten keine langlebigen Daten enthalten, die gesichert werden müssen. Für Key-Value-Stores, Datenbanken und Object Storage, die der dauerhaften Speicherung dienen, brauchen Sie dagegen womöglich jeweils eine passende Backup-Lösung, die ein Roll-back oder eine vollständige Wiederherstellung erlaubt, mit Unveränderbarkeit als Schutz vor böswilligen Bedrohungen.
Dann liefern Microservices den größten Mehrwert
Microservices-Anwendungen liefern den größten Mehrwert, wenn:
- Komponenten unabhängig voneinander skaliert werden müssen
- Anwendungen groß und komplex sind
- Entwicklungsteams unabhängig voneinander arbeiten müssen
- kontinuierliche Veränderung gefragt ist
Für Endbenutzer:innen und Stakeholder im Unternehmen liegt der Wert von Microservices in Zuverlässigkeit, Geschwindigkeit und Kostenoptimierung. Für Technikteams sind es Konsistenz und sofort verfügbare Skalierbarkeit.
Trotzdem sollten Sie Ihre Entwickler:innen nicht gleich bitten, bestehenden Code in eine Microservices-Architektur zu überführen. Die meisten kleinen und mittleren Unternehmen profitieren kaum von dem zusätzlichen Aufwand, etablierte Codebasen neu aufzubauen, und vom laufenden Betriebsaufwand verteilter Systeme.
Wenn Sie allerdings ein neues System entwerfen und umsetzen, sollten Sie prüfen, ob ein Microservices-Ansatz langfristige Vorteile für den Betrieb bringt. Das gilt besonders, wenn Sie planen, auf eine große Zahl von Benutzer:innen zu skalieren.
Kontrolle und Performance für Ihre gesamte IT-Infrastruktur
Einblick in den Betrieb kurzlebiger, automatisiert skalierender Infrastruktur zu gewinnen, kann schwierig sein. Viele Tools erlauben zwar Error Handling innerhalb von Containern und Spot-Instanzen, richten sich aber meist an Entwickler:innen.
Für IT-Teams, die den täglichen Betrieb von Microservices-Anwendungen verantworten, empfehlen sich Tools zur Fehlermeldung, die mit Ihrer Codebasis zusammenarbeiten und sich in eine einheitliche IT-Plattform integrieren lassen. So laufen die Alarmierungen Ihrer Microservices-Anwendungen zentral zusammen, gemeinsam mit den Benachrichtigungen aus Endpunkt-, Sicherheits- und Netzwerküberwachung.
Sie können außerdem Application Performance Monitoring einrichten, um einzelne Microservices und die Gesamt-Performance zu benchmarken, und per Helpdesk-Automatisierung Probleme eskalieren oder Kostenanomalien direkt an die richtige Technikerin oder den richtigen Techniker weiterleiten, damit sofort eine Diagnose erfolgt.