Microservice-Architektur
Eine Microservice-Architektur bietet ein hoch skalierbares und verteiltes modernes System.
Heute ist die Modernisierung von Anwendungen häufig mit der Migration zu cloudnativen, Microservice-basierten Anwendungen verbunden. Diese werden dann mithilfe von Container-Technologien wie Docker und Kubernetes bereitgestellt. Neben Netflix und Atlassian haben sich zahlreiche andere Unternehmen für diesen Ansatz entschieden, da eine Microservice-Architektur die Skalierbarkeit, die Entwicklungsgeschwindigkeit und die Iteration von Services verbessert.
Eine Microservice-Architektur teilt eine Anwendung in eine Reihe von unabhängig bereitstellbaren Services auf, die über APIs miteinander kommunizieren. Auf diese Weise kann jeder einzelne Service unabhängig bereitgestellt und skaliert werden. Dieser Ansatz ermöglicht die schnelle und häufige Bereitstellung großer, komplexer Anwendungen. Im Gegensatz zu einer monolithischen Anwendung ermöglicht eine Microservice-Architektur Teams, neue Funktionen zu implementieren und Änderungen schneller vorzunehmen, ohne einen großen Teil des vorhandenen Codes neu schreiben zu müssen.
Einige wichtige Merkmale einer Microservice-Architektur:
Services mit mehreren Komponenten
Microservices bestehen aus einzelnen, lose verbundenen Services, die entwickelt, bereitgestellt, betrieben, geändert und neu bereitgestellt werden können, ohne die Funktion anderer Services oder die Integrität einer Anwendung zu beeinträchtigen. Dies ermöglicht ein schnelles und einfaches Deployment der einzelnen Funktionen einer Anwendung.
Sehr gute Wartbarkeit und Testfähigkeit
Microservices ermöglichen Teams, mit neuen Funktionen zu experimentieren und Änderungen rückgängig zu machen, wenn etwas nicht funktioniert. Auf diese Weise kann Code einfacher aktualisiert und die Einführung von neuen Funktionen beschleunigt werden. Außerdem lassen sich Fehler und Bugs in einzelnen Services einfacher isolieren und beheben.
Im Besitz von kleinen Teams
Da die Services in einer Microservice-Architektur in der Regel von kleinen, unabhängigen Teams erstellt werden, fördert dies die Anwendung von agilen Praktiken und DevOps. So sind die Teams in der Lage, unabhängig zu arbeiten und schnell zu handeln, wodurch die Entwicklungszyklen verkürzt werden.
Organisation nach Geschäftsfunktionen
Bei einem Microservice-Ansatz werden Services nach Geschäftsfunktionen organisiert. Die funktionsübergreifenden Teams verfügen über alle Kompetenzen, die für die Entwicklung der einzelnen Funktionen erforderlich sind.
Automatisierte Infrastruktur
Teams, die an der Entwicklung und Wartung von Microservices arbeiten, wenden in der Regel Praktiken zur Automatisierung von Infrastruktur wie Continuous Integration (CI), Continuous Delivery (CD) und Continuous Deployment (ebenfalls CD) an. Auf diese Weise können sie jeden Service unabhängig entwickeln und bereitstellen, ohne andere Teams zu beeinträchtigen. So sind Teams außerdem in der Lage, eine neue Version eines Service parallel zur vorherigen Version bereitzustellen.
Beispiel einer Microservice-Architektur
Nehmen wir als Beispiel ein hypothetisches E-Commerce-Softwareprojekt. Das folgende Diagramm zeigt eine E-Commerce-Website mit einer Webanwendung und einer mobilen Anwendung. Diese interagieren mit mehreren Microservices, die jeweils spezifische Funktionen für eine Domain bieten.
Moderne Webanwendungen laufen in Browsern und werden oft von einem Content Distribution Network (CDN) bereitgestellt. Ein CDN hat den Vorteil, dass Webanwendungen an Server auf der ganzen Welt verteilt werden, sodass sie schnell mithilfe von Webbrowsern heruntergeladen werden können. CDNs werden auch zur Bereitstellung von Medienressourcen wie Bildern sowie Audio- und Videoinhalten genutzt. In diesem System werden beispielsweise die Bilder und Videos der zum Verkauf stehenden Waren vom CDN bereitgestellt.
Die Microservices in dieser Grafik sind:
Kontoservice
Der Kontoservice liefert Informationen über das Kundenkonto, wie Adresse und Zahlungsinformationen.
Bestandsservice
Dieser Service bietet aktuelle Bestandsinformationen für Waren, die der Kunde kaufen kann.
Einkaufswagenservice
Damit können Kunden die Waren aus dem Bestand auswählen, die sie kaufen möchten.
Bezahlservice
Damit bezahlen Kunden für die Waren im Einkaufswagen.
Versandservice
Damit wird die Verpackung und Lieferung der gekauften Waren geplant.
Die Anwendungen interagieren mit den Microservices über REST-APIs, die von den einzelnen Microservices veröffentlicht werden. Ein API-Gateway ermöglicht es den Anwendungen, die von den Microservices bereitgestellten APIs zu nutzen. Darüber hinaus können die Microservices gegen andere Microservices mit derselben API ausgetauscht werden.
Jeder Microservice besteht aus einem Service und einer Datenbank. Die Services arbeiten mit der REST-API, implementieren Geschäftslogik und speichern Daten in einer Datenbank. Bei Microservices isolieren wir ihre Ressourcen wie Datenbanken und Warteschlangen gemäß dem 12-Faktor-App-Vertrag voneinander.
Wie erstellt man Microservices?
Für viele Unternehmen ist der Aufbau einer Monolith-Architektur der erste Schritt. Dann müssen sie die Codebasis in mehrere Services aufteilen und die richtigen Muster implementieren, um die Services bei Fehlern ordnungsgemäß zu beenden und nach Netzwerkproblemen wiederherzustellen, mit der Datenkonsistenz umzugehen, die Servicelast zu überwachen usw. Doch das ist nur der technische Teil. Auch die Teams müssen neu organisiert werden, und höchstwahrscheinlich ist die Einführung einer DevOps-Kultur erforderlich.
Dann kommt der schwierige Teil: Die monolithische Architektur muss in Microservices aufgeteilt werden. Das Refactoring eines monolithischen Datenbankschemas kann eine heikle Angelegenheit sein. Es muss eindeutig definiert werden, welche Datensätze jeder Service benötigt und wo es zu Überscheidungen kommt. Continuous Delivery reduziert das Risiko eines Releasefehlers und stellt sicher, dass sich dein Team auf die Entwicklung und den Betrieb der Anwendung konzentriert, anstatt sich mit dem Deployment aufzuhalten.
Microservices und monolithische Architektur im Vergleich
Eine monolithische Architektur ist ein herkömmliches Modell eines Softwareprogramms, das als komplette Einheit erstellt wurde, die in sich geschlossen und unabhängig von anderen Anwendungen ist. Eine Microservice-Architektur ist praktisch das Gegenteil einer monolithischen Architektur, da diese Struktur auf einer Reihe von unabhängig bereitstellbaren Services beruht. Monolithische Architekturen eignen sich gut für frühe Projektphasen, da sie den kognitiven Aufwand für das Codemanagement und Deployment erleichtern. Sobald eine monolithische Anwendung groß und komplex wird, werden ihre Skalierung und Continuous Deployment zur Herausforderung und Aktualisierungen können umständlich sein.
Eine monolithische Anwendung wird als einzelne unteilbare Einheit erstellt, während Microservices diese Einheit in eine Ansammlung unabhängiger Einheiten aufteilen, die zum großen Ganzen beitragen. Eine Anwendung wird aus einer Reihe von unabhängig bereitstellbaren Services erstellt, die dezentral und autonom entwickelt werden.
Verteilte Architektur
Microservices fallen in die Kategorie eines verteilten Systems. Ein verteiltes System wird als eine Sammlung aus Computerprogrammen definiert, die Rechenressourcen über mehrere getrennte Rechenknoten hinweg nutzen, um ein gemeinsames Ziel zu erreichen. Verteilte Systeme sind ein gutes Mittel, um die Zuverlässigkeit und Leistung des Systems zu verbessern. Darüber hinaus ermöglichen sie eine einfache Skalierung.
Die Knoten in einem verteilten System bieten Redundanz, da beim Ausfall eines Knotens andere Knoten als Ersatz bereitstehen. Knoten können horizontal und vertikal skaliert werden, sodass die Leistung verbessert wird. Wenn ein System aktuell extrem ausgelastet ist, können weitere Knoten hinzugefügt werden, um die Last auf diese zu verteilen.
Kubernetes und Docker im Vergleich
Docker ist eine kommerzielle Containerisierungs-Plattform und Container-Laufzeit, mit deren Hilfe Entwickler Container erstellen, bereitstellen und ausführen können. Docker bietet zwar eine effiziente Methode, um containerisierte Anwendungen zu verpacken und zu verteilen, doch mit Docker allein wird die Ausführung und Verwaltung von Containern im größeren Maßstab eine Herausforderung.
Kubernetes ist eine beliebte Open-Source-Plattform, die Container-Laufzeitsysteme über einen Cluster aus Netzwerkressourcen hinweg orchestriert. Sie kann mit oder ohne Docker verwendet werden. Docker ist eine Container-Laufzeit, Kubernetes hingegen eine Plattform zum Ausführen und Verwalten von Containern aus vielen Container-Laufzeiten.
Konfigurationsmanagement
Softwarekonfigurationsmanagement ist ein Prozess, der Änderungen an den Metadaten einer Softwaresystemkonfiguration verwaltet, organisiert, verfolgt und überwacht. Das Konfigurationsmanagement wird häufig neben der Versionskontrolle und einer CI/CD-Infrastruktur verwendet.
Es hilft Entwicklerteams beim Aufbau robuster und stabiler Systeme durch den Einsatz von Tools, die Updates von Konfigurationsdaten automatisch verwalten und überwachen. Es verbessert außerdem die Kontrolle in einer Microservice-Architektur, indem es eine zentrale Informationsquelle für die Konfiguration schafft.
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über Softwareentwicklung und fortlaufende Updates zu Compass zu erfahren.