 Bon, je reviens deux semaines de Hellfest, donc je suis un peu oblique, mais ça va bien se passer. Je ne suis pas là pour vous parler des vacances, je suis là pour vous parler de Delicline, qui est un projet open source qui a été développé en partie au Quarkus. Et en deux mots pour vous le présenter, ça va vous permettre d'allumer et d'éteindre vos environnements Kubernetes de manière quotidienne à heure programmée. Pour vous en parler, je vais d'abord vous donner un petit peu de contexte. Il y aura beaucoup de chats, je suis resté bloqué dans les années 2010, tu as des chats partout. Je vais déjà commencer par me présenter pour vous donner un peu de contexte. Moi c'est Guillaume, je fais quelques années, je pose dans la formatique depuis un petit moment, je fais beaucoup de Java, pas mal que vous l'avez mis en base en Java. Et là en ce moment je travaille chez AXA France en tant que Machine Learning Engineer. Derrière le nom qui claque, il y a un vrai boulot. Alors on est encore en train de le définir. Mais mon job, Montaf, ça va être d'accompagner les data scientistes dans la mise en place, la mise en production, la mise à l'échelle de leur solution d'artigens artificiels et plus particulièrement de Machine Learning. Quand je parle de solution de Machine Learning, c'est très spécifique, c'est du temps réel. On va parler de temps réel, donc en gros, c'est des API. Et on va travailler particulièrement sur ce qu'on appelle du document de procès signe. Donc ça va être du traitement sur des documents. En gros, vous avez un document d'entrée, ça peut être un PDF, un email, une image. Vous le donnez à l'API, l'API va faire du truc. Ça peut être détecter une rature, détecter une signature, détecter l'orientation de la document. Ça peut aller jusqu'à faire de la reconnaissance de caractère. OCR, comme on dit. Donc ça a encore assez jeune chez nous. On est en train de développer un peu tout ça. On a plusieurs use cases, mais quand on a commencé, on avait deux use cases principaux, je vais pas mal parler par cette présentation, qui est une API qui permet de faire de la reconnaissance de caractère justement sur des permis de conduire, des permis de conduire français, anciens, nouveaux. Et également sur ce qu'on appelle un relevé d'information. Ça c'est un document typique assurantiel. C'est ce que si un méton demain vous souhaitez changer d'assurance auto pour aller chez AXA, ce qui est une très bonne idée. Il y a de fortes chances que l'agent ou l'agente qui vous fait passe vous demandera un relevé d'information. C'est un peu votre fiche d'assurer. Donc va retrouver votre bonus-manus actuel. Malheureusement, les sinistres que vous auriez pu avoir sur le véhicule qui assure. Donc c'est les deux premiers sujets qu'on a mis en place sur la table. Et ça peut être assez complexe. Je vous ai mis un exemple. Alors c'est pour un autre document. Vous connaissez bien celui-là. C'est Gert National d'identité. Pourquoi complexe ? Parce qu'avant de faire de la reconnaissance de caractère, il peut se passer plein de trucs avant. Il n'y a pas juste prendre l'image et vous vous extraire les caractères. Alors il y en a qui peuvent le faire. Mais là on est plutôt sur une cinématique où il va se passer beaucoup de choses. Et là, dans ce que vous voyez là, il peut y avoir une IA là par exemple. Il peut y avoir une IA là. Il peut être aussi juste de l'algorithmie. Mais voilà, on a pas mal d'étapes comme ça. C'est assez complexe. Et c'est vu qu'il peut y avoir des IA à chaque fois. En fait, ce qu'on se dit, c'est que ça fait partie de notre boulot d'ML engineer. C'est aussi d'apporter des solutions en termes d'architecture. On va plutôt faire du microservice. Donc j'ai une API là, j'ai une API là, j'ai une API là. Chaque étape c'est une API finalement. Comme ça on peut donner des ressources à chaque API d'une manière autonome. Donc voilà. Je sais pas si je l'ai dit. On travaille avec des data scientistes sur ces solutions-là. En général, ces solutions-là sont développées en Python. Où je vais en venir là-dessus, c'est que quand on a voulu le mettre en production, en tout cas quand on a voulu le livrer sur nos infras, on avait plusieurs choix. Traditionnellement chez AXA, on a une infra, on travaille avec Azure. Donc on est tout sur le cloud Azure. Une grosse partie en tout cas. Et on travaille en ModPass. Donc le ModPass c'est Azure nous fournit un Tomcat par exemple. Je parlais de Java. Et puis moi j'ai pas besoin de gérer le Tomcat. Je viens avec mon livrable, un voir. Et puis je m'occupe que de ça. Là pour ces solutions-là, étant donné qu'on est en mode microservice et qu'on va faire du Python, on s'est dit que ça serait un peu plus aisé de changer un petit peu de manière de faire et de partir plutôt sur une infra type container. On part sur du container as a service. Donc là je vais étonner personne. On va faire des dockers ici. Ce qui va changer c'est que là ou avant, pour choisir du Java, mon livrable c'était un voir en ModPass. C'est un peu plus compliqué parce que j'ai toute une image à définir. Et c'est aussi beaucoup plus souple. Parce que je vais pouvoir faire beaucoup plus de choses dessus. Je vais pouvoir décider la version de Python que je vais mettre sur le système de l'image que je vais définir. En Machine Learning, il peut arriver aussi qu'on est un peu vite. Sur le Python, on va installer des libres de Python dessus. En fonction de chacun de nos API, elles peuvent être différentes. Et puis on peut avoir aussi des softs qu'on va devoir installer sur l'image. Machine Learning c'est courant. Donc ça c'est pour la partie docker. Et puis pour orchestrer tout ça, ben pareil. Je pense que personne ne va tomber de sa chaise. On va prendre plutôt du Kubernetes. On a travaillé avec notre partenaire de confiance qui est redate pour travailler avec OpenShift. Donc ça c'est l'infrastructure qu'on vous donne. Donc on a travaillé avec ça. Au Ben, le groupe AXA aministre déjà un OpenShift. Moi je suis content. Alors oui parce que je ne vais pas préciser AXA France est une entité du groupe AXA. Donc il y a plein d'entités pour plusieurs pays. Et le groupe, ils se sont dit bah voilà, nous on a un OpenShift. On le met à disposition aux entités du groupe AXA. Ça c'est cool. Je n'ai pas besoin de l'administrer moi-même. Moi j'aime bien. Ils tombent sur un Azure. Et puis voilà, on a un OpenShift qui est là. Et puis ben moi ma responsabilité elle est là. J'ai juste à m'occuper de ça. Petit pote là. Oui, est-ce qu'il y a des gens dans la salle qui ne sont pas très familiers avec Kubernetes? Je vais peut-être faire... Je ferai un peu de vulgarisation alors. Ah ok, pas de soucis. Le pote en fait c'est là-dedans que le conteneur va tomber. En gros, c'est le pote. Le conteneur va tomber là-dedans. Donc c'est pour ça que moi je suis plutôt d'une raison de ce machin. Donc on commence à itérer. On travaille, on travaille. On travaille avec les data scientistes. On fait du clean code. Parce que c'est aussi ça notre boulot. On a un petit peu un poste de tclid aussi. On va les accompagner. On va faire des revues de code. On itère, on itère, on itère. On livre rendez-vous en recette en pré-prod et prod. On est super contents. Sauf que crack, problème. Ça coûte très cher. Ça coûte un bras. Ça coûte même deux bras. Ça là ce que vous voyez là. Alors je ne peux pas vous mettre les vrais chiffres. Mais ce que vous voyez là, c'est le couple par mois en infra sur la dev recette pré-prod prod. Des deux use cases dont je vous parlais de tout à l'heure. La reconnaissance du permis de conduire et celui du revue d'information. Autant vous dire que, encore un chat, autant vous dire que là on n'était pas jouasse. C'était pas top top. Et puis on a des experts finops aussi, je suis avec ça. Qui, chez eux, ça clignotait rouge partout. Ils disent vous là, vous là, des égafes là. Là c'est cher votre truc. Et il fallait qu'on cherche plein de solutions. Donc on a réfléchi. Ça nous arrive. Et aujourd'hui on est content parce qu'on a divisé nos coups par 10. Alors pour les façons observateurs, là, il y a 10 fois plus que 10 que celui-ci. Vous avez le bien. Donc on a divisé nos coups par 10. Ce qui est déjà beaucoup plus supportable. Alors pour faire ça, on a développé plein de trucs. On a cherché plein de solutions. Évidemment, il y avait de l'optimisation. Parce que le délivrier, ça a sa vie. Donc on a optimisé un petit peu. Il y a des API où par exemple, on s'était dit, on avait fait du machine learning, peut-être qu'on va faire plus de l'algorithmie, plus standard. Ça nous coûtera moins cher. On va peut-être sacrifier un petit peu de précision en termes de, comment dire, de détermination de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce qu'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, de ce que l'il y a, bien d'en faire. Traditionnellement, là je vais parler d'accent général, ce ne sera pas forcément sur les musclés que l'on parle. Traditionnellement, on se dit que quand on livre un truc jusqu'en prode, on le laisse tourner 24 heures sur 24, c'est le jour sur 7, 12 mois par an. Ça, c'est la base, moi, j'ai beaucoup vu. Sauf que, on en parlait tout à l'heure, les gens n'aiment pas travailler la nuit, moi pas, et les agents de chez AXA non plus. On peut se dire que si on se prend une tranche horaire de 12 heures par jour, on commence à 8 heures du matin et on finit à 20 heures, par exemple, 1 heure pour les lefts au réveintes pour les couches tard, on n'est déjà pas trop mal. Alors évidemment, ça peut se monitorer aussi. On peut se dire qu'en fonction de la première utilisation et de la dernière, on peut... Mais là, pour l'exemple, je trouve assez parlant, on peut se dire en 12 heures, on est déjà bien. Parce que les applications qu'on fournit chez AXA souvent sont à destination des agents qui travaillent à une agence AXA. Comme vous, ils n'aiment pas travailler le week-end, ils n'aiment pas travailler le week-end, moi non plus. On peut se dire, sur 5 jours au réveil, c'est déjà bien. On peut éteindre l'applicatif le week-end. En gros, ça, concrètement, pour une application, ça peut être le besoin utile de... On veut que l'application soit... Je ne refais pas tout le calcul, je vous laisserai le refaire chez vous si vous voulez. Moi, je l'ai refait de mon côté. Mais en gros, si on se dit, voilà, sur une application qui sert que les jours ouverts et que 12 heures par jour, en gros, autre fois, je vous laisserai refaire le calcul, votre application ne sert à rien à 67% du temps. C'est énorme. Moi, ça m'a... Je l'ai vu, ce truc-là, parce que c'est un calcul, ça a l'impression de 3, toute bête. Quand on voit ça, on se dit, bon, ce n'est pas très green-ighty, tout ça. Et puis, ça coûte cher. Surtout quand on est sur des systèmes comme les notes, c'est lourd avec du machine learning qui consomme pas mal, qui peuvent consommer pas mal. Donc, il faut trouver une solution. Et là, on est d'accord, je parle que de la production. Votre pré-prod, d'iso-prod qui sert 3 fois l'an, ce n'est pas 67%, ce sera beaucoup plus. Donc, ça coûte cher, tout ça. Il y a un truc que j'ai oublié tout à l'heure, étant donné que la plateforme OpenShift est managée par le groupe AXA, elle est refacturée par le groupe AXA avec sa France. La manière qui a été choisie pour facturer la plateforme OpenShift, c'est un coût au gigant de mémoire réservé. Donc, pour un gigant de mémoire, ça va nous coûter X euros. Donc, tout à l'heure, quand on était à des dizaines de milliers d'euros par mois, il y avait de la RAM. Et pour faire une petite allusion à une pub célèbre, je ne vois pas bien d'ici, j'espère que vous voyez. C'est pas Versailles ici. Donc, je viens à TIG et j'aime bien en parler. Donc, l'idée, ça va être de proposer une mécanique qui va permettre d'éteindre nos environnements quand on n'a pas besoin. Je vous propose une petite démo. Alors, si vous voulez jouer avec, comme je le disais, le DELiClean est open source. Vous allez le retrouver sur l'edit up ici. Si vous disposez d'un docker desktop sur votre machine, vous avez la possibilité de pouvoir démarrer un cluster qu'il mérite dessus. Et une fois que vous faites ça, on vous a mis à disposition quelques scripts et puis quelques lits de commandes. Vous copiez-collez ça dans votre terminal préféré. Et vous avez un DELiClean qui tourne avec quelques pods qui servent pour l'exemple. Pour assure, ça n'a pas miné du bitcoin. C'est juste des petits services qui tournent. Il n'y a pas de piège. Mais pour que ça soit plus graphique pour vous, parce que faire une démonstration avec Kubernetes, c'est pas forcément très parlant. On va utiliser plutôt un OpenShift. Alors, je vais vous révéler un petit secret. Tant qu'on est entre nous, on est en famille et que personne de chez Redat n'écoute. Vous avez la possibilité d'avoir un OpenShift, une Web Sandbox gratuite. Vous créez un compte Redat et puis vous avez à disposition un OpenShift qui est disponible pendant 30 jours. Vous permet de jouer avec. C'est super cool. Je vais en servir ici. Là, je suis sur ma Sandbox. Un autre truc qui est super cool avec cette Sandbox, c'est qu'il y a un terminal. Tout ce que je vous montre depuis tout à l'heure. Vous le retrouverez ici dans le GitHub. Je vous repartagerai un lien, quelques lignes de commandes pour jouer avec. Un OpenShift gratuit pendant 30 jours, renouvelable avec un petit terminal. Pareil, je vous repartagerai ce lien-là sur mon GitHub. Vous retrouverez le PPT qui est là et également quelques scripts et quelques lignes de commandes pour lancer la démo qu'on va faire ensemble. Je colle les petites lignes. Ce qu'il fait, c'est qu'il va cloner le projet de présentation parce que dedans, j'ai des scripts Kubernetes et puis on va créer tout ce qu'il faut bien. Un délicline, une instance de délicline et puis les fameux 3 APIs qui ne minent pas du Bitcoin promis. Ce qui est bien, c'est qu'avec OpenShift, on a une belle vue. On a des fameux effets démo tout à l'heure. Je crois que Zinem n'a pas été la seule à être embêté avec ça. Ça va vous ? Ça va pas marcher ? C'est juste que c'était trop zoomé. On a des naufits en Kubernetes. Ce que vous voyez, les ronds, c'est la représentation de vos pods. Plus précisément, le petit dé ici, c'est pour déploiement. En fait, vos pods, vous allez définir le pod dans ce qu'on appelle un déploiement. Dans le déploiement, vous mettez l'image des conteneurs qui sont utilisées pour les pods. Vous pouvez mettre le nombre de répliques que vous avez besoin parce que tout est répliqué. Je ne l'ai pas dit tout à l'heure. L'avantage d'avoir un orchestrateur comme Kubernetes, ce n'est pas que pour faire joli, c'est pour apporter une couche de sécurité supplémentaire, faire du load balancing, faire du blue green, tout ce genre de choses. Le déploiement ici, il va servir justement à définir le pod. Encore une fois, le conteneur qui sera dedans. Mais également, comme je le disais, les répliques, c'est là qu'on va définir les ressources dont on a besoin pour faire tourner notre service. Ici, vous avez Delyclin qui est là. Il y a un petit lien ici. Je vous mets l'URL et je vous présente Delyclin. L'interface, c'est développeur React par Guillaume Chervais. Petite précision, dans Kubernetes, vos environnements sont rangés dans ce qu'on appelle des namespace. Vous avez des projets ou namespace. En fait, comme ça, on a un namespace pour environnement. Sur le permis de conduire, par exemple, j'ai un namespace pour le permis de conduire de dev, un namespace pour le permis de conduire de recette très propre. Ce qu'on a cherché à faire pour des questions de droit d'accès, ce qu'on a fait, c'est que Delyclin, on a une instance de Delyclin qui tourne par namespace. Vous l'avez répliqué partout, surtout vos environnements. C'est ça qui, dans ma fenêtre, j'ai un équipulatif qui me dit dans quel namespace je me trouve. Ça me permet d'éviter d'éteindre la prod alors que je travaille sur la dev. Ça, ça peut être très pratique. L'idée, c'est qu'il est emmené qu'on a une interface. On peut la partager aussi à nos PO, à nos testeurs. Ce n'est pas forcément qu'un outil que pour nous. Ça peut être mis à disposition de ceux qui se servent de vos environnements. Ce qu'on peut faire, c'est qu'on peut éteindre l'environnement. Si je clique sur off et je clique sur submit, ce qui va se passer en live devant vos yeux ébaillis, c'est qu'on va avoir des trucs qui vont se créer. Je reviendrai tout à l'heure sur ce que c'est que ce machalard. Je vais parler tout de suite. C'est un job. Ce job-là va exécuter un script piton qui va se charger de faire la partie Delyclin. Comme vous pouvez le voir en direct, il y a un peu de latence. Mais ici, mes pods sont en train de se terminer. Ils sont en train de s'éteindre. Donc là, avec ce panneau-là, je peux allumer éteindre l'environnement à la volée, ce qui peut être très pratique. Donc on va le laisser travailler. Ici, on a une petite pastille avec un état qui va vous dire que votre environnement est stop. Il est en cours de démarrage, d'extinction, il est en route. Et ici, vous allez retrouver un récapitulatif de tous vos déploiements. Tous les déploiements qui se trouvent dans votre name space, donc tout ce qui se trouve dans votre environnement. On a le Delyclin qui s'y trouve. On a mes Kubernetes bootcamp, mes trois APIs qui ne servent à rien. Et puis ce machin-là qui est utilisé par l'OpenShift, la DevSumBox. Comme vous pouvez le voir, on a un code couleur différent. Rouge, ça veut dire qu'actuellement le pod, en tout cas le déploiement, le pod et l'état. Ici, vous allez retrouver le récapitulatif des réplicats. Là, j'en ai un pour Delyclin, par exemple. Là, j'en ai zéro sur zéro actuellement à exécuter. Je vais le rallumer. Quand je rallume, j'ai nouveau un job de Start qui s'exécute. Et j'ai de nouveau mes pods qui sont dans un état de... Il est pending, il est en train de démarrer. Comme ça, je vous l'ai fait dans les deux sens. J'ai la pastille qui se montre une progresse, la started. Là, c'est en rouge tout à l'heure. Là, c'est en bleu. Ça veut dire que concrètement, mon pod est en route. Les pods qui composent mon déploiement, il y en a un sur un parce que je n'ai pas de réplicats, sont démarrés. Vous avez également un récapitulatif des coûts. Là, c'est des coûts estimés. Par mois et par année, ça peut être très pratique. Ça, c'est calculé, comme je vous le disais tout à l'heure, par rapport aux gigas. On a un prix aux gigas. Par rapport aux ressources qu'on a paramétrés, on fait une petite estime, une petite multiplication. Et puis, voilà, on retrouve des coûts. Ça, c'est paramétrable. Et là, on va enfin arriver dans le dur du Delyclin, c'est-à-dire la partie programmée. Parce que je vous disais tout à l'heure en introduction que c'était programmé tous les jours, où on démarre, où on est à l'environnement. Donc, c'est ça qu'il le fait. Donc, ici, je vais le mettre en démarrage à 7 heures du matin, par exemple, parce qu'on commence tôt. Extinction à 16 heures parce qu'on finit tôt. Vous avez le choix de dire, je veux démarrer mon environnement jour-ouvré ou tous les jours de la semaine. Ça peut être utile. Vous pouvez aussi faire l'un sans l'autre. Moi, j'aime bien faire ça. Par exemple, c'est-à-dire que je n'allume pas le matin, ma préprote qui sert trop fallant, par exemple. Je n'ai pas besoin de l'allumer tous les jours. Si un testeur ou un producteur a besoin de le démarrer, il le démarre lui-même à la main. Mais j'ai au moins la garantie qu'il est éteint tous les jours. Je vais faire ça. Non, je vais mettre les deux. Je suis mythe. Et là, ça va créer ce qu'on appelle des cron jobs. Donc, en gros, un cron job, c'est tout simplement, ça va exécuter un job de manière planifiée. Qu'est-ce que j'aurais pu oublier? Oui, le code couleur. J'oublie un truc. On a lui là et lui qui sont en gris. En fait, ça veut juste dire que Déliklin API et Workspace, CAD, BE, etc. ne sont pas éligibles au Déliklin. On n'a pas envie que Déliklin se fasse acquérir. Donc, c'est une API. Donc, en fait, ce qu'on fait, c'est qu'on utilise une mécanique de libellée qui va permettre de dire, toi, déploiement, pardon, Déliklin API, tu ne t'éteins pas, s'il te plaît. Je précise parce qu'on s'est fait avoir. Et Workspace pareil, c'est quelque chose qui est utilisé par MaSoundbox. C'est ce qui me permet d'avoir mon terminal. C'est très pratique. Je vais éviter de le tuer aussi. Donc, voilà pour la démonstration. Qu'est-ce que je peux montrer d'autre? Alors, sur le principe, parce qu'en fait, je vous ai dit qu'il y avait des jobs, des cron jobs, je ne vous ai pas dit ce qu'ils faisaient. En fait, pour ceux qui ne sont pas familiarisés avec Kubernetes, alors ce qui est pratique à OpenShift, c'est qu'on peut aller dans le détail. Voilà, j'ai mes pods ici. Donc là, ils sont tous allumés. Qu'est-ce qui se passe si j'essaie de supprimer un pod? Elle me demande si je veux, il dit oui. Et en fait, il se termine d'à côté, mais il redémarre de l'autre. C'est normal. Concrètement, le déploiement, on lui a dit, on veut un réplica, il va se charger de garder en fait toujours un pod actif. Concrètement, on ne peut pas dire, tiens, je supprime le pod, ça ne suffit pas. Donc le job ne fait pas ça. Par contre, ce qu'on peut faire, c'est aller travailler avec les déploiements. Si je prends celui-là, par exemple, où j'ai défini mon nombre de réplica à 1 ou pas, parce qu'il y en a un qui est en train de se terminer. Donc là, il y en a qu'un qui est actif. Ce qu'on peut faire, par contre, si on veut ne plus voir les pods, c'est passer le nombre de réplica de 1 à 0. Si je fais ça, je reviens sur mes pods. Mon pod, là, il est en train de se terminer et il n'est pas en train de se recréer. Il n'est pas en train de revivre tout seul. Donc le principe de Daily Clean, finalement, le job, en fait, il fait ça. C'est un script piton. Il va distayer les déploiements et puis il va passer le nombre de réplica de x à 0. Et processus inverse, pour redémarrer, il va le passer à plus de 0. Donc là, il est en train de terminer. Si je veux le remettre en ordre de marche, ce qui est le tout 1 et puis voilà. Voilà un peu à quoi ça ressemble. Je vais revenir à ma présentation. C'était actuel. On va par contre au début. C'est très dommage. Donc comment ça marche ? On vient d'en parler. Je voulais montrer un petit peu. En gros, pour récapituler, on a un grand job qui, de manière à ce qui est du lait, va s'exécuter. Il va créer ce qu'on appelle un job. Et ce job-là va exécuter un script piton qui va se charger de faire ce qu'on se disait de tout à l'heure. Vous avez une petite vue ici récapitulative qui vous décrit un petit peu à quoi ça ressemble. Alors on a un front. C'est le front que vous avez du tout à l'heure qui en réacte. On sort des élections, c'est pour ça. Une API ici sur laquelle votre service-teur a travaillé. C'est celle qui est encore Scus. C'est une API qui va travailler directement avec l'APQ Mernet S et c'est grâce à elle qu'on va créer un autre job et notre job en fonction de son dont on a besoin. Voilà à quoi ça ressemble. Comme je disais tout à l'heure, le front a été développé par Guillaume Chervais, l'API par moi-même et toute la partie conception et la partie mise en place du piton par Pierre-en-Régach et Thomas-leur Merchant que je salue si ils nous regardent actuellement. Maintenant, je vais justifier le choix des technos pour l'API. Je pense que c'est intéressant. Alors étant de l'ex, c'était moi qui devais le développer. Même si je roule ma bus en Java, moi je voulais avec une stack qui était facile à prendre main. Il fallait que ce soit facile à développer. Et puis il y avait un autre truc, un autre critère qui était vachement important. C'est que, comme je disais tout à l'heure, dès l'API, l'API tourne dans tous les environnements, dans tous les namespace. Si on veut éviter que la solution soit pire que le problème, on va éviter d'avoir une API qui fait 400 gigadrammes. Ce qu'on veut, c'est qu'on est en train de traiter de mémoire la plus petite possible. C'était très important pour nous. Donc on a commencé à brainstormer avec mes trois copains que j'ai cités tout à l'heure. On s'est dit, comment on le fait ? Et puis on a dit qu'on va le faire en go. J'ai raconté go en fait. Je ne connais pas bien, je ne connais pas bien cette stack. Et puis chez AXA, personne ne sait faire de go. Donc il fallait qu'on trouve une autre solution. Pourtant, c'était probablement une très bonne solution aussi. Je connais bien le Java. On s'est dit qu'il y a peut-être un truc à faire avec GraalVM et avec Quarkus. Il y en a déjà bien parlé tout à l'heure et je pense que Sebastien va beaucoup en parler par la suite. Je vais quand même faire quelques petits rappels et puis vous expliquer pourquoi moi ça m'intéressait. GraalVM, c'est une JVM qui est proposée par Oracle. Elle fait plein de trucs super cool. Il y a un truc que moi j'aime bien, c'est qu'elle a une copilation par anticipation. Alors, à contrario du mode Just In Time, ce que l'on fait d'habitude, on a à voir qu'un genre, enfin on fait du bad code qui est interprété par la JVM et qui est exécuté par la JVM. Là non, on a en fait, là avant notre livrable c'était ça, maintenant c'est un exécutable. En fait, cet exécutable, là il tourne tout seul. Il n'a pas besoin de JVM pour tourner. Ça, c'est plutôt bien. Surtout quand on est sur du conteneur, ça évite d'installer des JVM sur tous les conteneurs. C'est déjà ça de prix. Et puis surtout, surtout. Alors déjà, ça démarre plus vite. C'est cool. Et surtout, l'emprunt de mémoire est plus petit. Je n'ai pas besoin de JVM sur mon conteneur. Donc tout est porté par un petit exécutable. Donc ça, ça me plaît. Ça me plaît beaucoup parce que c'est ce que je cherchais. C'était vraiment limité au maximum ma mémoire. En consumé. Et Coercus, pourquoi ? Parce que pareil, je ne veux pas vous en reparler. Sébastien, vient de là-dessus beaucoup. Et Zineb a déjà bien parlé. Moi, ça me permet effectivement, je ne savais pas de tout refaire en java, en pure java, ça m'aurait gonflé. Donc non, Coercus mieux. Et Coercus qui fait très bien, c'est qu'il est déjà compatible en mode native, comme ils disaient Zineb tout à l'heure. Et donc ça, c'est chouette. Ça, c'est chouette et ça, ça m'intéresse. Donc on parlait dessus. En gros, c'est une espèce de spring boot qui fonctionne en modalité. Et je vais vous faire une petite expérience ensemble. On va faire ça. Ça va être cool. On va éviter de faire la même erreur. En fait, ce que je vous propose de faire, c'est de faire une observation. Alors, ça ne va pas être une vraie méthode scientifique. Et d'accord, ça ne va pas être un vrai bench. Mais ce qu'on peut faire, c'est faire un projet hyper compliqué, genre un Hello World en Coercus, par exemple. J'en ai fait un spring aussi. Alors pourquoi spring, ce n'est pas pour taper sur spring. J'adore spring. C'est mon outil de tous les jours. J'utilise tous les jours depuis des années. Mais vu que c'est ce qu'on utilise chez AXA France, on dit, tiens, tant qu'à faire, on va compter avec des trucs que je connais. Donc, il n'y a rien de fou là-dedans. C'est un petit projet. On dit Hello, il répond Hello. Non, je ne connais même plus mon code. Voilà. On a une route, Hello. Et puis, il répond Hello, ça c'est bien. Très compliqué. Et j'ai le même en Coercus. Alors, par souci d'équité, étant donné que Coercus utilise Jacques Serres, j'ai utilisé Jacques Serres aussi côté spring, parce qu'il est comparable. Donc, il y a de Jersey de deux côtés. Et là, c'est la partie Coercus. Elle fait la même chose, sauf qu'il répond Stizzy. Donc, ce que je vais faire, c'est que le projet Coercus, je vais le compiler. Alors, Zineb, vous l'avez montré tout à l'heure. Je vous le refais, comme ça vous le connaîtrez par cœur. Alors, moi, j'utilise ma vanne. Donc, on a un profil active. Ça peut être long. Donc, en même temps, je vais builder mon genre spring. Pour ceux qui ont été observateurs, il y a des petits chats aussi. J'ai les 4 qui se baladent un petit peu partout sur mon truc. C'est normal. Ne vous inquiétez pas. Donc, je build. J'ai une machine de la NASA. Donc, concrètement, la compilation de la partie native va se faire assez vite. Ah oui, je n'ai pas précisé. Étant donné qu'on génère un executable, donc code machine. Il nous faut un compilateur C++. C'est pour ça que vous avez ici un terminal différent. J'ai un terminal Visual Studio avec toutes les librairies C++ qu'il faut pour que ça marche. Turbine tourne. En attendant que ça soit terminé, côté spring, c'est fini. Ce que je vais faire, c'est que je vais l'exécuter. Je vais le faire en mode justin time. Donc, j'ai une JVM qui est installée. On va faire un truc simple. On l'a mis un peu moins de 3 secondes pour démarrer. On va tester notre API de la moitié qui est hyper compliquée. Est-ce qu'elle va marcher ? Attention. Hello. Ça, ça marche. J'attire votre attention sur... On va regarder un petit peu le truc. On va voir sur parole. Concrètement, le jar que j'ai exécuté. Mais c'est pas académique du tout. C'est juste un test en local pour se donner un ordre d'idées. Mon Nailower dans Spring Boot prend un peu près ça en termes de mes mains. On ne rêve pas. 420. C'est beaucoup. C'est probablement justifié. Une fois, je ne veux pas charger Spring. Il n'y a pas de souci. On va faire la même chose avec la partie Quarkus. Comme vous pouvez le voir, j'ai un petit exé. On va l'exécuter. On va éteindre l'autre déjà. C'était bien celui à 418. On exé. Il est là. Un truc à noter, c'est qu'il est démarré là. Il n'a pas mis 2 secondes. Ce qui est pas mal. Ça peut être utile. Concrètement, le fait qu'il est démarré vite, je m'en fiche un peu. Par contre, pour d'autres applications, ça commence à me parler. Il y a des trucs qui me parlent. On en reparlera après. Si je regarde mon terminal, on va arrêter ça un peu moins. Là, il est là. Il fait 12 méga. Qu'il puisse compiler. Ce n'est pas la même chose. On n'est pas sur les mêmes rapports. C'est beaucoup moins. Encore une fois, ça m'intéresse. Le choix de la techno était plutôt heureux par rapport à ce qu'on cherchait à faire. Quand j'ai vu le différentiel entre les deux, j'étais un peu mindfucké. Déjà, avoir un exécutable avec du Java dedans, c'était déjà un truc j'avais du mal à l'imaginer. En plus, il démarrer vite et il prend si peu de RAM. Là, on s'enjaille. C'était bien. Je vous ai mis en braque des petits points que je voulais aborder avec vous. Il y a un truc qui nous rassurait beaucoup dans le fait de choisir Quarkus. C'est que, évidemment, c'est supporté et développé par Redat. Nous, on est en confiance. On avait parlé un petit peu. On a choisi qu'on était complètement en confiance. Ce que c'était des technos qu'on connaissait et qu'on n'a jamais utilisé. Que ce soit GraalVM ou même Quarkus. Il y avait un truc aussi qui nous rassurait dans le fait qu'on pouvait utiliser ces technos-là pour une première tentative d'utilisation de GraalVM et de Quarkus. C'est que, concrètement, DailyClean n'est pas un projet business. Et c'est, aujourd'hui, encore moins un projet qui tourne en production parce que nos environnements de prod, surtout sur la partie machine learning, on ne l'éteint pas. Peu de risques à se dire, tiens, si jamais on ne maîtrise pas bien les technos, qu'est-ce qui se passe ? Non seulement on est accompagné, mais en plus, le risque était plutôt mesuré. Au pire, on gâchait de la ressource. C'est dommage, mais pas de retomber business. Et moi, il y a un truc là, on en parlait tout à l'heure. Le fait que ça démarre super vite, ça m'ouvre plein d'opportunités en termes de serverless, par exemple. Si j'avais parlé tout à l'heure avec les fonctions, tout ça. Ça me branche bien. Faire du Java qui démarre vite, il y a moyen de faire des trucs assez intéressants. Avec du Kafka, avec tout ce qu'on a vu tout à l'heure, c'est très inspirant en tout cas. Traditionnellement, je fais une revue de code. Je ne sais pas si on aura le temps. Je ne me suis pas chronométré. On peut peut-être se laisser un peu de temps pour les questions. C'est vrai ? Je vais parler super vite. C'est trop bien. On y va. Si ça vous dit, on regarde un petit peu. Bon, j'ai fait tomber mon ITIG. Vous dès les clines, c'est un projet Quarkus, en tout cas sur la pays. On ne va pas regarder la partie Front, parce que je ne maîtrise pas bien. Alors à quoi ça ressemble ? Qu'est-ce qui est intéressant à voir là-dedans ? Bien sûr, je vous laisserai revoir le code dans GitHub. Vous pouvez me poser toutes les questions que vous voudrez. Il n'y a pas de problème. Je serai disponible. On a une partie à pays. C'est là-dedans qu'on a du Quarkus. On ne s'est pas embêté. On a pris comme Zinab avait montré tout à l'heure. On a pris tous les artefacts mavenes qui existaient déjà. On a révolutionné. Ça génère pour vous tout de suite un projet Quarkus près à l'emploi. C'est une API reste. On s'est amusé à définir où est-ce qu'il est. On a un swagger. On a un petit swagger. Est-ce que j'ai l'outil de vue ? Alors qu'est-ce qu'il fait ? Elle crée ce qu'on a appelé des time range. Je ne sais pas si le terme est bien heureux, mais ce qui va créer l'écran de job. Ce qui va vous permettre de planifier le démarrage et l'extinction de votre applicatif. On a une route qui permet de récupérer le statut. Ça vous permet d'avoir la pastille orange-verte rouge qu'on avait tout à l'heure qui dit je suis allumé, je suis en cours, je ne sais pas, je suis éteint. Également récapituler les informations de chaque déploiement. Et puis on a une route qui permet de démarrer et d'éteindre l'environnement. Tout simplement. Vous qu'on utilise ça. J'aime bien générer mes pojos à partir du swagger. C'est ce qu'on a fait. On n'aura pas les pojos dans le code. Qu'est-ce qui est intéressant à voir ? Du coup, j'ai des ressources. Qu'est-ce que je peux vous montrer de cool ? Ouais, on avait un problème. Il y a un truc qui est vachement bien avec Quarkus. Où qu'il est ? En France, on a un truc qui s'appelle l'heure d'été, l'heure d'hiver. Evidemment, ça peut poser problème. Concrètement, Vaucron ne se met pas jour tout seul. Ça dépend s'il serveur, lui se met à jour. Je vous rappelle, c'est des serveurs qui sont managés par le groupe. Ils ne s'embêtent pas avec toutes ces choses-là. Ce qu'on a fait, c'est qu'il y a une petite annotation qui est chouette, qui vous permet de définir un cron. Là, c'est pour l'heure d'été. À trois heures du matin, le dernier dimanche du mois de mars, je ne sais plus. J'ai plus le cron en tête. En gros, quand on doit passer à l'heure d'été, on fait un. Plus un, moins un. Plus un. Et heure d'hiver, l'inverse. C'est l'inverse de l'autre. On avance. Merci. Donc plus. En plus. Là, on l'a mis dans le code. Ça peut se paramétrer. Ça peut se rendre paramétrable. Si, effectivement, aux Etats-Unis, on ne peut pas l'utiliser telle quelle. Il y a moyen. Il faudra tuer un peu ça. Je n'ai pas dit tout à l'heure, mais c'est la complication par anticipation. Il y a un truc que le compilateur n'aime pas du tout, c'est la réflexion. Pas du tout. C'est pour ça que spring, alors, ils sont en train de travailler dessus, mais ils sont en train de travailler sur spring native, mais de base, spring en moda haute, c'est assez compliqué. C'est pour ça que j'ai pas considéré spring boot que je connaissais bien pour faire la partie native. Et donc, spring native arrive en prod fin d'année, je crois. Nous, on peut utiliser que quelque chose qui est déjà en prod et qui est déjà utilisé de manière qui est déjà réalisé. C'est en beta, mais on ne pouvait pas l'utiliser là. Comme je vous ai dit à l'heure, on a du pojo, donc on a de la séarisation, des séarisations de Jackson. Concrètement, ça utilise pour le coup de la réflexion. Il y a un truc qu'on peut faire, c'est en amont. Attention, ce truc-là, on verra de la réflexion sur ces classes-là. Ça permet au compilateur de l'anticiper, justement. Ça fait de la magie, c'est bien. Qu'est-ce que je peux vous montrer d'autres là-dedans ? Concrètement, ce que ça fait, j'ai un job, donc ça, c'est du Kubernetes. Je me suis fait un petit templating à moi qui permet de pouvoir, en fonction du fait que ce soit un job de start ou de stop, ainsi que le nom de l'image, qui est paramétrable. Donc l'image du script DelyClean, qui est utilisé. Voilà, donc tout est paramétré ici. Donc j'ai qu'un seul job, pardon, qu'un seul script, qui est appliqué directement et qui est donné à manger à la paye Kubernetes. Même chose pour le crône job. Il n'y a rien de bien méchant. Le crône job, qui encore une fois va s'occuper d'exécuter le script de manière planifiée. Et puis voilà. Je pense que je vais m'arrêter là pour la revue de code. Alors oui, le projet open source, vous le trouverez à cette adresse. Vous pouvez me contacter ici. Donc ça, c'est mon mail pro et puis vous pouvez me PM aussi sur Twitter avec ce tag-là pour me poser toutes les questions que vous voulez sur comment ça marche, sur le code, vous ne le comprenez pas, etc. Et si vous avez des questions. Après, il y a une question de virtuel, mais vas-y, vas-y. Est-ce que tu peux répéter sa question pour les gens ? La question, c'était est-ce qu'en gros, on ne pouvait pas faire du serverless sur l'application, sur nos applications qu'on avait pour pouvoir faire des économies et pas effectivement passer par tout cette mécanique-là. La réponse est bien sûr oui. Alors, le truc, c'est que là, dès les clins, ce qu'on fait, c'est qu'on le démocratise de la boîte. L'idée, c'est que chaque sa France, à chaque fois qu'on va aller sur OpenShift, les clins sera automatiquement mis en place. En fait, ma réponse va être un peu bête, mais on peut faire l'un et l'autre en fait, finalement. Donc oui, d'ailleurs, sur certains des applications, c'est déjà du serverless, mais voilà, on peut avoir un besoin autre. Et tu as une deuxième question ? Ouais ? Dès les clins, ouais. C'était la question, que moi aussi je voulais poser, je crois que je t'avais déjà posé la question. Non, on ne le fait pas en fait. Alors on pourrait, mais on ne le fait pas parce que ce qui est pratique avec le fait que ça soit une API, c'est que justement on peut le trigger de plein de manière différente. On peut entrer dedans, en fait. Et on a la partie on a un front qu'on peut partager avec le PO. Donc en termes d'applicatives, je ne suis pas sûr si on peut faire ça avec les opérateurs, on pourrait. Alors pourquoi pas après tout ? Mais la l'idée, c'était de se dire en plus on a crément. Donc ça peut être une idée. Donc merci. Merci beaucoup. Mais voilà, pour l'instant, c'est déjà on fait le plus honnête. Il faut faire un deep dive à l'opérateur. Ouais, c'est prévu. Mais tu peux en reparler. C'est d'autres questions. On n'entend pas le public. C'est pour ça que j'ai reposé. J'ai demandé de reposer la question. Donc, juste pour les gens en virtuel, la deuxième question, c'était la question posée aussi pour qu'on ait pu avoir fait un opérateur. Donc, il m'a répondu. Une question sur GraalVM. Mais plus général, est-ce que GraalVM est déjà utilisé en production ? Chez nous. Bah, chez nous, non. Pas encore. On cherche justement un projet pour pousser un peu le concept un petit peu plus. Moi, il y a plein de trucs qui m'intéressent. Je n'aurais pas parlé, mais dans GraalVM, je me suis concentré que sur la partie anticipée. Un truc qui me range bien, vu que je fais plein de pitons. Il y a peut-être des trucs sympas à faire aussi avec ça. On va commencer à expérimenter aussi de trop petites choses. Il est capable d'exécuter du piton, GraalVM. Ça, c'est peut-être sympa. Mais concrètement, chez nous, pour l'instant, non. Dans d'autres divisions d'axages, je sais qu'il y a des opérateurs faits en carcuse, compilés nativement, qui tournent en prod. Tout à fait. Et la personne qui me demandait ça a fait du spring ou on a dit spring. C'est pour bientôt. Donc on attend. Mais il n'y a pas de raisons que ça ne marche pas. Je lui conseille de migrer à la carcuse. Je ne vais pas te contredire. Il y a une question. Je vais te donner le micro comme ça n'a pas besoin de répéter la question. Bonjour. Pour moi, la question ce sera plutôt pour la facturation. C'est le CG. J'aimerais bien comprendre la facturation. Elle se base sur l'utilisation de mémoire. Ça veut dire dans les quotas et la réservation de mémoire. Je ne vais pas préciser. On est facturé de manière. On a deux types de mémoires. On a la mémoire réservée. Donc qui nous coûte un certain nombre je ne peux pas nommer les chiffres, mais un certain nombre d'euros. Ça c'est la partie réservée. Elle est moins chère. Par contre, on la paye tout le temps. C'est ce qu'on utilise plutôt pour la production. En fait, pour l'instant, on ne délicline pas nos applis de production. On utilise plutôt cette facturation. On a aussi de la mémoire on-demand qui est beaucoup plus chère et qui est payée que la console. On a ces deux aspects. Ce que c'est la formule magique avec OpenShift, c'est qu'on réserve les CPU et les mémoires par name space, préparé pour la facturation. On a atteint les produits tout ça. Si tu es sur du réservé, tu es toujours facturé. Je crois qu'il y a un petit je crois qu'il faut un peu de magie aussi, un côté groupe. Nous, on a effectivement ces deux aspects. On a la partie on-demand ou celle-ci, on gagne de la main. Merci beaucoup. Est-ce qu'il y a d'autres questions ? Oui. Je ne vais pas trop passer dans la caméra. Est-ce que vous avez de la demande de la part des projets de pouvoir étendre une partie des applications de la name space ? Juste une partie, mais pas tout le name space, c'est ça ? C'est une bonne question. Pour l'instant non, on n'a pas vu ce besoin là. Alors, délicline, on n'a pas vu du délicline que sur Kubernetes, mais chez AXA France, on a aussi un délicline pour toute la partie pass-assure qui est mise en place. Je ne sais pas jusqu'où ils vont dans le détail. Est-ce qu'on peut arrêter qu'une partie, par exemple, est-ce qu'on éteint les bases de données ? Ça, je n'ai pas l'info. En tout cas, de ce que je sais, c'est que là, ça étingue tout. On n'a pas eu de demande particulière pour arriver. Après, on a ce que j'avais montré tout à l'heure, le petit libélé qui permet de dire attention, toi, tu n'es pas allégible notamment le délicline API pour éviter qu'ils tuent tout seul. On a cette mécanique là qui permet de dire attention, toi, déploiement, tu ne t'éteins pas. Donc, on saurait le faire, en fait. Donc, il y a la mécanique qui existe. Ok. On peut écart déjà ou pas ? Il y a 19. J'ai vraiment parlé vite. Du coup, merci beaucoup, Guillaume, on peut l'applaudir. Merci. Merci à tous.