Zum Inhalt springen

Was sind Microservices?

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.

Docker Hub Oberfläche | Quelle: Docker Dokumentation

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.

Mit welchem Technology Stack können Microservices gebaut werden?

Der Technologie-Stack von Microservices bezieht sich auf die verschiedenen Komponenten, die zur Erstellung von Microservices-basierten Anwendungen verwendet werden. Nachfolgend sind einige der gängigen Technologien aufgeführt:

  • Programmiersprachen: Microservices können mit verschiedenen Programmiersprachen entwickelt werden, darunter Java, Python, Ruby, JavaScript und Go. Jede Sprache hat ihre Stärken und Schwächen, und Entwickler sollten die Sprache wählen, die am besten zu den Anforderungen ihres Projekts passt.
  • Frameworks: Frameworks sind Werkzeuge, die eine Reihe von vordefinierten Funktionen bereitstellen, um die Entwicklung zu beschleunigen. Es gibt mehrere Frameworks für die Entwicklung von Microservices, wie Spring Boot, Micronaut, Flask, Express.js und Gin.
  • Container: Container sind eine leichtgewichtige Alternative zu virtuellen Maschinen, die die Bereitstellung von Microservices in einer portablen und konsistenten Weise ermöglichen. Die beliebteste Container-Technologie ist Docker, die eine einfache Möglichkeit zur Paketierung und Verteilung der Services bietet.
  • Orchestrierungs-Tools: Orchestrierungstools helfen bei der Verwaltung und Bereitstellung von Services in einer verteilten Umgebung. Das beliebteste Orchestrierungs-Tool ist Kubernetes, das eine automatische Skalierung, Bereitstellung und Verwaltung ermöglicht.
  • API-Gateways: API-Gateways bieten einen zentralen Punkt für die Verwaltung des ein- und ausgehenden Datenverkehrs von Microservices. Sie können für die Authentifizierung, den Lastausgleich und das Routing von Anfragen verwendet werden. Einige beliebte API-Gateway-Tools sind Kong, Apigee und AWS API Gateway.
  • Datenbanken: Microservices können je nach ihren spezifischen Anforderungen verschiedene Arten von Datenbanken erfordern. Zu den gängigen Datenbanktechnologien, die in Microservices eingesetzt werden, gehören MySQL, MongoDB, Cassandra und Redis.
  • Protokollierungs- und Überwachungswerkzeuge: Da Microservices in einer verteilten Umgebung bereitgestellt werden, sind Protokollierung und Überwachung von entscheidender Bedeutung, um sicherzustellen, dass sie reibungslos funktionieren. Einige beliebte Protokollierungs- und Überwachungstools sind ELK Stack, Prometheus und Grafana.

Insgesamt kann der Technologie-Stack je nach den spezifischen Anforderungen des Projekts variieren. Entwickler sollten die richtige Auswahl an Technologien treffen, die es ihnen ermöglichen, skalierbare, zuverlässige und effiziente Microservices-basierte Anwendungen zu erstellen und zu warten.

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.
Ridge Regression

Was ist die Ridge Regression?

Erforschung der Ridge Regression: Vorteile, Implementierung in Python und die Unterschiede zu Ordinary Least Squares (OLS).

Aktivierungsfunktion / Activation Function

Was ist eine Aktivierungsfunktion?

Erfahren Sie mehr über die Bausteine des Deep Learnings: Maximieren Sie die Modellleistung mit der richtigen Aktivierungsfunktion.

Regularization / Regularisierung

Was ist die Regularisierung im Machine Learning?

Regularisierung verstehen: Erfahren Sie, wie Regularisierungstechniken die Modellleistung verbessern und eine Überanpassung verhindern.

Conditional Random Field

Was ist ein Conditional Random Field (CRF)?

Entfesseln Sie die Macht der Conditional Random Fields: Entdecken Sie fortgeschrittene Techniken und Anwendungen in diesem Leitfaden.

Swarm Intelligence / Schwarmintelligenz

Was ist die Schwarmintelligenz?

Entdecken Sie die Kraft der Schwarmintelligenz - ein System, das von der kollektiven Intelligenz sozialer Lebewesen inspiriert ist.

Bias-Variance Tradeoff

Was ist der Bias-Variance Tradeoff?

Bias-Variance Tradeoff beim Machine Learning: Der Kompromiss zwischen Einfachheit und Flexibilität des Modells. Erfahren Sie mehr!

Andere Beiträge zum Thema Microservice

Schlagwörter:
Cookie Consent mit Real Cookie Banner