Back to Devoxx
Alors que les sirènes des Serverlessconf, AWS Summit ou autre Dockercon me font de l’oeil depuis un moment, j’ai tout de même décidé de retourner cette année à Devoxx France, la plus grande conférence Java de l’Hexagone. Bien que taguée “conférence Java”, elle offre pas moins de 8 tracks différentes en parallèle, dont les tracks Cloud, Big Data, Web ou méthodologie agile. J’ai pu donc panacher mes sessions à mon envie.
Java
Mais commençons donc par la track Java, qui reste mon amour de jeunesse. La question du jour est: que nous réservent donc les versions à venir ? Le rythme de release étant désormais d’une nouvelle version tous les 6 mois, les nouveautés s’enchaînent beaucoup plus rapidement que par le passé. C’est ce que nous ont présenté José Paumard et Rémi Forax dans “Java keeps throttling up”, ainsi que Mark Reinhold, l’architecte en chef de Java, dans “Modern Java: Change is the Only Constant”.
Les grandes nouveautés se rassemblent dans 3 gros projets. D’abord, Valhalla, qui vise à créer les ‘value classes’, versions immutables des ‘struct’ du langage C. Elles permettront de créer des structures de données sur la pile, et ainsi donner moins de travail au GC, mais aussi d’améliorer la localité des boucles sur les tableaux de ‘value classes’, et donc de mieux utiliser les caches des processeurs.
Le second projet est Amber, dont le but ultime est d’introduire le pattern matching en Java. Pour moi, ce projet sert plutôt d’excuse pour récupérer certaines constructions syntaxiques propre à Scala, comme le pattern matching, mais aussi la déconstruction ou le ‘switch expression’.
Enfin, le projet Loom introduit la notion de ‘Fiber’, une version très légère des Threads. Elles permettront de ne pas utiliser les ressources de l’OS, mais seront aussi capable de se détacher de la tâche en cours, quand celle-ci se bloque par exemple. L’intérêt serait de s’atteler au traitement d’une autre tâche en attente, puis de revenir sur la première plus tard, avec du context switching très léger.
L’autre présentation Java à laquelle j’ai assisté, “Comprendre les GC à faible latences” de Jean-Philippe Bempel, nous a décrit le fonctionnement interne de 3 GC: Shenandoah, ZGC et le C4 d’Azul. Outre la découverte des ‘Brooks Pointers’ et autre ‘Loaded Value Barrier’, on y apprend que le GC le plus performant serait le C4 d’Azul, à condition d’y payer le prix, que Shenandoah est le seul des trois à supporter Windows, alors que ZGC, le plus récent des trois, est encore à l’état expérimental dans la JDK 11.
Cloud
Attachons-nous maintenant à la track Cloud. J’ai d’abord assisté à la présentation “APIs, Microservices et le Service Mesh” de Joel Gauci de chez Apigee. L’introduction sur le fonctionnement du Service Mesh pour gérer la communication entre différents microservices nous apprend que l’implémentation basée sur Envoy Proxy nous permet de pousser tous les détails techniques en dehors de notre code applicatif. La présentation s’est malheureusement transformée en cours de route en pitch commercial pour Apigee, la solution d’API management de la Google Cloud Platform. J’en ai donc profité pour partir à la chasse aux goodies dans le hall des exposants…
Une autre présentation qui m’a un peu déçue est “Migrer ses APIs vers GraphQL : Pourquoi? Comment !”. Guillaume Schelbel y passe énormément de temps à présenter plutôt le “Pourquoi?” que le “Comment!”. On y apprendra tout ce qui allait de travers sur la plateforme Expedia et les raisons du choix de GraphQL, et moins sur l’outil lui-même.
La présentation “Déploiement de vos secrets applicatifs : Hashicorp Vault et la livraison continue” nous présente un cas d’utilisation intéressant de Vault. Pour déployer de manière sécurisée l’infrastructure du site LesFurets.com, sans avoir à stocker des credentials en dur ou dans des fichiers de configuration, l’équipe a automatisé le déploiement d’instances de Vault décentralisées temporaires (voir ici nos articles sur Vault).
Plus intéressante pour moi était la présentation de David Delabassée “La JVM et Docker, vers une symbiose parfaite !”. On pouvait y apprendre différentes manières d’optimiser le déploiement de Java dans des conteneurs Docker. Parmi les conseils avisés, il y avait l’utilisation de la JRE plutôt qu’une JDK, le déploiement de GraalVM, une JVM précompilée présentant une empreinte mémoire réduite, ou l’utilisation de l’outil JLink qui permet de ne garder que les modules dont notre application dépend. On y apprendra aussi qu’il ne faut jamais utiliser l’image docker ‘java’, mais ‘open-jdk’, et que la version 12 de Java arrive à reconnaître qu’elle tourne à l’intérieur d’un container, et est mieux à même de comprendre combien de processeurs lui sont alloués et ainsi mieux régler le nombre de Threads utilisées par son Fork-Join Pool.
Big Data
Pour ce qui est de la track Big Data, j’ai d’abord suivi l’Université (présentation de 3 heures) intitulée “Comprendre et maîtriser la performance de vos applications Spark”. N’ayant jamais utilisé Spark, il était très intéressant d’apprendre comment les requêtes sont gérées et quel travail est fourni par le framework pour les optimiser. On peut aussi se rendre compte à quel point il est important d’organiser ses données par rapport aux requêtes que l’on souhaite exécuter.
J’ai pu également assister à 2 présentations sur Kafka: “Kafka – the asynchronous microservices runtime for state, scale and performance” et “Apache Kafka: Patterns / Anti-patterns”. La première, avec Neil Avery, le CTO de Confluent, nous explique certains use cases du framework où Kafka peut tout simplement remplacer la base de données. La seconde, pleine d’humour, nous fait comprendre que la configuration par défaut de Kafka est plutôt orientée performance, au détriment de la sécurité des données. Il est vrai que la réplication seule n’assure pas qu’aucune donnée ne soit perdue ou dupliquée. Et pourtant, tous les mécanismes de retry, acknowledgement et d’idempotence sont désactivés par défaut.
Les deux dernières présentations que j’ai suivies dans la track Big Data concernaient la création de Data Lake. La première, “Comment nous avons construit un Data Lake AWS de 700To, performant et scalable”, nous montrait la mise en place du Data Lake d’Ogury pour la ‘consent data’ (vous savez, ces questions énervantes qui poppent sur tous les sites concernant l’utilisation des cookies et autre tracking). Un point intéressant est leur architecture en étoile dans la base Redshift, qui est parfaitement adapté à leur use case. Toutes les données sont stockées dans une table centrale, les autres tables ne servant qu’à faire des jointures pour des use cases donnés. Le deuxième point intéressant était l’automatisation de leur ETL qui leur évite de coder à chaque ajout de use case.
La seconde présentation, “Au secours, mon projet Big Data est en production!”, était particulièrement enrichissante parce qu’elle contenait une pléthore de conseils venant d’une expérience directe du déploiement d’un Data Lake on premise. La narration des difficultés à implémenter des tests d’intégration sent le vécu, comme l’étaient les conseils de ne jamais utiliser ‘cron’ pour scheduler des tâches, ou de préférer de vrai langages de programmation aux scripts shell.
Bonus
Comme chaque fois à Devoxx, je m’offre quelques petits plaisirs avec des présentations qui n’ont aucun lien avec mon boulot de tous les jours. C’est ce que j’appelle la track Bonus.
Dans cet esprit, j’ai assisté à la présentation “La programmation modulaire, au delà des espaces de noms”, qui traitait du concept de Modules dans le langage CAML. Je vais sûrement me faire des ennemis, mais les Modules du CAML me font plutôt penser aux objets du C++, dans le sens où l’on a des fichiers séparés pour l’interface et l’implémentation. De ce que j’ai compris de la présentation (et il est très probable que je n’aie rien compris), il est possible d’appliquer des fonctions à des Modules pour les transformer et créer d’autres Modules dérivés à la volée. Je vois ça un peu comme les lambdas en Java, qui sont capable de synthétiser un objet à la volée qui implémenterait une interface à méthode unique. Sauf que là, on pourrait composer plusieurs lambdas ou objets pour implémenter une interface.
Une autre présentation Bonus, plus facile à suivre, est “Kotlin Under the Covers”, par Romain Guy et Chet Haase de chez Google. Le principe de ce talk était de prendre des constructions syntaxiques simples en Kotlin, de les compiler en byte code, puis de les décompiler vers du Java, et voir ce que ça donne.Les résultats sont parfois très surprenants.
Ma dernière présentation Bonus est un quickie, ces mini-présentations de 15 minutes. Celui-ci avait la particularité d’être présenté par deux jeunes gens de 18 et 20 ans, qui nous racontaient comment ils ont gagné leur argent de poche en développant des mods pour Minecraft. La progression depuis “Je joue”, vers “Je développe mes mods en Java”, puis vers “Je me forme au PHP pour développer mon site”, pour finir au “Je vais jeter un coup d’oeil au Go parce que ça à l’air intéressant” me fait poser des questions sur ce qui a bien pu se passer dans le cheminement de mon propre fils qui est passé du “Je développe des jeux en Scratch” au “J’ai fait un peu de Python pour voir mais finalement je préfère encore jouer”. Mais je garde encore espoir qu’il se remette à la programmation un jour…
Keynotes
Finissons par le commencement. Chaque année, Devoxx débute par des keynotes d’une grande qualité. Cette année ne fait pas exception et nous parle d’un sujet qui nous touche de près. En effet, nous avons la chance de travailler dans un milieu qui est aussi notre hobby, mais la question se pose souvent: j’aime bien ce que je fais, j’apprécie mes collègues, mais suis-je heureux? Je vous conseille vivement de visionner les présentations de Christian Fauré, “Le bonheur au travail: au delà du bullshit”, et d’Olivier Lajous, “La bienveillance en entreprise”.
La dernière keynote, présentée par Jérôme Petazzoni, bien connu dans le monde Docker, “Le refactoring le plus difficile de ma carrière”, nous montre que même quand tout à l’air de bien aller, les dangers du burndown et de la dépression guettent.
Conclusion
Encore une fois cette année, Devoxx fut un énorme succès. La possibilité de passer d’une track à une autre, de parler avec les exposants qui nous bombardent d’autocollants, de bonbons, de pop-corns, etc., les rencontres avec les anciens collègues, tout ceci nous fait oublier la catastrophe du déjeuner, et nous donne suffisamment de motivation pour supporter le train-train quotidien, les incidents de prod, les décisions bizarres d’“architectes”, les fonctionnements improbables de l’administration… Bref, vivement l’année prochaine.