Développer en JAVA Cloud Native en 2024, Unpopular Opinion ?

A presentation at Volcamp in October 2024 in Clermont-Ferrand, France by Rémi Verchère

Slide 1

Slide 1

Développer en JAVA Cloud Native en 2024, Unpopular Opinion ?

Slide 2

Slide 2

ACME Corp Best of pets since 90

Slide 3

Slide 3

Show me the code

Slide 4

Slide 4

DEPLOYMENT OLDSCHOOL

Slide 5

Slide 5

42 hours later

Slide 6

Slide 6

À cause de lui…

Slide 7

Slide 7

Rémi à toi de jouer

Slide 8

Slide 8

Que faire…

Slide 9

Slide 9

Tout cramer…

Slide 10

Slide 10

Refaire du Java ?

Slide 11

Slide 11

Refaire du Java ?

Slide 12

Slide 12

Refaire du Java ?

Slide 13

Slide 13

On démarre sur le poste de dev…

Slide 14

Slide 14

Java Development Kits

Slide 15

Slide 15

Java Development Kits Quelle version en 2024 ? - JDK 23 (21 LTS, Release date 09/2024) https://endoflife.date/oracle-jdk - Choix du JDK : https://whichjdk.com/

Slide 16

Slide 16

Java 8u121

Slide 17

Slide 17

Java 8u121

Slide 18

Slide 18

Java 8u121

Slide 19

Slide 19

Java 8u131

Slide 20

Slide 20

Java 8u131

Slide 21

Slide 21

Java 8u372 : cgroup v2

Slide 22

Slide 22

Java 8u372 : cgroup v2

Slide 23

Slide 23

Multiple Runtime Version Manager

Slide 24

Slide 24

Multiple Runtime Version Manager Comment j’installe ? - ASDF - SDKMan

Slide 25

Slide 25

Les éditeurs

Slide 26

Slide 26

Les éditeurs Quel éditeur ? - Visual Studio Code - IntelliJ IDEA - NeoVIM

Slide 27

Slide 27

Écosystème & Dépendances

Slide 28

Slide 28

Écosystème & Dépendances

Slide 29

Slide 29

Frameworks & Starters

Slide 30

Slide 30

Frameworks & Starters https://start.spring.io/ https://code.quarkus.io/ https://start.vertx.io/

Slide 31

Slide 31

Frameworks & Starters https://start.spring.io/ https://code.quarkus.io/ https://start.vertx.io/

Slide 32

Slide 32

Quarkus ?

Slide 33

Slide 33

Developer JOY

Slide 34

Slide 34

Developer JOY

Slide 35

Slide 35

On déploie ?

Slide 36

Slide 36

Création d’appli 1. Un JAR ./mvnw clean package -DskipTests 2. Création d’un conteneur Docker ./mvnw clean package -Dquarkus.container-image.build=true -DskipTests 3. Génération chart Helm ./mvnw clean package -Dquarkus.helm.enabled=true -DskipTests

Slide 37

Slide 37

CI/CD ./mvnw -B -ntp clean package

Slide 38

Slide 38

CI/CD ./mvnw -B -ntp clean package

Slide 39

Slide 39

Cloud Native ? Kubernetes ! - Création Conteneur - Génération Chart Helm - GitOps

Slide 40

Slide 40

On observe ?

Slide 41

Slide 41

Health Checks

  • Liveness / Readiness Probes ? - Même les Startups Probes ?

Slide 42

Slide 42

Spring Actuator ● ● ● ● ● ● ● DataSourceHealthIndicator MongoHealthIndicator Neo4jHealthIndicator CassandraHealthIndicator RedisHealthIndicator CassandraHealthIndicator RabbitHealthIndicator ● ● ● ● ● ● ● CouchbaseHealthIndicator DiskSpaceHealthIndicator ElasticsearchHealthIndicator InfluxDbHealthIndicator JmsHealthIndicator MailHealthIndicator SolrHealthIndicator Et même flyway !! https://docs.spring.io/spring-boot/api/rest/actuator/flyway.html

Slide 43

Slide 43

OpenTelemetry - Y a une extension pour ça !

Slide 44

Slide 44

OpenTelemetry - Y a une extension pour ça !

Slide 45

Slide 45

OpenTelemetry - Y a une extension pour ça !

Slide 46

Slide 46

Comment encore accélérer ?

Slide 47

Slide 47

Slide 48

Slide 48

JIT vs AOT

Slide 49

Slide 49

La quête du Graal ● Truffle : Un framework pour l’implémentation de langages de programmation en tant que interpréteurs d’arbres syntaxiques abstraits (AST). Il permet de créer des langages dynamiques qui peuvent être exécutés sur la JVM ou compilés en code natif. ● Graal : Un compilateur de code natif qui peut fonctionner en mode just-in-time (JIT) ou ahead-of-time (AOT). Il est capable d’optimiser et de compiler le code généré par Truffle en code natif performant. ● SubstrateVM : Un environnement d’exécution qui permet de compiler des applications Java en code natif ahead-of-time (AOT), éliminant ainsi la nécessité d’une JVM pour l’exécution. Il utilise Graal pour la compilation AOT et fournit les éléments nécessaires pour exécuter des applications Java sans JVM.

Slide 50

Slide 50

Slide 51

Slide 51

Pourquoi utiliser des binaires natives GraalVM ?

Slide 52

Slide 52

Pourquoi utiliser des binaires natives GraalVM ?

Slide 53

Slide 53

Mais les limites ?

Slide 54

Slide 54

Mais les limites ?

Slide 55

Slide 55

https://github.com/zepouet/demo-volcamp/tree/main/.github/workflows

Slide 56

Slide 56

Comparatif des meilleures cliniques Boot MEMORY Spring Boot 2.x Old Generation 5086ms 560 Mo Spring Boot 3.x 1097ms 547 Mo Quarkus JIT 1347ms 177 Mo

Slide 57

Slide 57

Encore plus plus vite !

Slide 58

Slide 58

Harder, Better, Faster, Stronger

Slide 59

Slide 59

JIT vs CRaC

Slide 60

Slide 60

Kube Startup CPU Boost Sources : https://2024.springio.net/slides/the-future-of-java-performance-in-serverless-native-java-crac-and-project-leyden-springio24.pdf

Slide 61

Slide 61

JIT vs AOT Sources : https://geekyants.com/blog/diving-deep-into-graalvm-and-mastering-the-art-of-observability-using-micrometer

Slide 62

Slide 62

Kube Startup CPU Boost 1. CRD “StartupCPUBoost” 2. Sélection d’une ressource 3. Boost du conteneur 4. Sur une durée / état Avec Feature Gate “InPlacePodVerticalScaling” (>= Kubernetes v1.27) Plus d’info : https://github.com/google/kube-startup-cpu-boost

Slide 63

Slide 63

Et donc, notre environnement…

Slide 64

Slide 64

Et plus encore ?

Slide 65

Slide 65

Infra As Code : Pulumi Dommage, c’était hier :(

Slide 66

Slide 66

CLI : Picocli La chance, c’est juste après ;)

Slide 67

Slide 67

References ● ● ● ● ● https://grumpyf0x48.org/jbang-et-les-tests-unitaires/ https://developers.redhat.com/articles/2023/04/19/openjdk-8u372-feature-cgro up-v2-support#openjdk_8u372__cgroup_v1_and_v2_support https://medium.com/norsys-octogone/a-la-d%C3%A9couverte-de-jbang-30d40 2ba8349 https://github.com/google/kube-startup-cpu-boost https://www.youtube.com/watch?v=5aZtF5stYeU

Slide 68

Slide 68

Merci ! Nicolas Muller - @zepouet Rémi Verchère - @rverchere