Ein Microservice ist ein Ansatz der Softwarearchitektur, bei der die Anwendung in kleine, unabhängige Dienste aufgeteilt wird, die jeweils eine spezifische Aufgabe erfüllen. Jeder Microservice ist in sich abgeschlossen und kann unabhängig von anderen Microservices entwickelt, bereitgestellt und verwaltet werden. Dies ermöglicht eine flexiblere und skalierbare Anwendung, Anwendungsentwicklung und -verwaltung, da Änderungen an einzelnen Microservices nicht die gesamte Anwendung beeinträchtigen.

    Begriffsdefinition

    Eine Microservice Architektur besteht aus kleinen, unabhängigen Diensten, die als Microservices bezeichnet werden. Diese Microservices werden in Containern verpackt, die sicherstellen, dass die Einheit während des gesamten Entwicklungsprozesses konsistent bleibt, einschließlich des Tests.

    Die architektonische Zusammensetzung von Microservices besteht aus:

    • Containern: Verpackung von Diensten und ihren Abhängigkeiten. Sie stellen sicher, dass die Einheit während des gesamten Entwicklungsprozesses konsistent bleibt, einschließlich des Tests.
    • Service Mesh: Erleichtert die Kommunikation zwischen Microservices über eine dedizierte dynamische Messaging-Schicht.
    • Service Discovery: Hilft Microservices, sich gegenseitig in einem Ökosystem zu finden.
    • API-Gateway: Ein Kommunikationsweg zwischen Microservices und externen Clients.
    • Backend: Der Teil einer Anwendung, der nicht direkt vom Benutzer interagiert wird und die Geschäftslogik und Datenverarbeitung verwaltet.

    Zusammen bilden die Interkommunikation und Datenaustausche der Bausteine die Funktionen einer vollständigen Anwendung.

    Wann ist es sinnvoll, auf Microservices zu setzten?

    Eine Microservice-Architektur ist ein geeigneter Ansatz, wenn eine Anwendung komplex und skalierbar sein muss und schnell an Änderungen angepasst werden kann. Und wenn einzelne Dienste unabhängig voneinander entwickelt, skalieren und aktualisiert werden sollen, was die Flexibilität und Time-to-Market erhöht. Oder wenn unterschiedliche Technologien für verschiedene Dienste zum Einsatz kommen und wenn die Anwendung Plattform unabhängig bzw. in der Cloud laufen soll.

    Der Einsatz von Microservices kommt mit seinen eigenen Herausforderungen. Dazu gehören die Integration von Diensten, die Verwaltung von API-Schnittstellen, Überwachung und Fehlerbehebung.

    Vorteile

    Eine Microservice-Architektur hat einige Vorteile gegenüber der Monolithischen-Architektur, bei dem eine Anwendung als einzelnes, großes und komplexes Programmmodul entwickelt wird. Dazu gehören:

    • Skalierbarkeit: Da Microservices selbstständige Dienste sind, können sie unabhängig voneinander skaliert werden, um die Leistung der gesamten Anwendung zu verbessern.
    • Flexibilität: Microservices sind modular aufgebaut und können einfach geändert oder aktualisiert werden, ohne dass die gesamte Anwendung neu gestartet werden muss.
    • Unabhängige Teams: Microservices ermöglichen es, dass Entwicklerteams unabhängig voneinander zu arbeiten, was die Produktivität und die Qualität erhöht.
    • Unterschiedliche Technologie: Microservices ermöglichen es, unterschiedliche Technologien für unterschiedliche Dienste zu verwenden.
    • Plattform unabhängig und Cloud-native: Microservices sind in der Regel Container, was den Einsatz auf verschiedenen Platzformen und in Cloud erleichtert/ermöglicht.
    • Höhere Fehlertoleranz: Wenn ein Microservice ausfällt, hat dies keine Auswirkungen auf die anderen Dienste und die gesamte Anwendung bleibt weiterhin funktionstüchtig.
    • Wiederverwendbarkeit: Microservices können wiederverwendet werden, um andere Anwendungen zu bauen oder in anderen Projekten eingesetzt werden.

    Nachteile

    1. Komplexität: Microservices erhöhen die Komplexität der Anwendung, da mehrere unabhängige Dienste miteinander kommunizieren müssen.
    2. Fehlersuche: Die Fehlersuche in einer Microservice-Architektur kann schwierig werden, da Probleme in einem Dienst Auswirkungen auf andere Dienste haben könnten.
    3. Latenz: Microservices kommunizieren über Netzwerke miteinander, dadurch kann es zu Latenzproblemen kommen, die die Anwendungsperformance beeinträchtigen können.
    4. Operationsaufwand: Der Betrieb und die Wartung einer Microservice-Architektur erfordert einen größeren Aufwand im Gegensatz zu einem Monolith, da jeder Dienst separat betrieben werden muss.
    5. Tests: Einen Microservice zu testen ist mitunter eine Herausforderung, da sie sich gegenseitig beeinflussen und unvorhergesehene Interaktionen haben können.
    6. Sicherheit: Da Microservices unabhängig voneinander entwickelt werden, kann es schwierig sein, eine einheitliche Sicherheitsstrategie für die gesamte Anwendung umzusetzen.

    Beispiele für eine Microservice-Architektur

    Ein Schaltbild für eine Microservice-Architektur könnte wie folgt aussehen:

    Computergrafik: In diesem Schaltbild für eine Microservice-Architektur gibt es eine Frontend-Anwendung, die von verschiedenen Backend-Services unterstützt wird. Auf die Services kann wird über ein API-Gateway zugegriffen werden. Das Gateway kommuniziert mit einem vorgelagerten Service (zum Beispiel eine Middleware), der die Kommunikation mit den anderen beiden Services, die den Zugriff auf ein jeweiliges Backend verantworten, steuert.

    In diesem Beispiel gibt es mehrere Services, die miteinander kommunizieren, um verschiedene Funktionen zu erfüllen. Jeder Service ist für eine spezifische Aufgabe verantwortlich und kommuniziert über API-Aufrufe mit den anderen Services.

    Auf die Services kann wird über ein API-Gateway (zum Beispiel über eine Android- oder IOS-APP oder Software auf dem PC) zugegriffen werden. Das Gateway kommuniziert mit einem vorgelagerten Service (zum Beispiel eine Middleware), der die Kommunikation mit den anderen beiden Services, die den Zugriff auf ein jeweiliges Backend verantworten, steuert.

    Ein weiteres Beispiel für eine Microservice-Architektur könnte wie folgt aussehen:

    Computergrafik: In diesem Schaltbild für eine Microservice-Architektur gibt es mehrere Services, die miteinander kommunizieren, um verschiedene Funktionen zu erfüllen. Jeder Service ist für eine spezifische Aufgabe verantwortlich und kommuniziert über API-Aufrufe mit einem API-Gateway oder einem Frontend-Service, nicht untereinander, um die Clients zu bedienen.

    In diesem Beispiel gibt es eine Frontend-Anwendung, die von verschiedenen Backend-Services unterstützt wird. Auf die Services kann entweder über ein API-Gateway oder über eine Web-Anwendung (zum Beispiel über den Webbrowser) über einien Frontend Service zugegriffen werden.

    Jeder Backend-Service ist für ein spezifisches Backend verantwortlich und stellt eine REST-API (auch bekannt als RESTful API) bereit, über die die Kommunikation mit dem API-Gateway oder dem Frontend-Service stattfindet.

    Einige bekannte Unternehmen, die Microservices einsetzten

    • Netflix: Netflix hat eine der größten Microservice-Architekturen unter anderem auf AWS und nutzt sie, um seinen Kunden eine große Auswahl an Filmen und TV-Shows anzubieten.
    • Amazon: Hat seinen Onlineshop als Microservices strukturiert, um seine vielfältigen E-Commerce-Angebote zu unterstützen und schnell auf Veränderungen in der Nachfrage reagieren zu können.
    • Uber: Das Unternehmen setzt Microservices ein, um seine Fahrdienst-Plattform zu betreiben und schnell auf Veränderungen in der Nachfrage reagieren zu können.

    Links