Übersetzung und Anpassung von Java Microservices: Ein praktischer Leitfaden . Link zum ersten Teil des Leitfadens . Jedes serverseitige Java-Programm und damit jeder Microservice ist lediglich eine Datei mit der Erweiterung .jar oder .war. Es gibt eine großartige Sache am Java-Ökosystem bzw. der JVM: Sie müssen Java-Code nur einmal schreiben und er kann auf fast jedem Betriebssystem ausgeführt werden, solange Sie Ihren Code nicht mit einer neueren Java-Version als Ihrem kompiliert haben Ziel-JVM-Version. Dies ist wichtig zu verstehen, insbesondere wenn es um Themen wie Docker, Kubernetes oder (Trommelwirbel!) Die Cloud geht. Warum? Schauen wir uns verschiedene Bereitstellungsszenarien an.
Beispiel für eine minimalistische Java-Microservice-Bereitstellung
Fahren wir mit dem Bankbeispiel fort. Wir haben also eine monobank.jar-Datei (Monolith) und unsere neu extrahierte riskengine.jar (den ersten Mikroservice zur Risikoprüfung). Nehmen wir außerdem an, dass beide Anwendungen, wie jede andere Anwendung auf der Welt, eine .properties-Datei benötigen. In unserem Fall enthält es nur die Datenbank-URL und die Anmeldeinformationen. Eine minimale Bereitstellung könnte aus zwei Verzeichnissen bestehen, die etwa so aussehen: Erstens:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Zweite:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Damit bleibt die Frage offen: Wie gelangen die .properties- und .jar-Dateien auf den Server? Leider kann es viele Antworten geben.
So verwenden Sie Build Tools, SSH und Ansible zum Bereitstellen von Java Microservices
Langweilige, aber nicht minder hervorragende Ratschläge zur Bereitstellung von Java-Microservices ... Eigentlich genau so, wie Systemadministratoren in den letzten 20 Jahren jedes Java-Serverprogramm in Unternehmen bereitgestellt haben. Das ist die Mischung:- Ihr Lieblings-Build-Tool (Maven, Gradle)
- gutes altes SSH/SCP zum Kopieren von .jars auf Server
- Bash-Skripte zum Verwalten von Bereitstellungsskripten und Servern
- oder noch besser: einige Ansible-Skripte.
So verwenden Sie Docker zum Bereitstellen von Java-Microservices
Kehren wir zurück zur süßen Qual der Wahl. Vor ein paar Jahren kam Docker auf den Plan und damit auch die Containerisierung. Wenn Sie noch nie damit gearbeitet haben, finden Sie hier eine kurze Beschreibung für Endbenutzer und Entwickler:- Ein Container (vereinfacht) ähnelt der guten alten virtuellen Maschine, ist aber „leichter“. Wenn Sie sich nicht sicher sind, was „einfacher“ in diesem Zusammenhang bedeutet, lesen Sie bitte diese Antwort auf Stackoverflow .
- Der Container garantiert seine eigene Tragbarkeit. Das heißt, es funktioniert überall. Kommt Ihnen bekannt vor, nicht wahr?
- Bündeln Sie Ihre JAR-Datei in einem Docker-Image
- Schieben Sie dieses Image in eine private Docker-Registrierung
- Ziehen Sie dieses Image herunter und führen Sie es auf Ihrer Zielplattform aus
- Oder kopieren Sie das Docker-Image direkt auf Ihr Produktionssystem und führen Sie es aus.
So verwenden Sie Docker Swarm oder Kubernetes zum Bereitstellen von Java-Microservices
Nehmen wir an, Sie entscheiden sich, Docker auszuprobieren. Jedes Mal, wenn Sie einen Java-Microservice bereitstellen, erstellen Sie ein Docker-Image, das Ihre .jar-Datei bündelt. Nehmen wir an, Sie verfügen über einige dieser Java-Microservices und möchten diese Services auf mehreren Computern (in einem Cluster) bereitstellen. Es stellt sich die Frage: Wie verwaltet man diesen Cluster? Docker-Container ausführen, Leistung prüfen, Updates bereitstellen, System skalieren (brrr)? Zwei mögliche Antworten auf diese Frage sind Docker Swarm und Kubernetes. Auf beide Optionen im Detail einzugehen, würde dieses ohnehin schon lange Tutorial zu lang machen, aber wir halten es für wichtig zu erwähnen, dass beide Optionen letztendlich davon abhängen, dass Sie YAML-Dateien schreiben (siehe Yaml-Einrückungsgeschichten ), um Ihren Cluster zu verwalten. Wenn Sie wissen möchten, welche Gefühle das in der Praxis hervorruft, geben Sie einfach eine ähnliche Suchanfrage in die Twitter-Suche ein. Der Bereitstellungsprozess für Ihre Java-Microservices sieht nun etwa so aus:- Konfigurieren und Verwalten von Docker Swarm/Kubernetes
- Alle Schritte für Docker (siehe oben)
- Schreiben Sie YAML und führen Sie es aus
, bis Ihnen die Augen bluten,bis alles funktioniert.
So testen Sie Java-Microservices
Nehmen wir an, Sie entscheiden sich für die Implementierung von Microservices in der Produktion. Wie können wir die N-Microservices-Integration jetzt während der Entwicklung testen? Wie können Sie sehen, ob der gesamte Workflow funktioniert und nicht nur Teile davon? In der Praxis können Sie eine von drei Methoden verwenden:- Mit ein wenig Aufwand (wenn Sie Frameworks wie Spring Boot verwenden) können Sie alle Ihre Microservices in einer Startklasse kombinieren und alle Microservices mit einer einzigen Wrapper.java-Klasse laden – je nachdem, ob auf Ihrem Computer genügend Speicher dafür vorhanden ist Führen Sie alle Ihre Microservices aus.
- Sie können Docker Swarm- oder Kubernetes-Einstellungen lokal kopieren.
- Führen Sie Integrationstests einfach nicht mehr lokal durch. Stellen Sie stattdessen eine dedizierte DEV/TEST-Umgebung bereit. Dies ist etwas, was viele Teams tatsächlich tun, wenn sie den Schmerzen lokaler Microservice-Setups erliegen.
GO TO FULL VERSION