Microservices

Klein und fein in die Cloud

Microservices sind kleine, unabhängige Module, die sich vor allem dadurch auszeichnen, dass sie genau eine bestimmte Aufgabe erledigen. Im Gegensatz zu monlithischen Systemen sind sie dadurch leichter verständlich bzw. zu erfassen. Da ihr Scope per Definition begrenzt ist, sind Microservices leichter testbar.

Der Microservice-Ansatz passt auch ins Bild, wenn es um DevOps geht; denn die Aufteilung aller Aufgaben der Gesamtvision kann von mehreren unabhängigen Teams durchgeführt werden. So werden Microservices oftmals getrennt versioniert und in Betrieb gesetzt (deployment) und in getrennten Versionsmanagement Systemen/Repositories gehalten.

Meistens werden Microservices darauf angelegt, stateless zu sein. Dadurch kann einfach skaliert werden, indem der gleiche Service mehrfach in Betrieb gesetzt wird. Und fällt ein Service aus, dann übernimmt der nächste.

In der Produktionsumgebung kommen Microservices nicht allein daher, der Begriff fällt häufig im Zusammenhang mit "serverless"-Ansätzen, Docker sowie zentralisiertem Logging.

Bei der Frage, wie aus einem komplexen Systementwurf viele kleine Services entstehen, kann Domain-Driven Design (DDD) dem Team helfen, auf den ersten Blick monolithische Strukturen in kleine, verständliche Domänen aufzuteilen.

Manchmal muss das Microservice-Ensemble orchestriert werden, um gemeinsam größere Aufgaben zu erledigen. Dazu eignen sich zum Beispiel Business Process Engines wie Camunda.

Bei andrena interessieren wir uns aus mehreren Gründen besonders für den Microservice-Ansatz. Zunächst erleichtern sie es, DevOps Teams in genau der angemessener Größe zu formieren, auch bei größeren Produktvisionen. Außerdem sind sie aufgrund ihrer Test- und Skalierbarkeit geeignet, das Gesamt-System robuster zu machen und damit insgesamt die Service-Qualität zu erhöhen.

Bastian Feigl, Softwareentwickler

"Um die Komplexität verteilter Systeme zu beherrschen, ist der Fokus auf eine hohe Qualität besonders wichtig:

Eine saubere Trennung der Fachlichkeit in möglichst unabhängige Domänen legt den Grundstein für ein gut wartbares Microservice-System. Je weniger die Services voneinander abhängen, desto robuster ist das Gesamtsystem und desto besser lassen sich die Services unabhängig voneinander entwickeln. Extrem wichtig ist auch ein tragfähiges Netz für jeden Service aus automatisierten Tests nach dem Prinzip der Testpyramide. Automatisierte Schnittstellen- und Integrationstests zwischen den Services helfen dabei, unliebsame Überraschungen beim Deployment zu vermeiden."

 

Artikel zum Download
Best Practices für die Cloud-Entwicklung

 

Vorträge und Workshops (Links zu externen Seiten)