First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22...
Transcript of First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22...
![Page 1: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/1.jpg)
1
Version:
Java-Software-Modularisierung – aber wie?Empfehlungen mit und gegen den Trend
20.1
Version:
The First Cut Is The DeepestEmpfehlungen mit und gegen den Trend
20.1
1
2
![Page 2: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/2.jpg)
2
3
Ihre Sprecher
Trainer, Berater, Entwickler
Christian Dedek & Thorsten Maier
@ThorstenMaierChristian Dedek
4
Ihre Sprecher
Trainer, Berater, Entwickler
Thorsten Maier
@ThorstenMaier
3
4
![Page 3: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/3.jpg)
3
5
6
Anwender brauchen
keine Modularisierung
5
6
![Page 4: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/4.jpg)
4
7
Modul
Modul
Modul
Modul
Modul
Modul
Modul Modul
Modul
Modul
Modul
Modul
8
Modul
Modul
Modul
Modul
Modul
Modul
Modul Modul
ModulModul
Modul
7
8
![Page 5: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/5.jpg)
5
ModulModul
9
Modul
Modul
Modul
Modul
Modul
Modul Modul
Modul
Modul
Modul
ModulModul
Modul
10
Modul
Modul
Modul
Modul
Modul
Modul Modul
ModulModul
Modul
Modul
Modul
ModulModul
9
10
![Page 6: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/6.jpg)
6
11
Router Service
Product Service
Meta Info Service
Search Service
12
Kapselung
„Ich setze ein Modul in einem anderen Kontext ein
und es funktioniert nicht“
11
12
![Page 7: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/7.jpg)
7
13
Cluelessness„Ahnungslosigkeit“
14
13
14
![Page 8: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/8.jpg)
8
15
Auswirkungen von
Modularisierung
„Mit Modularisierung kann
man kein Geld sparen“
16
15
16
![Page 9: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/9.jpg)
9
17
①
Build-System
18
Flugzeug startet
Kubernetes Cluster mit Microservices startet
Stabile Service-Konstellation des Autopilots
dynamisch bestimmen
17
18
![Page 10: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/10.jpg)
10
19
Verhalten und Standorte der
Komponenten unseres Systems
verändern sich ständig
20
?
Mit wem kann / soll ich kommunizieren?
nicht erreichbar
Startetgerade
19
20
![Page 11: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/11.jpg)
11
21
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
z.B.:
Netflix Eureka
Apache ZooKeeper
Cloud Foundry Discovery
Hashicorp Consul
…
22
Auflösung der passenden Artefakte zur Build-Zeit
rootProject.name = 'module-demo'
include 'moduleA', 'moduleB'
dependencies {
implementation project(':moduleA')
}
module-demo1.0
modulBmodulA
21
22
![Page 12: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/12.jpg)
12
• Gängige Build-Systeme unterstützen Multi-Module-Builds problemlos
• Relativ einfach
• Qualitätssicherung eines definierten Modul-Sets
23
Build-System – Vorteile
• IDE-Support ist brüchig
• Jede Änderung erfordert• Rebuild
• Versionsnummer
• QA-Zyklus
• Deployment
24
Build-System – Nachteile
23
24
![Page 13: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/13.jpg)
13
25
②
Java Platform Module System
26
25
26
![Page 14: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/14.jpg)
14
27
28
27
28
![Page 15: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/15.jpg)
15
29
30
Java 9 Module
Modul: Main
Main
Modul: Service
API
Impl
29
30
![Page 16: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/16.jpg)
16
31
Exportierte Packages und Abhängigkeiten
module de.oio.main {
requires java.logging;
requires de.oio.util;
}
module de.oio.util {
exports de.oio.util;
}
module java.base {
exports java.lang;
exports java.util;
[...]
}
implizit
explizit
module java.logging {
exports java.util.logging;
}
explizit
32
Transitive Abhängigkeiten
module de.oio.m1 {
requires de.oio.m2;
}
module de.oio.m2 {
requires de.oio.m3;
}
module de.oio.m3 {
exports de.oio.m3;
}
31
32
![Page 17: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/17.jpg)
17
33
Transitive Abhängigkeiten
module de.oio.m1 {
requires de.oio.m2;
}
module de.oio.m2 {
requires transitive de.oio.m3;
}
module de.oio.m3 {
exports de.oio.m3;
}
34
Module und Reflection
module de.oio.main {
requires de.oio.util;
}
module de.oio.util {
exports de.oio.util;
}
33
34
![Page 18: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/18.jpg)
18
35
Module und Reflection
module de.oio.main {
requires de.oio.util;
}
module de.oio.util {
exports de.oio.util;
opens de.oio.util;
}
• Relativ einfache Moduldeklaration
• einfacher initialer Migrationspfad
• Ein abstrakter Datentyp existiert nur einmal
• Toolsupport scheint sich schnell zu entwickeln
• DI und Reflection konzeptionell bearbeitet
36
JPMS – Vorteile
35
36
![Page 19: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/19.jpg)
19
• Alle Module müssen auf den gleichen abstrakten Datentypen aufbauen
• keine Versionierung
• keine Laufzeitaustauschbarkeit von Modulen
• Bisher wenig reale Praxiserfahrung
37
JPMS – Nachteile
③
Post-Monolith
38
37
38
![Page 20: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/20.jpg)
20
39
③
Modularisierung über Prozessgrenzen
Anwendung mit 3 Bausteinen
40
39
40
![Page 21: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/21.jpg)
21
41
Deployment auf einem Server
Anwendung mit 3 Bausteinen
42
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
41
42
![Page 22: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/22.jpg)
22
43
Anwendung mit 3 Bausteinen
Nachteile
wird nur 2 mal benötigt
Änderung an erfordert Reploy von
Baustein wird 4 mal benötigt
44
Unabhängige ArtefakteAnwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
43
44
![Page 23: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/23.jpg)
23
45
Unabhängige Artefakte
Flexible Skalierung auf 3 Server
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
46
Unabhängige ArtefakteVorteile
Isolierte Entwicklung
Isolierte Fehler
Isoliertes Deployment
Flexible Skalierung
…
Flexible Skalierung auf 3 Server
45
46
![Page 24: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/24.jpg)
24
47
Unabhängige ArtefakteNachteil
Kommunikation über
Prozess- und Netzwerkgrenzen
Verteilte Datenverarbeitung
Flexible Skalierung auf 3 Server
48
Kommunikation
asynchron synchron
47
48
![Page 25: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/25.jpg)
25
49
Asynchrone Kommunikation
Entkoppelt Sender und Empfänger
Verhindert Fehlerketten
Sender muss nicht warten
Barista
50
Kunde BecherwarteschlangeKassierer
Ausgabe
http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
„Starbucks Does Not Use Two-Phase Commit”
49
50
![Page 26: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/26.jpg)
26
KafkaTopic
Container
JAR
Container
JAR
Kubernetes Pod
Container
JAR
Container
JAR
Kubernetes Pod
52
Post-Monolith – Vorteile
SkalierungAustauschbarkeit
51
52
![Page 27: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/27.jpg)
27
53
Post-Monolith – Nachteile
8 Irrtümer der verteilten Datenverarbeitung
Netzwerk ist ausfallsicher
Latenzzeit = 0
Datendurchsatz ∞
Netzwerk ist sicher
Netzwerktopologie ist stabil
1 Netzwerkadministrator
Kosten des Datentransports = 0
Netzwerk ist homogen
Bill Joy, Tom Lyon, L Peter Deutsch und James Gosling
54
Post-Monolith – Zielarchitektur
Router Service
Product Service
Meta Info Service
Search Service
53
54
![Page 28: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/28.jpg)
28
55
Fazit
• Java bietet etwas, aber für manche Anwendungsfälle zu wenig
• Über einen längeren Zeitraum haben sich viele mit Build-System-Modularisierung beholfen
• JPMS löst uns einige der alten Probleme
• Post-Monolithe bringen viel Nutzen, das allerdings zu hohen Kosten
56
Fazit
55
56
![Page 29: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/29.jpg)
29
• Modularisierung nur bei konkretem Nutzen und nicht zum Selbstzweck
• Modularisierung kostet Geld! Nachträglich wird es noch teurer
• Modularisierung muss in Zeiten von Microservices trotz aller Agilität Up-Front eingeplant werden
• Vgl. „The First Cut Is The Deepest”
57
Fazit
Fragen?
58
57
58
![Page 30: First-cut-is-the-deepest - OOP 2020€¦ · Cloud Foundry Discovery HashicorpConsul … 22 Auflösung der passenden Artefakte zur Build-Zeit rootProject.name = 'module-demo' include](https://reader036.fdocuments.net/reader036/viewer/2022091205/605c8125c0acf95c3b5ec148/html5/thumbnails/30.jpg)
30
Vielen Dank für Ihre Aufmerksamkeit!
59