Microservices: Mit Eclipse MicroProfile zu leichtgewichtigen verteilten Java EE Microservices (Teil 2)
Mit Eclipse MicroProfile steht ein Quasistandard zur Verfügung, der die Implementierung von Microservices erheblich vereinfacht, ohne den bewährten Java-EE-Standard aufzugeben.
Microservice-Architektur im Java-EE-Umfeld
Um monolithische Strukturen zu vermeiden, ist es naheliegend, die Themen fachlich passend zu schneiden und auf einzelne Self-Contained-Systems- Microservices (SCS-Microservices) zu verteilen. Mit Domain-Driven-Design (DDD) gelingt dies. DDD bietet mit Bounded Context ein Konzept, um Fachdomänen voneinander abzugrenzen. Hinzu kommt, dass die Entwickler und die Fachabteilungen intensiver zusammenarbeiten (müssen), um die Microservices passend schneiden zu können. Die Fachlichkeit rückt in den Vordergrund und die Technik eher in den Hintergrund. Ein Microservice soll so klein sein, dass bei Änderung der Fachlichkeit dieser kann durch eine Neuimplementierung ausgetauscht werden kann ohne zeitaufwendige Test- und Refactoring-Runden.
Um die Abhängigkeit der Microservices zu minimieren, wird jeder Microservice auf einem eigenen Application Server betrieben. Die Kommunikation der Services untereinander wird über das Netzwerk betrieben.
Dieses Vorgehen hat aber den Nachteil, dass der Overhead (ein kompletter Application Server) pro Service sehr groß ist, da nicht jeder Service alle Komponenten aus dem Application Server benötigt. Es entsteht außerdem ein hoher Aufwand für Systemkonfiguration, Deployment und Management der einzelnen Services. Hinzu kommt der Aufwand für das Monitoring der vielen Server/Services. Da jeder Service auf einem eigenen Application Server läuft, braucht jeder Service/Application Server eine eigene Konfiguration, u.a. Netzwerkeinstellungen (IP und Port für den eigenen Service und IPs und Ports für die Services, mit dem er kommuniziert), ein eigenes Deployment und seine eigenen Logging- und Monitoring-Einstellungen.
Um all diese Herausforderungen zu meistern, wurde das Eclipse MicroProfile gegründet. Die Idee dahinter ist, einen abgespeckten Application Server (ohne Overhead) betreiben zu können und APIs bereitzustellen, die die Herausforderungen der Pflege und Überwachung der verteilten Server/Services vereinfachen.
Eclipse MicroProfile APIs
Im Java-EE-Umfeld gibt es schon viele erprobte Konzepte, um Software modular zu gestalten, wie beispielsweise CDI. Allerdings fehlen Konzepte, die speziell auf verteilte Systeme und ihre Anforderungen zugeschnitten sind. Hierfür wurden die Eclipse MicroProfile APIs entwickelt (siehe Abbildung 3).
Durch den Einsatz von JAX-RS und JSON-P kann die Kommunikation zwischen den einzelnen Services über REST-Schnittstellen im JSON-Format umgesetzt werden.
Um die einzelnen Services an die jeweilige Umgebung (Dev, Test, Prod) von außjen anpassen zu können, wurde die Config-API eingeführt.
Die Konfiguration der einzelnen Services wird durch den Einsatz der Config-API erleichtert. So können Konfigurationen auf unterschiedlichen Ebenen eingesetzt werden. Die Reihenfolge ist wie folgt:- System.getProperties()
- System.getenv()
- META-INF (microprofile-config.properties-Dateien, die im ClassPath liegen)
Die nächsten Themen
diskutiert:
- Long Running Actions
- Reactive Streams
- Reactive Events
- Data Access
- Event Data
Fazit
- Java EE ist ein Standard, Komponenten können von mehreren Herstellern eingesetzt werden. Die Abhängigkeit zu einem Hersteller wird vermieden.
- Der Standard ist gut dokumentiert.
- Es gibt viele Entwickler, die Erfahrung in der Verwendung dieses Standards haben.
- Der Standard ist stabil – Abwärtskompatibilität ist gewährleistet. Release-Zyklen sind in der Regel größer als ein Jahr, Ausnahme: kürzere Release-Zyklen für Eclipse MicroProfile.
- Java-EE-Lösungen sind schon lange am Markt (> 15 Jahre).
Glossar
Domain-Driven-Design (DDD)
DDD wurde 2003 von Eric Evans in seinem gleichnamigen Buch geprägt. Dabei wird die Modellierung von Software im Wesentlichen von den umzusetzenden Fachlichkeiten der Anwendungsdomäne beeinflusst.
Enterprise Application Archive (EAR)
EAR ist ein Dateiformat, welches alle Programm- und Konfigurationsdateien enthält, um eine Applikation auf einem Applikationsserver betreiben zu können.
Java Enterprise Edition (Java EE)
Java EE ist eine Sammlung von Spezifikationen, um Anwendungen auf herstellerunabhängigen Applikationsservern betreiben zu können.
Monolithen
Von einer monolithischen Software Architektur (Monolith) ist die Rede, wenn die funktionalen Elemente in einem einzigen, untrennbaren sowie homogenen Gebilde miteinander verbunden sind.
Links/Quellen
Seminarempfehlung: Softwarearchitekturen - https://seminare.ordix.de/seminare/entwicklung/allgemeines/softwarearchitekturen.html
Produktseite Eclipse-Microprofile-Projekt - https://microprofile.io
Hystrix-Bilbliothek - https://github.com/Netflix/Hystrix
Kubernetes Produktseite - https://kubernetes.io/
Produktseite Consul Software - https://www.consul.io/discovery.html
Senior Chief Consultant bei ORDIX.
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare