Erfahre im Video auf welche Weise Microservices geschnitten werden können und welche Auswirkungen der Schnitt auf die Architektur hat.
Microservices Frameworks
Von: Thomas Bayer
Datum: 10. Okt. 2019
1. Cloud Features
Jeder einzelne Microservice benötigt in der Regel einige der hier aufgeführten Features.
Konfiguration
Services müssen mit Konfigurationswerten abhängig von der Umgebung z.B. Entwicklung, Test oder Produktion versorgt werden. Es könnte auch erforderlich sein, die Konfiguration im laufenden Betrieb zu ändern.
Health Check
Der Health Check gibt Auskunft über die Einsatzbereitschaft eines Services. Bevor ein Service sich „gesund“ meldet, sollte der Service die Verfügbarkeit seiner Ressourcen und die Einsatzbereitschaft seiner Abhängigkeiten überprüfen. Zu den Abhängigkeiten zählen u.a. die Datenbankverbindung oder die Verfügbarkeit der Services, die vom Microservice aufgerufen werden.
Service Discovery
In der Cloud haben Services nicht immer dieselbe IP-Adresse oder Port-Nummer. Das Service Discovery erlaubt einem Service andere Service zu finden, um diese aufzurufen. Service Discovery kann z.B. über eine Registry oder über Proxy Server ( API Gateways) realisiert werden.
Fault Tolerance
Services oder das Netzwerk können ausfallen. Kann ein Service damit umgehen, ist er „Fault Tolerant“. Diese Eigenschaft kann z.B. mit der Wiederholung von gescheiterten Aktionen z.B. Service Aufrufen und mit alternativen Aktionen und Defaultwerten erzielt werden.
Monitoring und Metriken
Je mehr Services betrieben werden, desto schwieriger wird es, Kennzahlen zu Betrieb und der Ressourcennutzung zu bekommen. Mit der Monitoring Funktionalität wird die Anbindung an ein zentrales Monitoring System und Dashboard erleichtert. Ein im Microservices Umfeld beliebtes Monitoring System ist Prometheus in Verbindung mit Grafana als Dashboard Lösung.
Tracing
Mit dem Tracing können Service Aufrufe auch über Servicegrenzen hinaus nachverfolgt werden. Beispiele für Tracing Lösungen sind Zipkin und Jaeger.
Security
Microservices stellen erhöhte Anforderungen an die Sicherheit. Für die Verschlüsselung genügt es nicht, wie beim Monolithen ein Zertifikat auf dem Server abzulegen. Es kann erforderlich sein, auf jedem einzelnen Service ein Zertifikat einzurichten. Weitere Anforderungen sind Authentifizierung, Autorisierung oder die Weitergabe der Identität des Aufrufers.
Log Aggregation
Die zentrale Zusammenführung und Auswertung von Logeinträgen ist bei Microservices ein absolutes Muss. Das Durchsuchen von dutzenden Logdateien, die in Docker Containern verstreut sind, ist nicht praktikabel. Log Features unterstützen das Abziehen der Logeinträge und die Übergabe an einen zentralen Logdienst.
Die aufgezählten Features kommen oft für Microservices zum Einsatz. Darüber hinaus gibt es noch weitere Features, die die Frameworks anbieten. Meist kommen nicht alle, sondern nur ein Teil der Features in einem Service zur Anwendung.
2. Deployment
Die Installation und der Betrieb eines Microservices müssen isoliert durchgeführt werden können. Anstatt eines Application Servers verwendet man bei den Microservices z.B. Container, virtuelle Maschinen oder isolierte virtuelle Java Maschinen.
2.1 Self-Contained Applications und Fat Jars
Ein „dickes“ Jar ist ein Java Archiv, bei dem der Application Server bzw. Web Container samt allen notwendigen Bibliotheken ins Archiv integriert werden. Die Anwendung hat so immer ihre Laufzeitumgebung dabei. Fat Jars sind mit ca. 20 bis 100 Mbytes wesentlich größer als Anwendungen für Application Server. Dafür gestaltet sich der Betrieb einfacher und ist besser mit DevOps Prinzipien umsetzbar. Außer einer virtuellen Maschine wird keine weitere Software für die Ausführung benötigt.
2.2 Container und Cloud Support
Prinzipiell kann fast alles im Container laufen. Die Frameworks unterstützen z.B. mit generierten Dockerfiles, Fat Jars oder der Graal VM den Betrieb im Container.
3 Was ist ein Microservices Framework?
Microservices Frameworks erleichtern die Implementierung der obigen Features und unterstützen Deployments wie Fat Jar und Container.
Die Basis für die Frameworks Spring Boot bzw. Cloud, „Microprofile“ und Micronaut für die Java Plattform bildet die Dependency Injection, bei der Komponenten flexibel verbunden werden können.
Für die Service zu Service Kommunikation enthalten die Frameworks REST API Clients, die sich mit den Funktionen Retries, Failover oder Circuit Breaker kombinieren lassen.
3.1 Microservices Frameworks
Microservices sind nicht auf eine Programmiersprache oder Plattform festgelegt. Eine Stärke der Micoservices ist es, verschiedene Technologien und Sprachen gleichzeitig einsetzen zu können. Dennoch kann die Wahl einer Plattform entscheidenden Einfluss auf die Entwicklung und den Betrieb von Microservices haben. Microservices erfordern spezifische Eigenschaften wie Ausfallsicherheit, Cloud Support oder Monitoring, die von der Plattform unterstützt werden können. Frameworks können helfen, diese Eigenschaften schnell und effizient umzusetzen. So kann die Entscheidung für ein Framework sogar wichtiger sein, als die Entscheidung für eine Plattform oder Programmiersprache.
4 Vor- und Nachteile
Die Verwendung eines Frameworks für die Entwicklung von Microservices bringt die folgenden Vor- und Nachteile mit sich.
Vorteile
- Die Entwicklung eines Service geht wesentlich schneller, da der Programmierer sich auf die eigentliche Funktionalität konzentrieren kann.
- Der Code eines Services ist kürzer
- Die Bereitschaft für die Cloud kann schneller erreicht werden
- Es muss kein Infrastrukturcode selbst entwickelt werden.
Nachteile
- Die Frameworks erfordern eine Einarbeitung und bringen einige Konzepte mit, die verstanden werden müssen.
- Die Frameworks arbeiten alle mit „Magie“, die Funktionalität hinzufügt, ohne dass der Entwickler gefragt wird. Oft wissen Entwickler nicht genau was passiert und geben Kontrolle ab.
- Die Frameworks sind auf zahlreiche Bibliotheken verteilt, die alle ihre eigenen Versionsnummern mitbringen. Dies führt oft zu Versionsproblemen und mühseliger Fehlersuche.
5 Fazit
Spezielle Frameworks sind für die Entwicklung und den Betrieb von Microservices nicht nötig. Die Frameworks erleichtern aber erheblich die Entwicklung von Cloud fähigen Microservices. Wenn mehr als 3 Services zu entwickeln sind, lohnt sich der Einarbeitungsaufwand für ein Framework.