Simon Flühmann
Principal Consultant
«Microservices»: yet another Buzzword you might think – hinter dem Begriff Microservices verbirgt sich jedoch ein Architekturmuster mit grossem Potential.
Autor: Simon Flühmann
Microservices ist ein Architektur-Ansatz für das Design von hochskalierbaren und robusten Applikationen, um den steigenden Anforderungen punkto Agilität, Verfügbarkeit und Wartbarkeit an heutige Softwaresysteme zu begegnen. Grosse IT-Unternehmen, wie LinkedIn oder Netflix, haben diesen Design-Approach geprägt. Im Gegensatz zu klassisch monolithisch aufgebauten Applikationen werden Microservice-Umgebungen aus mehreren kleinen Modulen – den Microservices – aufgebaut. Jeder Microservice kümmert sich eigenständig um eine dedizierte fachliche Aufgabe (Single Responsibility Principle). Jeder Microservice arbeitet komplett autonom, kann autonom entwickelt und in Produktion gebracht werden.
Die folgende Abbildung zeigt den schematischen Aufbau einer Microservice-Architektur. Die einzelnen Microservices bilden gemeinsam eine Applikation. Jeder Microservices kapselt eine eigene Business-Logik inklusive dazugehöriger Datenbank. Untereinander kommunizieren die Module über APIs und/oder über einen Message-Broker. Die Applikation exponiert Schnittstellen über ein Portal für Endkunden oder weitere Consumer.
Ein kritischer Punkt bei der Umsetzung von Microservices ist die Datenhaltung. Der Grundgedanke ist eine konsequente Kapselung der Daten mit der Geschäftslogik, die auf den Daten operiert. Jeder Microservice muss seine eigenen Daten verwalten, die er zum autonomen Funktionieren benötigt. Konkret sollte jedes Modul einen eigenen, komplett unabhängigen Datenspeicher betreiben. Je nach Granularität und Komplexität der Architektur sowie dem Umfang des Systems ist das konsequente Verfolgen dieses Patterns in der Praxis eine Herausforderung.
Um dem zu begegnen gibt es deshalb verschiedene Variationen von Ansätzen, auf die in dieser dreiteiligen Blogserie eingegangen wird.
Bei der Wahl des geeigneten Modells für die Umsetzung der Datenhaltung in einer Microservices-Architektur sollte das CAP-Theorem zu Rate gezogen werden. CAP steht für:
Das CAP Theorem besagt, dass sich die drei Faktoren Konsistenz, Erreichbarkeit und Partitionstoleranz in einem verteilten System nicht gleichzeitig vollständig erfüllen lassen. Der Fokus kann also immer nur auf zwei der drei Faktoren gelegt werden. Die Schwierigkeit hier klug zu priorisieren begleitet einen ständig.
Der Faktor der Ausfall-Toleranz (P) sollte in jedem Fall erfüllt sein, da Latenzen aufgrund von Kommunikationsproblemen auf einem Netzwerk häufig auftreten. Eine gute Lösung ist also eine Kombination aus Partition Tolerance und einem weiteren Faktor. Beim Entwurf des Systems sollte sehr genau evaluiert werden, ob ein Microservice eher Hochverfügbarkeit (AP) oder Datenkonsistenz (CP) erfüllen sollte.