Aller au contenu

Les temps forts de Devoxx France 2023 !

Au programme pour les développeurs back : CRaC vs GraalVM, Loom en #Java 20 et 21, Bootiful Spring Boot 3, PostgreSQL, observabilité, DDD, Terraform et bien plus encore. Une belle occasion d'échanger et de suivre les tendances du moment.

Devoxx France 2023

Depuis plus de 10 ans maintenant, la conférence Devoxx France rassemble toute la communauté de développeurs ainsi que les grands acteurs de l’informatique. Avec plus de 200 conférences et près de 3000 visiteurs, c'était l'occasion pour les développeurs backend de suivre les tendances du moment en matière de programmation, de nouvelles pratiques et d’échanger avec tous les exposants présents cette année ! Voici un petit aperçu des conférences intéressantes auxquelles nous avons pu assister.

CRAC vs GraalVM

Lilian BENOIT est Tech Lead dans une ESN Bordelaise. Il est venu nous parler de CRaC (Coordinated Restore at Checkpoint). Développé par Azul Systems, c’est une alternative à GraalVM qui propose une approche assez différente pour traiter le temps de Warmup nécessaire aux applications à base de JVM classique. CRaC permet de restaurer un checkpoint (une image) d'une application qui a été lancée au préalable, ce qui permet un redémarrage instantané avec son état, comme on peut avoir l’habitude de le faire lorsqu’on reprend une session rapidement avec son OS (MacOS par exemple). Par rapport à GraalVM, qui permet notamment la création d’exécutables en code natif, mais a l’inconvénient du temps de build assez long, CRaC se positionne comme un outil facile pour permettre un démarrage rapide de workloads écrits en Java. C’est un outil qu’il faudra suivre !

Programmation Concurrente et Asynchrone : Loom en Java 20 et 21

José Paumard présentait ici ce que le projet Loom apporte : les Java Virtual Threads et la Structured Concurrency (programmation concurrente structurée) - disponibles depuis Java 20. Ces nouveaux threads sont très peu coûteux à créer et permettent de décorrler tâche et threads. Cela remet en cause la nécessité de faire de la programmation asynchrone quand on a besoin de performancesApparaît aussi la notion de scope, qui permet de grouper ces nouveaux threads et de partager des données. Cela va sûrement apporter de nombreux changements dans nos librairies et serveurs d’applications.

Clean As You Code your Project

Nolwenn Cadic et Marco Comi de chez SonarSource présentaient leur façon de produire du code de qualité (en particulier dans le cas d’une application déjà existante) : se concentrer sur la qualité du nouveau code (sachant qu’en moyenne 20% d’une codebase est réécrite tous les ans). Les outils pour aider : Sonar Lint dans l’IDE, Sonar Cloud/Qube pour analyser les PR et mettre en place une Quality Gate (seuil de validation de la qualité du nouveau code).

Bootiful Spring Boot 3

Josh Long présentait une partie des nouveautés de Spring Boot 3 (et Spring 6) dans un exercice de Live Coding d’une API REST :

  • Possibilité d’activer les réponses d’erreurs standard (suivant la RFC 7807)
  • utilisation de Jakarta EE 10 (qui amène des changements de nom de package javax.* => jakarta.*)
  • observabilité facilitée avec Micrometer qui gère désormais le tracing en plus des métriques
  • pré-génération des fichiers d’hint pour GraalVM
  • création de services HTTP client via l’annotation d’interfaces (comme ce qu’il est possible de faire avec Feign)
  • facilité d’utilisation de GraphQL.

Des millions d'événements par minute pendant une Coupe du Monde, même pas peur !

Les équipes de Betclic (Nicolas Jozwiak et Guillaume Lannebère) nous ont expliqué leurs choix d’architecture (faits en 2019) pour tenir la charge d’un événement tel que la Coupe du Monde de football (2 milliards de messages sur un mois, des pics à 1,5 millions/sec).

Leur solution est event-driven, bien entendu, et se base sur les services managés d’AWS : Amazon SNS pour le bus centralisé (avec des topics séparés par domaine métier), des instances Amazon SQS par périmètre métier, AWS Fargate (conteneur managé) et AWS Lambda au niveau des applicatifs

Profitez de PostgreSQL pour passer à la vitesse supérieure

Emmanuel Remy a fait la liste de fonctionnalités et extensions méconnues de PostgreSQL pour faciliter la vie des développeurs et remplacer du code applicatif : possibilité d’utiliser nos propres schémas de données, de générer des données avec Generate_series, de partitionner les tables pour de meilleures performances, anonymisation automatique de données (extension Anonymizer), Row Level Security pour gérer des droits à la ligne, planification de cron (extension pg_cron), et enfin les Foreign Data Wrapper pour créer des tables à partir de données externes.

Miroir, miroir dis-moi si je suis observable?

Virginie Hang, CTO de Accenture Clermont-Ferrand et Robin Sooprayen, SRE chez Michelin sont venus partager leur expérience sur l’observabilité de nos applications. Il y a bien une distinction entre monitoring (surveiller ce que l’on connaît) et observabilité (découvrir ce que l’on ne connaît pas). Une bonne première approche à l’observabilité est d’ajouter des logs pour faciliter le support et la résolution de bug. Mais trop de logs risque de noyer l’information et d’augmenter de façon drastique les coûts d’ingestion. Pour définir la priorité et la pertinence de ces logs, la méthode Failure Mode and Effects Analysis peut être utilisée avec les équipes support. Celle-ci repose sur l’analyse de la Sévérité, la Probabilité et la facilité de Détection des erreurs et bugs.

En deuxième approche, on peut aussi mettre en place la méthodologie SRE popularisé par Google : définition de SLI, SLO pour surveiller la qualité du service rendu et en fonction, déduire les SLAs du service.

En dernière approche, et particulièrement pertinent pour les services distribués, on peut ajouter des traces permettant d’avoir l’exécution des requêtes, leur durée et leur contexte tout au long de la chaîne de valeur. Cette dernière permet d’avoir une observabilité bien supérieure au prix d’efforts supplémentaires à apporter dans le code.


Rendons le DDD aux devs

Le Domain Driven Design, introduit en 2004 par Eric Evans, approche désormais de ses 20 ans et malgré un fort intérêt suscité auprès de la communauté des développeurs, beaucoup le trouve difficile à pratiquer et à mettre en place.

À l’aide d’un kata sur du code legacy, Dorra Bartaguiz et Arnaud Thiefaine nous ont donné leurs techniques et tips divers pour y introduire du DDD.

En commençant par l’utilisation d’un golden master pour permettre la couverture de test du code legacy, on a pu voir différentes techniques de refactoring comme le fait d’introduire des Value Object avec l’opération Extract Value Type ou encore le Pattern Sandwich pour mettre en avant des blocs de code “métier” et “technique” pour arriver petit à petit vers la cible, c’est-à-dire un code proche du métier.

On y a également reçu des piqûres de rappel sur des choses comme les workshops Event Storming, des tips pour l’identification et le découpage de Bounded Context ou encore l’architecture hexagonale.

Ce qui a également fait le succès de cet événement, c'est bien l'utilisation de l'humour et l’atmosphère conviviale !


Terraform Practices to Enable Infrastructure Scaling

Hila Fish, Senior DevOps Engineer chez Wix nous a sensibilisé sur les bonnes pratiques à adopter et les choses à ne pas faire dans l’utilisation de Terraform pour permettre à notre infrastructure as code de se “mettre à l’échelle” avec plus de facilité :

  • L’utilisation systématique de tags pour catégoriser les ressources
  • Se baser sur des Remote state versionnés et verrouillés à la modification
  • Utiliser au maximum des modules communautaires et vérifiés
  • Utiliser des env vars de préférence et des tfvars seulement si nécessaire et garder les choses génériques au possible
  • Structurer ses fichiers en se basant sur les conventions de la communauté
  • Appliquer les bonnes pratiques de développement même pour le code Terraform (DRY, KISS, etc…)
  • Structurer sa base de code Terraform (par équipe/projet/provider cloud/region)
  • Appliquer des conventions pour le merge des pull requests (linters, formatters, etc…)

Redis: du cache à la time series!

Sous le déguisement d’un jeu de cache-cache, Holly Cummins et Clément Escoffier de chez Red Hat nous montrent qu’en plus d’être une solution de cache ou de stockage de session utilisateur populaire, Redis cache beaucoup de choses sous son capot.

Avec une brève présentation des 380+ fonctions existantes et de leur catégorisation, on observe au travers du live démo, leur utilité et leur application, qui nous font voir Redis sous un autre jour et à travers un autre prisme.


JKube remote-dev : coder avec tous vos micro-services du cloud ... en local !

Sun Tan de chez Red Hat nous fait une présentation intéressante d’Eclipse JKube, anciennement nommé “Fabric8 Maven Plugin” qui était un composant essentiel du projet Fabric8 mais qui a subi un refactoring et un rebranding.

Dans son live demo, Sun nous met des étoiles dans les yeux en connectant directement son application lancée sur sa machine en local aux autres applications sur sa plateforme cloud en nous expliquant que cela est possible grâce à la création de tunnels SSH automatisés via une commande mais nous indique tout de même que ce n’est pas magique et que cela nécessite un peu de configuration au niveau du plugin mais aussi que les ports soient ouverts afin de pouvoir accéder aux machines dans le cloud.


Revisiting Design Patterns after 20

Edson Yanaga nous propose avec beaucoup d’enthousiasme un regard nouveau à porter sur les design patterns que nous utilisons depuis maintenant deux décennies.

Il va ainsi nous exposer à l’aide d’exemples de code, des implémentations revisitées de plusieurs design pattern en les comparant avec leur écriture historique.

Tout cela est fait en utilisant des combinaisons de fonctionnalités comme les interfaces fonctionnelles, le pattern matching avec des conditionnels, etc… apparues dans le langage Java après l’édition du fameux livre Design Patterns par le Gang of Four.

Edson nous incite ainsi à explorer les nouvelles possibilités offertes par les évolutions du langage et à les partager avec la communauté.

Lien vers le repository github : revisiting-design-patterns


Et vous, qu’est-ce qui vous a marqué dans ces conférences ?

Pour aller plus loin, voici un article traitant des origines du Devoxx et un autre sur les générateurs d’images.


Dernier