Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

t3n 45

Die Minions der Softwareentwicklung: Wie Microservices funktionieren und was sie leisten

Seite 2 / 3

Üblicherweise ist in einer Microservice-Architektur jeder Service selbst für seine eigene Datenhaltung zuständig. Statt „der“ zentralen Datenbank gibt es in einer Microservice-Architektur somit viele verschiedene Datenquellen. Dies mag auf den ersten Blick nicht gerade intuitiv sein, da sich augenscheinlich die Komplexität des Systems erhöht. Würden jedoch mehrere Services eine gemeinsame Datenbank nutzen, wäre dies eine versteckte Abhängigkeit der Services untereinander. Vorzugsweise sollten jedoch alle Abhängigkeiten der Services untereinander explizit über APIs ablaufen und jeder davon für seine eigene Datenhaltung verantwortlich sein. Nur auf diese Weise ist jeder Service tatsächlich unabhängig von den anderen und kann die jeweils optimale Art der Datenspeicherung nutzen.

Um eine externe API anbieten zu können (die dann beispielsweise von Mobil-Applikationen, externen Partnern oder auch eigenen Anwendungen genutzt werden können), erfolgt der externe Zugriff auf die APIs einer Microservice-Architektur üblicherweise über ein Gateway. Dieses stellt eine einheitliche Schnittstelle für alle Services zur Verfügung und ermöglicht die Übernahme von Querschnittsaufgaben wie beispielsweise Authentifizierung für externe Nutzer, Protokollierung und Rate-Limiting.

Komplexität managen

Der Vorteil dieses Ansatzes: Jeder einzelne Service hat einen überschaubaren Funktionsumfang und keine besondere Komplexität. Dies kommt der Test- und Wartbarkeit der einzelnen Komponenten zugute. Als Softwarearchitekt oder -entwickler darf man sich jedoch nun nicht dem Trugschluss hingeben, dass sich auf diese Weise die Komplexität des Gesamtsystems reduzieren lässt. Insgesamt erhöht sich die Gesamt-Komplexität des Systems innerhalb einer Microservice-Architektur eventuell sogar, da häufig viele verschiedene Technologien zum Einsatz kommen und die Auslieferung der Software zwar pro Service einfacher, in Summe jedoch komplexer wird. Durch die Kommunikation über Netzwerke kommen zudem weitere Fehlerquellen hinzu, die bei der Gestaltung des Systems entsprechend zu berücksichtigen sind.

Diesem Komplexitätsanstieg lässt sich durch den konsequenten Einsatz von Automatisierung entgegengewirken. Geeignete Werkzeuge können den kompletten Lebenszyklus eines Microservice vom Kompilieren, Paketieren (beispielsweise in Container-Images), Testen bis hin zur Auslieferung so weit automatisieren, dass eine kontinuierliche Auslieferung von Software möglich ist. Infrastruktur sollte, soweit möglich, in Form von Quelltext abgebildet und über Konfigurationsmanagementsysteme im Soll-Zustand gehalten werden – auf diese Weise funktioniert das Ausrollen von Infrastruktur-Änderungen vollkommen automatisch.

Häufige Herausforderungen bei Microservices

Schnittstellen

Das Kernstück eines jeden Microservices ist seine externe API, über die andere Services oder externe Nutzer ihn ansprechen können. Als De-facto-Standard hat sich hier das Programmier-Paradigma RESTful HTTP herauskristallisiert.

Um die Entwicklung schlanker REST-Webservices zu unterstützen, haben sich in zahlreichen Sprachen so genannte Micro-Frameworks entwickelt. Diese erlauben es, mit nur wenigen Zeilen Code vollwertige REST-Services zu implementieren, und kommen ohne den Konfigurationsaufwand „großer“ Full-Stack-Frameworks wie Symfony (PHP) oder Spring (Java) aus. Nennenswerte Micro-Frameworks sind beispielsweise die Slim- und Silex-Frameworks (PHP), Express (Node.JS) oder Spark (Java).

Bitte beachte unsere Community-Richtlinien

Schreib den ersten Kommentar!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden