Definition

Microservices

Mitarbeiter: Alexander Gillis and Brein Matturro

Microservices oder Microservice-Architektur ist ein Ansatz für die Anwendungsentwicklung, bei dem eine große Anwendung aus einer Reihe kleiner modularer Komponenten – Services – zusammengesetzt wird.

Fortsetzung des Inhalts unten

Jedes Modul erfüllt eine bestimmte Aufgabe oder ein bestimmtes Geschäftsziel und verwendet eine einfache, gut definierte Schnittstelle, wie zum Beispiel eine Programmierschnittstelle (API), um mit anderen Gruppen von Diensten zu kommunizieren. Dem Softwareentwickler und Autor Martin Fowler wird das Verdienst zugeschrieben, der Idee der serviceorientierten Architektur (SOA) in Microservices zum Durchbruch verholfen zu haben. In einem Artikel aus dem Jahr 2014 erklärte er: "Der Architekturstil der Microservice-Architektur besteht darin, dass eine einzelne Anwendung als eine Reihe kleiner Dienste entwickelt wird, von denen jeder in einem eigenen Prozess läuft und mit leichtgewichtigen Mechanismen, oft einer HTTP-Ressourcen-API, kommuniziert. Diese Dienste sind um Geschäftsfähigkeiten herum aufgebaut und durch vollautomatische Bereitstellungsmechanismen unabhängig voneinander einsetzbar".

Wie Microservices funktionieren

In einer Microservice-Architektur wird eine Anwendung in Dienste unterteilt. Jeder Dienst führt einen einzigartigen Prozess aus und verwaltet normalerweise seine eigene Datenbank. Ein Dienst kann Warnmeldungen erzeugen, Daten protokollieren, Benutzerschnittstellen (UIs) unterstützen, Benutzeridentifizierung oder -authentifizierung handhaben und verschiedene andere Aufgaben ausführen.

Das Microservice-Paradigma bietet Entwicklungsteams einen stärker dezentralisierten Ansatz für die Erstellung von Software. Microservices ermöglichen es, jeden Service unabhängig zu isolieren, neu aufzubauen, zu verteilen und zu verwalten. Wenn zum Beispiel ein Programm nicht ordnungsgemäß Berichte erstellt, kann es einfacher sein, das Problem zu einem spezifischen Service zurückzuverfolgen. Dieser Service kann dann getestet, neu gestartet, gepatcht und bei Bedarf unabhängig von anderen Diensten neu eingesetzt werden.

Microservices versus monolithische Architektur

In einer monolithischen Architektur befindet sich der gesamte Code in einer einzigen ausführbaren Hauptdatei, was die Fehlerbehebung, das Testen und Aktualisieren erschweren kann. Tritt nämlich ein Fehler auf, der im Code liegt, könnte dieser im Grunde überall sein. Viele und langwierige Tests sind notwendig, um diesen Fehler zu finden. Bei einer monolithischen Anwendung erfordert jede kleine Änderung oder Aktualisierung, dass eine vollkommen neue Version der Anwendung erstellt und bereitgestellt werden muss. In der Folge sind das Entwickeln und Verwalten einer monolithischen Anwendung mit einem vergleichsweise großen Planungs-, Vorbereitungs-, Zeit- und Kostenaufwand verbunden.

Außerdem sind monolithische Anwendungen schwieriger zu skalieren. Wenn eine monolithische Anwendung an eine Kapazitätsgrenze, wie zum Beispiel beim Datendurchsatz, oder an einen anderen Engpass stößt, ist die einzige praktikable Lösung, eine weitere vollständige Iteration der gesamten monolithischen Anwendung zu implementieren und den Datenverkehr zwischen den Instanzen mit Load Balancern zu verwalten. Im Vergleich dazu ist es möglich, einzelne Aspekte einer Microservice-Anwendung zu skalieren, indem man Containerinstanzen nur der zugehörigen Services hinzufügt. Dies macht die Skalierung von Microservice-Anwendungen wesentlich ressourceneffizienter als die Skalierung von Anwendungen unter Verwendung einer monolithischen Architektur.

Microservices machen es einfacher, Änderungen zu testen und zu implementieren. Da jeder Dienst von den anderen getrennt ist, sind Fehler an diesen vom Rest der Anwendung isoliert. Wenn es ein Problem in der Software gibt, kann der problematische Dienst isoliert, behoben, getestet und neu bereitgestellt werden, ohne dass die gesamte Anwendung wie bei herkömmlichen monolithischen Anwendungsarchitekturen einem Regressionstest unterzogen werden muss. Microservice-Architekturen erhöhen die geschäftliche Agilität durch schnellere Softwareentwicklung und -bereitstellung im Vergleich zu monolithischen Softwarearchitekturen.

Microservices sind jedoch nicht verwaltungsfrei. Bei der gleichen Menge an Services wie bei einem monolithischen Softwareprodukt kann die in einer Microservice-Architektur erforderliche Verwaltung komplexer sein, da die Dienste voneinander getrennt sind. So ist beispielsweise eine sorgfältige Überwachung und Verwaltung erforderlich, um die Verfügbarkeit und Leistung aller Komponentendienste zu verfolgen, die innerhalb einer Mikrodienstanwendung betrieben werden.

Vor- und Nachteile bei Microservices

Bei Microservices müssen Entwickler häufig einen Kompromiss eingehen . In Bezug auf die Vorteile von Microservices gilt:

  • Leicht bereitzustellen,
  • geringere Entwicklungszeit,
  • schnelle Skalierbarkeit,
  • Einsatz derselben Services in verschiedenen Projekten,
  • bessere Fehlerisolierung,
  • Eignung auch bei kleinen Teams, und
  • Eignung für Containerumgebungen.

Allerdings gibt es auch Nachteile, wie zum Beispel:

  • zu viele, kleinteilige Einstellungen,
  • zusätzlicher Aufwand bei der Gestaltung der Kommunikation zwischen den Services;
  • Latenzzeit bei starker Nutzung; und
  • Komplexität von Tests.

Microservices und DevOps

DevOps ist ein Ansatz, bei dem das Entwickler- und Administratorenteam eng in einer Gruppe zusammenarbeitet. Durch die verstärkte Kommunikation zwischen Entwicklern und Admins profitieren beide Teile des IT-Teams. Der IT-Betrieb gewährleistet die Budgetierung von Kapazitäten, betrieblichen Aufgaben, Upgrades und mehr. Entwickler und Administratoren können Datenbanken, Server, Software und Hardware verwalten, die in der Produktion eingesetzt werden.

Teamarbeit und Zusammenarbeit zwischen Entwickler- und Betriebsteams sind erforderlich, um den Lebenszyklus von Microservices zu unterstützen, was sich für DevOps-Teams anbietet. Das ist auch der Grund, warum erfahrene DevOps-Teams für den Einsatz von Microservice-Architekturen in Software-Entwicklungsprojekten gut gerüstet sind.

Sicroservice-Architektur versus Service Oriented Architecture

SOA (Service-orientierte Architektur) ist eine Software-Architektur, bei der jeder Dienst Protokolle verwendet. Dies ermöglicht es Benutzern, Funktionen zu kombinieren und Anwendungen zu bilden, die aus früheren Diensten erstellt wurden. SOA ist seit fast zwei Jahrzehnten die Standardentwicklungspraxis. SOA stößt jedoch dann an seine Grenzen, wenn in der Cloud gearbeitet wird. Mit der Cloud mangelt es SOA an Skalierbarkeit und sie verlangsamt sich bei Änderungen von Arbeitsanforderungen, was die Anwendungsentwicklung einschränkt.

Viele Entwickler sehen Microservices als einen granulareren SOA-Ansatz. Die Befürworter des SOA-Modells sind der Ansicht, dass die Microservice-Architektur die natürliche Weiterentwicklung der SOA ist, die erforderlich wurde, um in der Cloud zu entwickeln und auf die steigenden Anforderungen an die Frequenz von Softwarezyklen zu reagieren.

Andere glauben, dass Microservices eher als ein eher plattformunabhängiger Ansatz für die Anwendungsentwicklung zu betrachten sind und daher einen eigenständigen Namen benötigt.

Microservices und Container

Ein Container ist ein individuelles und ausführbares Softwarepaket, das alle Abhängigkeiten enthält, die für ein unabhängiges Funktionieren erforderlich sind. Container sind von der übrigen sie umgebenden Software getrennt, und in derselben Umgebung können viele Container gleichzeitig laufen. In einer Microservice-Architektur wird jeder Dienst individuell in derselben Umgebung, wie zum Beispiel denselben oder verwandten Servern, containerisiert.

Eine virtuelle Maschine (VM) kann als Alternative zu Containern verwendet werden, um Microservices zu erstellen. Eine VM simuliert durch Software ein eigenständiges physisches Gerät. Jeder Service könnte also theoretisch eine VM nutzen, um Funktionen zu hosten. Wegen des individuellen Betriebssystems (OS) und des sonstigen Overheads, die für jede VM benötigt werden, vermeiden Entwickler VMs bei Microservice-Architekturen normalerweise. Container sind viel ressourceneffizienter, da nur der zugrunde liegende Code und die damit verbundenen Abhängigkeiten für den Betrieb des Dienstes erforderlich sind.

Sicherheit von Microservices

Microservice-Architekturen können einige Sicherheitsrisiken verringern, die bei monolithischen Anwendungen auftreten. Microservices vereinfachen die Überwachung, da die verschiedenen Teile einer Anwendung isoliert sind. Tritt ein Sicherheitsvorfall ein, betrifft das nicht automatisch die gesamte Architektur. Microservices bieten Widerstand gegen DDoS-Angriffe (Distributed Denial-of-Service), wenn sie mit Containern verwendet werden, indem sie die Gefahr einer Infrastrukturüberlastung mit zu vielen Serveranfragen minimieren.

Es gibt jedoch immer noch Herausforderungen bei der Sicherheit von Microservice-Anwendungen, darunter

  • Weitere Netzwerkbereiche sind offen für Schwachstellen.
  • Eine geringere Gesamtkonsistenz zwischen Anwendungsaktualisierungen erhöht die Gefahr für Sicherheitsverletzungen.
  • Es gibt ein größeres Angriffsgebiet, über mehrere Ports und APIs.
  • Es gibt einen Mangel an Kontrolle über Software von Drittanbietern.
  • Die Sicherheit muss für jeden Dienst aufrechterhalten werden.

Die Entwickler von Microservices haben sich Strategien zur Linderung von Sicherheitsproblemen ausgedacht. Um proaktiv zu sein, verwenden sie einen Sicherheitsscanner, nutzen Zugangskontrollbeschränkungen, sichern interne Netzwerke – einschließlich Docker-Umgebungen – und arbeiten außerhalb von Silos und kommunizieren so mit allen Teilen des Betriebs.

Einsatz von Microservice-Anwendungen

Der Erfolg von Microservices hing von drei zeitgleich stattfindenden Vorgängen in der IT ab.

Container ermöglichten ein konsistentes und ressourceneffizientes Mittel zum Verpacken einzelner Dienste. Docker ist ein beliebtes Werkzeug für Entwickler, das es ermöglicht, Container On-Premises oder in der Public oder Private Cloud zu verwenden. Dies bietet eine Vielzahl von Einsatzmöglichkeiten für Entwickler von Mikrodiensten und Unternehmen.

Die zweite wichtige Entwicklung ist das Aufkommen von Orchestrierungswerkzeugen, wie zum Beispiel Kubernetes. Diese Tools helfen bei der Automatisierung von Skalierung, Bereitstellung und Containerverwaltung.

Ein dritter wichtiger Durchbruch für Microservices ist die Erfindung des Service-Mesh. Ein Service-Mesh ist eine Infrastrukturebene, die der Kommunikation zwischen einzelnen Diensten dient. Service-Meshes machen diese Kommunikation schneller, sicherer, sichtbarer und zuverlässiger.

Der Grad der Komplexität von Microservices nimmt aufgrund dieser anderen Technologien, wie zum Beispiel bei der Überwachung und Protokollierung, stetig ab, so dass immer mehr Organisationen und Entwicklungsteams Microservices einsetzen können.

Diese Definition wurde zuletzt im Juli 2020 aktualisiert

Erfahren Sie mehr über Softwareentwicklung

- GOOGLE-ANZEIGEN

File Extensions and File Formats

Powered by:

ComputerWeekly.de

Close