Generelle Frage zu Mikroservices (Spring Boot?), Docker...

internet

Top Contributor
Hallo zusammen,

ich habe eine generelle Frage zur heutigen Applikationsarchitektur.

Aktuell habe ich ein recht großes Projekt aus Basis von JAVA EE, JSF, Hibernate, JPA.
Am Ende des Tages generiere ich durch Maven ein .war - File, welches ich dann auf meinen Applikationsserver (Wildfly) deploye.

Nun gibt es ja seit einigen Jahren "Microservices". Ich habe mich damit noch nicht wirklich beschäftigt.
Ich sehe aber die Vorteile mein bestehendes Projekt in verschiedene "Services" (Bestellverwaltung, Userverwaltung etc.) zu unterteilen.

Nun habe ich hierzu einige Fragen:
- Mit was für einem Aufwand muss ich generell rechnen um ein JAVA EE - Projekt auf Mikroservices zu migrieren?
- Mit welchen Libraries muss ich mich befassen? Ist das dann Spring Boots?
- Im Moment habe ich ein Java Projekt. Brauche ich dann pro Microservice ein eigenes Java Projekt? Oder habe ich (wie heute) ein einziges Projekt, in welchem verschiedene Services sind
- Kann ich Wildfly als Applikationsserver weiter verwenden?
- Benötige ich nun pro Microservice einen laufenden Applikationsserver?
- Gibt es empfehlenswertes Tutorial, um in the Thematik zu kommen?
- Was hat es mit "Docker" auf sich? Was genau ist das? Welche Software benötigt man dazu?
- Was muss man sonst beachten?

Vielen Dank für jede Hilfe
 

Tarrew

Top Contributor
Du solltest beachten, dass Microservices nicht immer die richtige Lösung sind. Hast du echten Bedarf deine Architektur umzustellen? Das könnten sein:
- Skalierungsprobleme
- Schlechte Wartbarkeit
- Verschiedene Teams, die aktuell an gleicher Codebasis arbeiten
- Geringe Zuverlässigkeit
- ...

Wenn nichts davon zutrifft, würde ich mal in Frage stellen, ob eine Microservice-Architektur wirklich sinnvoll ist. Microservices können einige Vorteile haben, aber die Grundarchitektur ist erstmal komplexer, da man typischweise zusätzliche Infrastruktur braucht (Service Discovery, Load Balancer, API-Gateway, ...).

Zu deinen Fragen:
1. Der Aufwand hängt von der Göße des Projektes ab und wie viel Erfahrung du in der Dekomposition hast. Wenn man einen Monolithen schlecht aufteilt, hat man am Ende einen verteilten Monolithen, der keinen Vorteil bringt. Man muss schon drauf achten, dass alle Services maximal voneinander entkoppelt sind (Domain-Driven Design kann da ggf. helfen).
2. Spring Boot ist so der Klassiker, Quarkus sieht man ab und zu auch noch.
3. In der Regel ist jeder Service eigenständig und dementsprechend ein eigenes Projekt.
4. Du kannst Wildfly verwenden, aber Spring Boot kommt mit einem eingebetteten Tomcat, macht Sinn den zu verwenden.
5. Jeder Service hat seinen eigenen Webserver
6. Die Seiten von Martin Fowler und Chris Richardson sind ganz gut, um einen groben Überblick zu bekommen und Pattern nachzuschlagen. Von Sam Newman gibt es auch zwei gute Bücher zum Thema Microservices und Migration eines Monolithen. Ein richtiges "Tutorial" kenne ich jetzt nicht.
7. Docker ist ein Tool, welches die Containerisierung unterstützt. Prozesse laufen isoliert in einem Container in der immer gleichen Umgebung. Dadurch wird z. B. die Portabilität erhöht. Ist insbesondere mit DevOps Praktiken sehr verbreitet und definitiv zu empfehlen.
8. Essenziell ist eine gute Aufteilung der Services. Jeder Service soll eigenständig sein und möglichst eine Sache gut selbst erledigen können. Synchrone Interprozess-Kommunikation nach Möglichkeit vermeiden. Microservices stattdessen lose koppeln (über eines EventBus). Stichwort Kafka, RabbitMQ, ... Jeder Microservice hat seine eigene Datenbank, das bringt einige Herausforderungen mit sich (CAP Theorem). In der Regel hat man deswegen "nur" Eventual Consistency.

Microservices können sehr geil sein, man sollte sich aber gut überlegen, ob sich die steigenede initiale Komplexität für den eigenen Use-Case lohnt.
 

internet

Top Contributor
Vielen Dank schon Mal für die ausführliche Antwort.
Generell ist der Bedarf eher gering bzw. ich weiß nicht, ob es dem Aufwand gegenüber dem Nutzen wirklich gerecht wird.

Aktuell habe ich eine recht große Applikation mit über 100 Entities.
In der Applikation kann ein User dann Rechnungen, Angebote erstellen, Kunden verwalten, Belege sammeln (also ein schlankes ERP und teilweise CRM System).
Zudem habe ich in dem Monoliten aber hier auch meinen eigenen Adminbereich eingebaut.
Dies beinhaltet dann ebenfalls die Rechnungserstellung, Verträge usw....
Das heißt in dem Fall eben auch, wenn ich an meinem Adminbereich oder meiner eigenen Abrechnung etwas ändere und etwas deployen möchten,
ist die Nutzung für meine eigenen Kunden zeitweise nicht erreichbar.... (sehe ich aktuell als den größten Nachteil an)

Prinzipiell wäre eventuell eine Lösung, dass ich meinen Adminbereich (insbesondere meine Abrechnungs und Vertragsverwaltung) separiere und in ein anderes Projekt umführe.
Somit wäre ich etwas freier in der Entwicklung und unabhängig. Allerdings auch nur bedingt.
Denn bspw. müsste der Service meiner Abrechnungs / Vertragsverwaltung / Userverwaltung zB bei einer Neuanmeldung auch verfügbar sein.
Die Kommunikation der zwei Projekte könnte ja dann via REST erfolgen, in dem ich Funktionen für Vertrag anlegen usw.

Aber im Endeffekt stellt sich eben für mich die Frage, ob sich dieser Aufwand wirklich lohnt, insbesondere auch das Aufziehen von einer zweiten Datenbank, Applikation usw.
 

LimDul

Top Contributor
Mal so ins Blaue geschossen - Wenn das Hauptproblem die Verfügbarkeit während Deployments ist, da gibt es auch andere Lösungen: Load-Balancer und 2 Applicatin Server und entsprechendes Deployment-Verfahren.

Dann ist von außen die Anwendung immer erreichbar über den Load-Balancer

So arbeitet hier im Projekt die Vor-Produktion & Produktion unserer Anwendung.
 

AndiE

Top Contributor
Ich erlebe das bei "Spring Boot" ein wenig anders, als Tarrew das erklärt hat. Wenn man das installiert hat, kann man sich vorbereitete Anwendungen auf "spring.io" holen, u.a. auch komplette Projekte, wie "petclinic". Das Projekt unterteilt sich in verschiedene Bereiche, u.a. model. Dort werden eine Anzahl gleichartiger Dinge erzeugt, die immer aus Controler, Respository und einer weiteren Klasse bestehen, die das Objekt darstellt. Der Controler stellt dabei nach meinem Wissen den (Mirco-)Service bereeit, wobei es auch "Unterservices" geben kann. So habe ich das auch in dem Buch von "Ajay Kumar" verstanden, in dem es um DDD mit Spring Boot geht.

Sicher ist das DDD nur eine Variante, mit Microservices umzugehen. Ich habe aber dazu noch das Buch von Vaughn Vernon gelesen, wo er das recht gut erklärt.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich erlebe das bei "Spring Boot" ein wenig anders, als Tarrew das erklärt hat. Wenn man das installiert hat, kann man sich vorbereitete Anwendungen auf "spring.io" holen, u.a. auch komplette Projekte, wie "petclinic". Das Projekt unterteilt sich in verschiedene Bereiche, u.a. model. Dort werden eine Anzahl gleichartiger Dinge erzeugt, die immer aus Controler, Respository und einer weiteren Klasse bestehen, die das Objekt darstellt. Der Controler stellt dabei nach meinem Wissen den (Mirco-)Service bereeit, wobei es auch "Unterservices" geben kann. So habe ich das auch in dem Buch von "Ajay Kumar" verstanden, in dem es um DDD mit Spring Boot geht.

Das ganze "Spring Boot Projekt" ist ein Microservice.
Alles darin ist nur ein Implementierungsdetail, und kann gelöst werden, wie man will.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A OOP Generelle Frage zu Objekten in Arrays Java Basics - Anfänger-Themen 14
G generelle Frage zu Strukturierung von Java-Programmen Java Basics - Anfänger-Themen 2
I Generelle Frage zu Interface Java Basics - Anfänger-Themen 3
I REST Api / JAX-RS, Swagger (OpenAPI) - generelle Starthilfen benötigt Java Basics - Anfänger-Themen 15
B Erste Schritte Generelle Fragen zu Java / Greenfoot. Java Basics - Anfänger-Themen 8
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
H Frage zum Array Java Basics - Anfänger-Themen 17
G Schach -Frage 2- Maussteuerung Java Basics - Anfänger-Themen 7
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
B Fachliche Frage bei Rechnungen Java Basics - Anfänger-Themen 16
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben