Microservices
Der Begriff Microservice
Unter dem Begriff Microservice versteht man die Aufteilung größerer Systeme in kleinere, handlichere Einheiten. Aber was will man damit erreichen?
- Erhöhung der Flexibilität von Software und bei der Technologieauswahl
- Schnellere Entwicklung durch kleinere Einheiten aber auch weil Entwicklungsteams ihre eigenen Technologien bestimmen können
- Mehr Unabhängigkeit von anderen Microservices, da jeder Microservice für sich gesehen mit der eigenen Ablaufumgebung daherkommt. Die Kommunikation erfolgt dabei über das Netzwerk
Viele Softwareprojekte haben Monolithen hervorgebracht. Das sind Programme die über einen langwierigen Deployment-Prozess aufgrund ihrer Größe und Komplexität von der Entwicklung über Tests hin zu Releaseständen teilweise nur zweimal pro Jahr ausgerollt werden. Neue Features oder notwendige Bugfixes kommen daher nur selten schnell beim Kunden an (schlechter Time-to-Market Aspekt).
Eigenschaften von Microservices
Die Verkleinerung der einzelnen Systeme ist zwar ein integraler Bestandteil von Microservices, jedoch sind folgende Eigenschaften die ein jeder Microservice besitzen muss mindestens genauso wichtig:
- Geeignete Modularisierung der Komponenten und deren Interaktion über gängige Protokolle untereinander
- Jeder Microservice beinhaltet und verwaltet seine eigenen Daten
- Jeder Service läuft in seiner eigenen Ablaufumgebung
- Microservices werden dezentral gemanagt. Voneinander unabhängige Teams entwickeln und verantworten ihren Microservice
- Der gesamte Prozess (Entwicklung, Test, Delivery) ist automatisiert
Weitere Aspekte von Microservices werden hier von Martin Fowler beschrieben.
Wann sollte man Microservices einsetzen?
Microservices eignen sich insbesondere für internetbasierte Systeme. Hierbei sind die hohen Anforderungen an die Flexibilität ausschlaggebend. In der klassischen Anwendungsentwicklung sollte man über Microservices nachdenken, wenn die Entwicklung neuer Features trotz geeigneter Modularisierung und klaren Schnittstellen einfach wegen der schlichten Größe nur schleppend vorankommt.
Nicht einsetzen sollte man Microservices dann, wenn Teams den End-to-End-Gedanken nicht verwirklichen können. Sei es weil die Handover-Mentalität nicht abgeschafft werden kann oder weil die horizontale Trennung zwischen den Abteilungen nicht aufgehoben werden kann. Auch braucht man keine Microservices-Landschaft wenn die Anwendung überschaubar ist und mit einem kleinen Team realisiert wird.