magmac83 - Fotolia
Diese Tools helfen beim Aufbau von Microservices in Java
Je nach Ziel müssen Entwickler ihre Tool-Auswahl auf einen der zwei Pfade für Java-Microservices abstimmen. Die beiden Ansätze und zugehörige Tools im Überblick.
Um Microservices in Java zu entwickeln, gibt es zwei grundlegende Wege. Der erste Weg verwendet Microservices als Teil eines Java-basierten Web-Frontend-Entwicklungsprozesses, bei dem die Microservices das Webserververhalten ergänzen. Der zweite Ansatz nutzt Java, um Microservices zu entwickeln, die sich als Komponenten in Anwendungen integrieren lassen.
Der Frontend- und Backend-Ansatz erfordert jeweils unterschiedliche Tools, um das jeweilige Ziel zu erreichen. Java-Entwickler sollten beide Ansätze verstehen. Außerdem sollten sie die Tools, die der jeweilige Ansatz benötigt, unter die Lupe nehmen, um den passenden Ansatz für sich zu finden.
Tools für den Frontend-Ansatz
Viele Java-Microservices-Entwickler, die an Frontend-Anwendungen arbeiten, entwickeln mit Tools wie Maven und Spring Boot. Diese Tools schaffen in Kombination eine Umgebung, die sich für Builds und Deployment verwenden lassen. Tools wie Tomcat, Jetty, Netty, Grizzly und Undertow können Entwicklern ebenfalls helfen, Microservices für Java zu entwickeln. Diese Optionen funktionieren jedoch am besten, wenn die Java-Entwicklung eng mit Webservern und Anwendungs-Frontends integriert ist.
Bei Frontend-Microservices ist das gemeinsame Thema die Integration von Microservices und Webservern. Alle Werkzeuge, die mit Frontend-Microservices verbunden sind, verwalten Webaktivitäten und Microservices in einem gemeinsamen Framework. Die Microservices werden zu skalierbaren Elementen des Webserver-Supports für Anwendungen. Dieser Ansatz funktioniert, solange alles auf einem Webserver basiert.
Spring Cloud ermöglicht wiederum Spring Boot Java Microservices über die Cloud. Die Anwendung enthält Open Source Skalierungs- und Überwachungs-Tools und ist die passende Antwort für Java-Entwickler, die webbasierte Frontends mit Microservices erzeugen möchten.
Tools für den Backend-Ansatz
Es gibt noch eine weitere Entwicklung von Microservices, die Backend-Bereiche von Anwendungen erzeugt und sich nicht in Webserver integriert. Java Microservices eignen sich für diesen Ansatz. Entwickler müssen sich allerdings weniger mit der Website befassen und stattdessen auf allgemeine Komponententechniken konzentrieren.
Für die allgemeine Entwicklung von Microservices ist Java-Code genauso portabel wie die Java Virtual Machine (JVM). Das bedeutet, dass man Microservices in Java an Bare Metal, virtuelle Maschinen (VM) oder Container anpassen kann, ohne den Code zu ändern. Das bedeutet jedoch, dass man die automatische, integrierte Skalierung und Bereitstellung von Spring Boot und Spring Cloud verliert.
Dies ist beim Testen wichtig, da die Entwickler in der gleichen Umgebung testen müssen, in der das Deployment stattfindet. Java-Entwickler, die diesen Ansatz verfolgen, müssen überlegen, wie sie die Microservices hosten und die erforderlichen Orchestrierungswerkzeuge festlegen.
Das Deployment beginnt mit einem API Gateway
Die Bereitstellung von Java-Microservices in einer traditionellen Hosting-Umgebung beginnt mit einem API Gateway. Ein API Gateway verwendet eine Brokerage-Technik ähnlich den Storefront Design Patterns. Es akzeptiert eine einzelne umfassende Anfrage eines Benutzers und zerlegt diese in separate Microservices-Aufrufe. Ein Microservice-API-Broker muss jedoch auch den Lastausgleich zwischen den Instanzen skalierbarer Microservices vornehmen. Es muss wahrscheinlich mit anderen Technologien integriert werden, um diese Skalierung zu ermöglichen.
Man kann ein API Gateway mit JVM-Tools wie JBoss Undertow erstellen, oder außerhalb von JVM mit Node.js oder Nginx. Man kann die Storefront-Logik auch in eine Workflow-Verteilungsstruktur wie Istio oder in eine Data-Plane-Struktur wie Juke integrieren.
Storefront Designs, die einen asynchronen Callback nach Abschluss des Services beinhalten, erzeugen jedoch komplexen Code, wenn es Abhängigkeiten zwischen verwandten Microservices gibt. Wenn man Code mit deklarativen Abstraktionen schreibt, wie bei der reaktiven Programmierung, entwirrt dies die Abhängigkeitsbeziehungen. Java 8 bietet hierfür Tools, und RxJava ist sowohl für JVM als auch für Node.js verfügbar.