Nous sommes en avril 2019, lors de la 8ème édition de la conférence Devoxx France. Emmanuel Bernard accompagné de Clément Escoffier, présente pour la première fois le projet « Quarkus« . Ils déroulent une présentation pendant 3 heures le projet et son utilisation. La vidéo est sur YouTube. Et le souvenir de cette présentation c’était « wooowww« . Ou plutôt comme dirait Emmanuel : « cool ». Quelle claque ! Spring Boot et consors n’ont qu’à bien se tenir.
Nous sommes en 2020 et Quarkus est un outil pensé dès le départ pour construire des applications à déployer sur du Cloud computing. Nous parlerons du développement tout à l’heure, mais parlons d’abord de la mise en production de votre future application.
Quarkus permet de compiler et d’exécuter votre application avec GraalVM. Cette phase de compilation assez longue va construire un binaire natif pour une plate-forme donnée. Il ne sera plus nécessaire d’installer une JVM. Ce binaire démarre en quelques secondes, et nécessitera beaucoup moins de mémoire pour l’exécution. Gain de ressources, gain de mémoire, et rapidité de démarrage de l’application.
Pourquoi la vitesse de démarrage est-elle importante ? Au lieu d’attendre 20 à 30 secondes pour que votre application soit prête, celle-ci sera prête à répondre en 80ms. Imaginez que votre société passe le dimanche soir à la télévision : vous pouvez alors démarrer une centaine d’instance en quelques instants, et arrêter ensuite celles-ci lorsque la demande sera moins importante. Ce côté elastique est l’une des caractéristiques des architectures dites réactives.
Le développement avec Quarkus est aussi une très bonne expérience. En mode développement, Quarkus compile et recharge à chaud votre application en quelques centièmes de seconde. Pas besoin d’arrêter et de relancer votre application, tout en bénéficiant de la JVM. Cela permet aussi « à la play framework » de remonter les erreurs directement dans la page du navigateur Web.
Quarkus arrive sur les bases d’un écosystème mature et puissant. Vous n’entendrez pas forcément parler de Java EE ou de Jakarta EE, alors que ces frameworks sont omni-présents et s’utilisent avec plaisir, via Quarkus. Je dirai que Jakarta EE est un ensemble d’appareils de bricolage, et que Quarkus représente l’électricité qui anime l’ensemble de ces outils.
En comparaison avec Play2, on gagne énormément en boucle de retour. Entre la fin de la saisie, le changement de fenêtre pour aller chercher votre navigateur et le rafraichissement : Quarkus a déjà swappé et attend votre visite tranquillement. Il est aussi à noter que ce système est possible grâce à Vert.X. Je vous encourage à écouter Julien Ponge et Thomas Segismont dans l’épisode 50 du Podcast Electro Monkeys.
Quarkus permet d’intégrer rapidement tout un ensemble de solutions, pour construire une application Web, un service REST ou un micro-service. Vous pouvez vous faire une idée rapide en visitant https://code.quarkus.io/. Quelques clics de souris et votre projet sera prêt, sera configuré et n’attendra plus que vous pour avancer.
Quel est l’intérêt de démarrer TRÈS rapidement ?
En dehors du plaisir de ne pas attendre, cela va nous permettre de tester différemment votre application. En effet, puisqu’elle démarre en 100ms, vous allez être en mesure de tester « réellement » votre application avec, par exemple, une base de données démarée via Docker.
Quarkus rend les tests d’intégration ultra-rapide, et donc, plus facile à écrire. En fait, je ne vois pas comment nous faisions avant. Ah si… avec des Mocks. Ici pas de mock.
Ajoutez Flyway avec une base PostgreSQL gérée via Docker par exemple, et vous aurez de quoi tester facilement votre application de bout en bout.
Quarkus est super-sonique. Son temps de démarrage est presque instantané. Et c’est encore mieux avec la version native, où vous lancerez un binaire, qui se connectera sur votre base, pourra créer le schéma, et monter des données. Le tout en 80ms comme montré par Emmanuel durant sa présentation à Devoxx Belgique.
Pourquoi Quarkus démarre rapidement ?
Quarkus démarre rapidement, car une partie du travail habituel de Java est déporté de l’exécution vers la compilation. Les frameworks en général doivent lire de la configuration, résoudre des Proxy Java, parcourir le classpath (surtout en raison des annotations), résoudre des dépendances, faire de l’injection, utiliser la réflexion pour introspecter les classes… Tout ceci coûte du temps au démarrage de l’application. Dans l’idée de cibler le Cloud, Quarkus va donc tisser les liens et s’attaquer à regrouper et à brancher une grosse partie de votre application.
Quarkus is a framework to start other frameworks at build time.
Emmanuel Bernard, 6th november 2019, Devoxx Belgium
Ce travail n’est fait qu’une seule fois : lors de la compilation. Que votre petit service soit ensuite démarré une fois ou 1000 fois : le gain est définitif. Moins de temps de démarrage mais aussi moins de mémoire nécessaire au démarrage. Bye bye le parser XML pour regarder le fichier persistence.xml par exemple…
Cela demande donc un travail important du côté de Quarkus, qui doit analyser ce que font en général les frameworks, pour les accélérer. On peut dire que Quarkus est un accélérateur de particules (wooo celle-là elle est de moi)
La conclusion est intéressante. En allant vers plus de simplicité, et en supprimant le code inutile : nous obtenons un gain de productivité immédiat. Les tonnes de framework Java attendaient une nouvelle vision, c’est ce que Quarkus va vous offrir.
Mes 2 projets 2020 autour de Quarkus
L’année 2020 pour ma part a été marquée par 2 projets. Tout d’abord TimeKeeper, un projet open-source destiné à la saisie des heures d’activité des collaborateurs, et ensuite la relecture du livre d’Antonio Goncalves « Understanding Quarkus ». J’ai participé avec d’autres personnes à la lecture/correction du livre.
Le fascicule « Understanding Quarkus » est un livre téléchargeable gratuitement sur le site Red Hat Developer. Il présente le fonctionnement de Quarkus, son utilisation et de nombreux frameworks intégrés avec Quarkus. Antonio a une superbe expérience Java EE, et cela permet de comprendre justement l’intégration fine des différentes technologies Java.
Le fascicule présente GraalVM, l’intégration avec MicroProfile, la configuration, l’injection de dépendances, JPA, JTA, Panache ORM, l’observabilité, l’utilisation de Mutiny pour la programmation réactive, etc.
Le livre est très complet, et vous serez à même de construire un micro-service ou une application REST en l’ayant sous le coude.
Si vous souhaitez regarder un « vrai » projet, les équipes de Lunatech ont codé le projet Time Keeper pendant le premier confinement. Vous y trouverez une application Quarkus composée d’un frontend basé sur React, et d’un backend au dessus d’une base PostgreSQL. La sécurisation est assurée par Keycloak. Ce projet est open-source, le repository Github original est ici et une copie se trouve aussi sur ma page Github.
Conclusion
En alternative à la pile logicielle de Spring, Quarkus est un plaisir à utiliser. Le mode natif est la cerise sur le gâteau, à activer dans votre intégration continue, pour utiliser moins de ressources.
Sans révolutionner le monde Java, nous avons une solution mature, puissante et facile à apprendre. Vous (re)découvrirez certainement l’ecosystème Java grâce à Quarkus. Micro-profile par exemple gagne à être connu. On oublie aussi que JPA est une brique très puissante et simple à utiliser.
L’histoire semble nous dire que le monde Java a d’abord connu Java J2EE il y a quelques années. Puis Spring framework est arrivé, et a tout balayé sur son passage. On peut tout faire avec Spring. Et si Java EE ensuite a tenté un retour, cela reste plus timide. Les gens sont accrochés au cou de Spring à juste titre. Et bien au risque de me tromper, je pense que Quarkus va rebalancer les équilibres des forces dans le monde Java. De SpringSource vers RedHat, sachant qu’Oracle est inexistant dans le monde Java en 2020. IBM (propriétaire de RedHat) reste en gardien dans l’ombre.
Pour une DSI c’est un choix très intéressant, lorsque son S.I se tourne vers le Cloud. Si vous avez déjà acté l’utilisation de Kubernetes entre autre, Quarkus est la suite logique. Il ne faudra pas oublier trop vite aussi Micronaut, une autre alternative à Quarkus dans le monde de la JVM.
Sur ce, je vous prépare un article sur le retour du « server-side » en réponse à cette tendance du tout JS (ReactJS, AngularJS, VueJS, PouetJS, etc).
A plus tard…
1 like
Commentaires récents