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

ACME Corp Best of pets since 90

Show me the code

DEPLOYMENT OLDSCHOOL

42 hours later

À cause de lui…

Rémi à toi de jouer

Que faire…

Tout cramer…

Refaire du Java ?

Refaire du Java ?

Refaire du Java ?

On démarre sur le poste de dev…

Java Development Kits

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/

Java 8u121

Java 8u121

Java 8u121

Java 8u131

Java 8u131

Java 8u372 : cgroup v2

Java 8u372 : cgroup v2

Multiple Runtime Version Manager

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

Les éditeurs

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

Écosystème & Dépendances

Écosystème & Dépendances

Frameworks & Starters

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

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

Quarkus ?

Developer JOY

Developer JOY

On déploie ?

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

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

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

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

On observe ?

Health Checks

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

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

OpenTelemetry - Y a une extension pour ça !

OpenTelemetry - Y a une extension pour ça !

OpenTelemetry - Y a une extension pour ça !

Comment encore accélérer ?

JIT vs AOT

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.

Pourquoi utiliser des binaires natives GraalVM ?

Pourquoi utiliser des binaires natives GraalVM ?

Mais les limites ?

Mais les limites ?

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

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

Encore plus plus vite !

Harder, Better, Faster, Stronger

JIT vs CRaC

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

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

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

Et donc, notre environnement…

Et plus encore ?

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

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

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

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