Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Quarkus
  3. Quarkus : carte d'identité
Extrait - Quarkus Développer des applications microservices en Java pour le cloud et Kubernetes
Extraits du livre
Quarkus Développer des applications microservices en Java pour le cloud et Kubernetes Revenir à la page d'achat du livre

Quarkus : carte d'identité

Qu’est-ce que Quarkus ?

Quarkus est un framework de développement d’applications de type micro-service en Java. Il est open source et utilise la licence Apache v2.

La documentation en ligne du framework peut être trouvée à la page https://quarkus.io/guides et son code source dans le dépôt GitHub : https://github.com/quarkusio/quarkus

Red Hat est le principal contributeur et propose du support payant via le Red Hat build of Quarkus (https://www.redhat.com/en/topics/cloud-native-apps/why-choose-red-hat-quarkus).

Quarkus permet le développement de micro-services HTTP/REST (Hypertext Transfer Protocol/Representational State Transfer) ou orientés message. Bien que pensé pour le développement de micro-services, il peut aussi être utilisé pour le développement d’outils en ligne de commande ou de batchs de traitement.

Son slogan est « Supersonic Subatomic Java ».

Supersonic, car une application Quarkus démarre très vite.

Subatomic, car une application Quarkus a une empreinte mémoire faible.

Java, car ces deux améliorations sont disponibles dans la JVM (Java Virtual Machine ou machine virtuelle Java).

Ce slogan répond directement à tous ceux qui pensent que Java ne peut pas démarrer vite et avoir une empreinte mémoire faible, et qu’un autre langage de programmation est donc à privilégier...

Les piliers de Quarkus

1. Developer Joy

L’expérience du développeur est mise en avant lors de l’utilisation du framework, on parle alors de developer joy. Chaque fonctionnalité du framework est pensée pour être la plus simple possible et éviter au maximum le code boilerplate (passe-partout en français, c’est-à-dire du code sans plus-value mais nécessaire à écrire, le plus souvent pour des raisons techniques).

Lors du développement d’une application avec Quarkus, le dev mode sera utilisé. Il s’agit d’un mode d’exécution de l’application qui va grandement simplifier la vie du développeur, entre autres grâce au live reload, à la dev UI, aux dev services et au continuous testing.

Le live reload va permettre de recharger automatiquement une application Quarkus en cours de développement. Avec le live reload, on peut démarrer le matin notre application en dev mode, coder toute la journée et l’arrêter le soir. À chaque modification de code ou de configuration, Quarkus va redémarrer automatiquement et très rapidement l’application.

La dev UI est une interface graphique dédiée aux développeurs qui va être accessible quand une application est démarrée en mode dev. Elle permet d’accéder à des informations techniques sur l’application et ses extensions.

Les dev services permettent de démarrer automatiquement des services (base de données, broker de messages...) en mode dev et lors des tests en fonction de la présence d’une extension. Par exemple, en ajoutant l’extension MongoDB, une base MongoDB sera lancée automatiquement dans un conteneur (via Docker ou Podman) et l’application sera configurée pour l’utiliser.

Les dev services utilisent le framework Testcontainers pour démarrer puis arrêter automatiquement les services utilisés par l’application via des conteneurs Docker.

Le continuous testing permet de lancer les tests d’une application Quarkus de manière continue. Dans ce mode, les tests seront réexécutés à chaque changement de code et les résultats seront visibles directement dans la console et dans la dev UI. Cela permet un développement...

La philosophie de Quarkus

Une des principales problématiques d’un framework de micro-service tel que Quarkus est le démarrage de l’application et de ses librairies (extensions dans le vocabulaire Quarkus).

Pour ce démarrage (souvent appelé bootstraping en anglais), un framework va devoir lire les fichiers de configuration et configurer chaque librairie sous-jacente (Hibernate, RESTEasy…), puis réaliser les étapes préalables à l’injection des dépendances.

Beaucoup de frameworks démarrent lors de l’exécution d’une application, ce que l’on appelle le runtime. Quarkus, quant à lui, va essayer de réaliser le plus d’étapes possible lors de la construction de l’application ; c’est ce que l’on appelle le build.

Quarkus va donc décaler à la construction de l’application, réalisée une seule fois via le plugin Maven ou Gradle de Quarkus, une partie des opérations que d’autres frameworks réalisent au lancement de l’application, ce qui lui permet de démarrer rapidement. On dit qu’il privilégie le build-time au runtime.

En plus, en réalisant ces opérations à la construction de l’application, Quarkus va réduire l’empreinte mémoire nécessaire à l’exécution. En effet...

Le temps de démarrage et l’empreinte mémoire

Comme nous l’avons vu dans la section précédente, la philosophie de Quarkus vise à réduire le temps de démarrage et à limiter l’empreinte mémoire du framework.

Chaque extension Quarkus est pensée pour démarrer le plus rapidement possible et utiliser le moins de mémoire possible.

Quand on parle d’empreinte mémoire, on parle de RSS (Resident Set Size), soit la mémoire totale utilisée par le processus de la JVM. Celle-ci contient la heap Java, le metaspace où sont stockés les informations des classes, les stacks des threads ainsi que d’autres structures de données internes au Garbage Collector et à la JVM.

Pour une application de type « Hello World » qui ne va contenir que les extensions nécessaires à l’écriture d’un service web, Quarkus va démarrer en moins d’une seconde (sur une machine mono-CPU) et avoir une empreinte mémoire de l’ordre de 75 Mo.

Pour une application plus complète qui s’interface par exemple avec une base de données via un ORM (Object Relational Mapper) tel que Hibernate ORM, Quarkus va démarrer en moins de 2 secondes (sur une machine mono-CPU) et avoir une empreinte mémoire de l’ordre de 145 Mo.

Ces résultats...

Le support de GraalVM

GraalVM est un projet porté par Oracle Labs (division de recherche et développement d’Oracle) dans le but d’écrire une JVM en Java.

Il se compose des éléments suivants :

  • Un compilateur de bytecode Java qui peut être utilisé en AOT (Ahead Of Time - avant l’exécution de l’application) ou en JIT (Just In Time - pendant l’exécution de l’application). C’est le compilateur Graal.

  • Un outil permettant de créer des exécutables natifs, aussi appelés images natives. C’est l’outil native-image. Ces exécutables natifs auront été compilés en AOT avec le compilateur Graal et démarreront très rapidement avec une empreinte mémoire très faible.

  • Un framework permettant le développement d’applications polyglottes, c’est-à-dire utilisant plusieurs langages de programmation. C’est le framework Truffle.

L’outil native-image impose beaucoup de contraintes dans le développement d’applications compatibles, compliquant parfois le travail du développeur.

Heureusement, Quarkus a été prévu dès le départ pour fonctionner dans une application compilée en image native. Chaque extension proposée dans la plateforme Quarkus est compatible avec ce mode de packaging.

Il existe beaucoup...