Mit Microservices Komplexität beherrschen

Von Lukas Engel am 05.02.2019

Wir setzen seit vielen Jahren auf Microservices, gerne erläutern wir in unserem Erfahrungsbericht weshalb:

Im Jahre 2012 durften wir für ein international tätiges Grossunternehmen eine Software entwickeln, welche diverse Managementfunktionen im Bereich von Active Directory und Microsoft Exchange automatisiert.

In den Monaten zuvor sammelten wir aufgrund einer Masterarbeit Informationen über Serviceorientierte Architekturen. Beim Design der Software-Architektur für die neue Lösung entstand deshalb die Idee, die Software nicht als ein Ganzes („Monolith“) zu entwickeln, sondern die Funktionalitäten auf verschiedene Web Services zu verteilen. Zu diesem Zeitpunkt war Windows Communication Foundation (WCF) die Technologie von Microsoft, um Serviceorientierte Applikationen zu erstellen.

Wir entwickelten demzufolge viele WCF Services, die spezifische Features abdecken. Das Design der Services war in diesem Zusammenhang wichtig: Diese durften nicht zu gross, aber auch nicht zu klein sein. Das bedeutet, wir mussten vermeiden, dass ein einzelner Service wieder zu einem Monolith wurde. Andererseits durfte ein Service auch nicht zu klein sein, da dies wiederum die Komplexität zwischen den Services erhöhte. Wir überlegten uns deshalb genau, welche Business-Funktionen die einzelnen Services anbieten sollen und gestalteten diese dementsprechend.

Aufgrund langjähriger Erfahrung mit diesen Services sind wir überzeugt, dass dies die richtige Architektur für viele Applikationen ist. Die Komplexität der Software kann somit auf verschiedene Services verteilt werden. Dies macht es einfacher, die Software zu entwickeln, zu erweitern und zu unterhalten.

Unsere Identity Management Lösung basiert auf Microservices

2016 starteten wir mit der Entwicklung unserer Identity and Access Management (IAM) Lösung waave. Für uns war klar, dass wir diese ebenfalls mit Web Services erstellen werden. Mittlerweile hatte sich der Begriff Microservices verbreitet, welcher ziemlich genau das abdeckt, was wir mit unseren WCF Services implementiert hatten. Ebenfalls wurde auch REST immer populärer, welches meist auf der HTTP-Technologie basiert und unter anderem die Gestaltung der Interfaces der Services vereinfacht.

Wir entwickelten die Features von waave deshalb als REST Microservices. Dazu definierten wir in einem Konzept zuerst das Design der APIs (URL, HTTP-Methoden, HTTP-Statuscodes für Rückgabewerte etc.). Anschliessend entwickelten wir ein Template, auf dem alle Microservices basieren. So unterscheiden sich die Microservices durch ihre Business-Logik, sehen aber technisch identisch aus.

Mittlerweile haben wir sehr viele Microservices im Einsatz. Die REST API ermöglicht es, sehr einfach Daten mit anderen Systemen auszutauschen. So nutzt beispielsweise das User Interface von waave, welches wir mit Angular und TypeScript entwickelt haben, die ganz normalen REST APIs der waave Microservices. Das bedeutet, dass ein Kunde beispielsweise selbständig ein komplett neues User Interface entwickeln könnte. Ein weiterer sehr grosser Vorteil ist die Interoperabilität mit anderen Systemen. Damit lässt sich waave sehr gut in die bestehende Prozesslandschaft der Unternehmen integrieren.

Microservices eignen sich sehr gut für den Betrieb in einer Cloud Umgebung. Wir nutzen für den Betrieb von waave PaaS-Komponenten (Platform as a Service) von Microsoft Azure. Dies ist für uns die optimale Infrastruktur um Microservices zu betreiben.

Die gesammelten Erfahrungen verstärkten unsere Überzeugung, dass Microservices für viele moderne Anwendungen (insbesondere Cloud-Applikationen) die richtige Architektur sind.