Zum Inhalt springen

Was sind Microservices?

  • Use Cases

Microservices stammen aus dem Bereich der Softwarearchitektur und beschreiben einen Aufbau bei dem die Software aus vielen einzelnen Services besteht, die über Schnittstellen kommunizieren können.

Wie funktionieren Microservices?

In einer Microservice-Architektur wird ein Programm in viele einzelne Services aufgesplittet, die fest definierte Unteraufgaben übernehmen und untereinander kommunizieren können. Diese Services sind in sich abgeschlossen und weisen die folgenden Charakteristiken auf:

  • Die Services haben untereinander wenige oder sogar gar keine Abhängigkeiten zueinander.
  • Die Services können einzeln und unabhängig voneinander deployed werden. Dadurch lassen sich die technische Infrastruktur auch an das Lastprofil des Services anpassen.
  • Verantwortlichkeit liegt in vielen Fällen bei einem fest definierten Team.
  • Der Microservice kann so gebaut werden, dass er konkrete Business Probleme löst.

Dieser Aufbau in Microservices ermöglicht die Umsetzung von komplexen Programmen, indem sie in kleinere, überschaubare Services aufgesplittet werden. Des Weiteren können so auch im Nachhinein Programme einfach erweitert werden, indem neue Services hinzugeschalten werden oder bestehende Services wegfallen, da sie nicht mehr benötigt werden.

Monolithische und Microservice Architektur

Bei der Entwicklung von umfangreicher Software gibt es grundsätzlich zwei verschiede Herangehensweisen. Bei der sogenannten monolithischen Architektur wird die komplette Funktionalität in einen einzigen Service gepackt. Die einzelnen Elemente sind eng miteinander verwoben und teilweise im Code auch gar nicht unterscheidbar. In der Python Programmierung könnte beispielsweise eine Klasse mit vielen Funktionen einen Monolithen darstellen.

Die Microservice Architektur hingegen nutzt viele einzelne Services, welche abgeschlossene Funktionalitäten abbilden. Damit daraus eine zusammenhängende Software wird kommunizieren die Funktionen über API-Schnittstellen und tauschen so ihre Zwischenergebnisse aus.

Ein praktisches Beispiel zur Unterscheidung von Microservices und Monolithen, gibt es im Autobereich. Ein großer, strukturierter Autohersteller teilt den Bau des Autos in viele unterschiedliche Abteilungen auf. Es gibt spezielle Teams, die Karossen lackieren und andere die den Motor bauen. Über das Fließband gelangen die Zwischenstufen des Baus in die entsprechenden Abteilungen. In der Softwareentwicklung wären die Abteilungen viele verschieden Microservices.

Ein privater Schrauber hingegen, der sein eigenes Auto reparieren oder restaurieren will, handelt wie ein Monolith. Wenn etwas am Motor gemacht werden muss, kann er diesen untersuchen und die kaputten Teile austauschen. Genauso wird er auch Teile lackieren, die Kratzer haben.

Was sind die Eigenschaften von Microservices?

Bei genauerer Betrachtung einer Software gibt es zwei grundlegende Eigenschaften an der man eine Microservice Architektur erkennen kann.

  1. Die Services sind eigenständig: Die einzelnen Komponenten sind komplett unabhängig voneinander, d.h. sie können ohne Probleme skaliert oder bereitgestellt werden, ohne dass die gesamte Software darunter leidet. Ein erster Hinweis für die Eigenständigkeit ist die Nutzung von APIs zur Kommunikation zwischen den Services.
  2. Die Services sind spezialisiert: Alle Komponenten haben ein konkretes Problem, das sie lösen. Falls das Problem zu komplex ist, können innerhalb der Funktion andere Services gerufen werden, um zu unterstützen.

Welche Vor- und Nachteile bieten Microservices gegenüber Monolithen?

In den letzten Jahren haben sich Microservice Architekturen gegenüber den monolithischen vor allem aufgrund der folgenden Vorteile durchgesetzt:

  • Unabhängigkeit: Entwicklerteams können unabhängig voneinander arbeiten und müssen sich lediglich über das Format der API-Schnittstelle austauschen. Alle anderen Entscheidungen können so getroffen werden, dass sie für den Service optimal sind. Dazu gehört beispielsweise auch die Programmiersprache, sodass es passieren kann, dass die schlussendliche Software aus Services besteht, welche in verschiedenen Sprachen programmiert wurde. Gleichzeitig können auch Teile der Software von außenstehenden Teams entwickelt werden.
  • Agilität: Die Erstellung von Services kann sehr schnell erfolgen, da die einzelnen Probleme nicht so komplex sind und somit die Teams schnell und unkompliziert arbeiten können. Dazu gehört auch, dass die Abstimmung zwischen den Teams relativ gering ist, da die Services untereinander unabhängig sind.
  • Skalierung: Durch die Aufsplittung in Services können rechenintensive Funktionen gezielt skaliert werden. In einer monolithischen Architektur hingegen müsste die komplette Software hochskaliert werden, was wiederum deutlich kostenintensiver wäre. Beispielsweise bietet es sich an, einzelne Services, welche Neuronale Netzwerke nutzen, mit GPUs auszustatten.
  • Kompatibilität: Durch die einfache Kommunikation über Schnittstellen sind die Abhängigkeiten zwischen den Schnittstellen nur relativ gering. Dadurch können Services auch für komplett neue Projekte genutzt werden.
  • Resilienz: Sobald ein einzelner Service ausfällt, sind die anderen Services immer noch ansprechbar und die gesamte Software weiterhin erreichbar. Bei einem Monolithen hingegen führt der Ausfall oder ein Fehler in einer einzelnen Funktion zum Ausfall des gesamten Systems. Somit sind deutlich höhere Kosten zur Wartung und Prüfung notwendig.

Trotz dieser Masse an Vorteilen, die Microservices bieten gibt es auch Herausforderungen, welche bei der Einführung einer solchen Architektur beachtet werden müssen.

Der Vorteil von Monolithen ist, dass ein zentrales Logging passieren kann, d.h. der Zustand des Systems wird über eine zentrale Stelle zurück geliefert. Bei einer Microservice Architektur muss ein solches Logging erst aufgebaut werden, ansonsten erhält man nur Informationen über die einzelnen Services. Das erschwert auch die Überwachung der Software, welche nicht zentral möglich ist.

Das Testen des Systems wird durch die verteilte Architektur komplexer, weil eine Vielzahl von Services miteinander in Verbindung stehen. Gleichzeitig kann es bei der Kommunikation zwischen den Services zu Latenzen kommen, die das gesamte System verlangsamen. Falls die Antwortzeit der Software ein kritischer Punkt ist, kann eine Microservice Architektur schon rausfallen.

Bestehende Systeme lassen sich nur schwierig auf eine solche Architektur umziehen. Deshalb sollte versucht werden die Architektur möglichst bei Neuentwicklungen einzuführen, da sie bei bestehender Software den Aufwand deutlich erhöhen kann.

Wie hängen Microservices mit Docker zusammen?

Da die Microservices unabhängig voneinander sind, können sie auch in eigenen Umgebungen laufen, solange diese Umgebungen über Schnittstellen miteinander kommunizieren können. Dazu wird häufig die Virtualisierungsplattform Docker genutzt. Sie ermöglicht es auf einer Maschine mehrere sogenannte Container zu starten, welche isoliert voneinander laufen.

Alle Informationen und Ressourcen die der einzelne Service benötigt stecken in diesem Container. Zusätzlich können auch die Container einzeln skaliert werden, also leistungsfähiger gemacht werden, wenn es der Service benötigt.

Das solltest Du mitnehmen

  • Die Microservice Architektur beschreibt ein Softwarekonzept bei dem ein System in viele, einzelne Services unterteilt wird, die Teilprobleme lösen.
  • Das Gegenteil dazu ist der Monolith, bei dem die Software aus einem großen Konstrukt besteht, das alle Funktionen in sich vereint.
  • Die Vorteile von Microservices sind die Unabhängigkeit der einzelnen Services, die gesteigerte Kompatibilität und die einfache Skalierbarkeit.

Andere Beiträge zum Thema Microservice

Schlagwörter:
Cookie Consent mit Real Cookie Banner