Was ist ein Microservice?
In der Softwareentwicklung setzen sich Microservices immer mehr durch. Das liegt unter anderem daran, dass Microservices gut skalieren und den Umgang mit Komplexität erleichtern. Doch was ist eigentlich ein Microservice? Und was muss ein Systems Architect darüber wissen?
Microservice als Black Box
Ein Microservice ist ein Softwaredienst, der über eine sauber definierte Schnittstelle angesprochen wird, nicht mehr und nicht weniger. Damit ist ein Microservice ein Entwurfsmuster. Über Microservices gibt es viele Missverständnis. Konkret ist ein Microservice folgendes nicht:
- Keine Architektur: Ein Microservice kann zwar eine wichtige Rolle bei der Umsetzung einer Architektur spielen, ist aber eher taktisch (also als Entwurfsmuster) zu verstehen.
- Nicht automatisch web- oder REST-basiert: Webtechnologien, zu denen auch REST gehört, sind zwar weit verbreitet. Es gibt aber auch andere Möglichkeiten, Microservices umzusetzen.
- Nicht automatisch Container-Basiert: Oft werden Microservices „containerisiert“ (bspw. mit Docker), das ist aber keine Voraussetzung.
- Nicht automatisch zustandslos: Es ist zwar empfehlenswert, die Dienste zustandslos umzusetzen. Das ist jedoch keine Voraussetzung für einen Microservice.
Das Microservices allerdings oft mit diesen Punkten assoziiert werden liegt daran, dass es sich um nützliche Konzepte handelt:
- Ein Microservices grenzt die möglichen Architekturen stark ein. Oder anders gesagt: Microservices sind ein Entwurfsmuster für Architekturen.
- Für die Schnitstellen wird irgendein Protokoll benötigt. Neben REST ist GraphQL eine nützliche Abstraktion, mit der die Evolution von Schnittstellen wesentlich besser beherrschen lässt. Auch RCP aus den 1990ern ist ein mögliches Schnittstellenprotokoll. Hier ist ein Artikel zu drei REST-Alternativen.
- Container-Technologien haben zunächst sehr wenig mit Microservices zu tun. Bei der Containervirtualisierung geht es zunächst darum, besser mit Abhängigkeiten umzugehen. Das ist dann lediglich ein weiterer Beitrag zur Robustheit.
- Ebenso machte es Microservices robust, wenn diese Zustandslos sind. Das vereinfacht das Testen drastisch. Und nicht nur das: Kombiniert mit der Containervirtualisierung können damit Systeme wesentlich einfacher hochskaliert werden. Da (fast) jedes System auch Daten speichern muss, gibt es zumindest einige Dienste mit Zustand, wie zum Beispiel eine Datenbank.
Skalieren mit Microservices
Als Systems Engineers verstehen wir das Konzept der Kapselung. Ein Microservice ist eine „Black Box“, die lediglich über dessen Schnittstelle definiert ist. Das hat eine gewisse Verwandschaft mit der objektorientierten Programmierung. Doch es gibt zwei wichtige Unterschiede. Zum einen läuft ein Microservice in einem eigenen Prozess. Das bedeutet, dass ein Crash eines Microservices nicht das ganze System lahmlegt.
Zum anderen lassen sich Microservices in der Regel viel leichter skaliert. Wenn der Microservice zustandslos ist, dann kann das System bei Bedarf einfach mehr Microservices starten. Wenn das nicht möglich ist, dann kann zumindest ein ressourcenhungriger Microservice auf leistungsfähiger Hardware laufen.
Microservices für Systems Engineers
Zur Zeit begegnen uns Microservices primär in der Infrastruktur: Wenn ein Fahrzeughersteller beispielsweise alle Fahrzeuge vernetzen möchte, dann muss die Plattform skalieren können. Zum Beispiel sind heute (2021) zugelassene VW auf deutschen Straßen. Je nachdem, was die Plattform leistet, könnte Robustheit sicherheitsrelevant sein. Hier bietet sich eine Architektur basierend auf Microservices an.
Eine ganz neue Anwendung ist der Einsatz von Microservices im Produkt selbst. Während konventionelle Autos aus einem Netzwerk von dutzenden von Steuergeräten bestehen, hat Tesla lediglich ein einziges. Vermutlich basiert dieses eine System auf Microservices. Lesenswert in diesem Zusammenhang ist das Paper Microservice Architectures for Advanced Driver Assistance Systems: A Case-Study.
Fazit
Letzten Endes sollte ein Systems Engineer schnell das Konzept von Microservices verstehen, es ist kein Hexenwerk. Dennoch ist jetzt ein guter Zeitpunkt, sich mit dem Thema auseinanderzusetzen: Schließlich werden Systeme immer softwarelastiger und immer vernetzter. Und da Steuergeräte auch immer leistungsfähiger und günstiger werden, wird es auch immer mehr Gelegenheiten geben, Microservices einzusetzen.