{"id":923,"date":"2019-05-13T17:18:15","date_gmt":"2019-05-13T15:18:15","guid":{"rendered":"http:\/\/www.loicmathieu.fr\/wordpress\/?p=923"},"modified":"2019-05-13T17:18:15","modified_gmt":"2019-05-13T15:18:15","slug":"devoxx-france-2019","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2019\/","title":{"rendered":"Devoxx France 2019"},"content":{"rendered":"<p>Cette ann\u00e9e, j&rsquo;ai eu la chance d&rsquo;assister \u00e0 Devoxx France, j&rsquo;ai m\u00eame eu la chance d&rsquo;\u00eatre speaker et de donner deux talks (<a href=\"https:\/\/www.youtube.com\/watch?v=fSCT2Jv4mDU&amp;list=PLbf9DSLhCPwTw_4IUA2Hne6nzGwInybBm&amp;index=5\">Mes premiers pas en deeplearning avec Keras<\/a> et <a href=\"https:\/\/www.youtube.com\/watch?v=e8CMlsMvIrc&amp;list=PLbf9DSLhCPwTw_4IUA2Hne6nzGwInybBm&amp;index=4&amp;t=0s\">Arthas &#8211; Alibaba Java Diagnostic Tool <\/a>), mais \u00e7a je vous en parlerais plus tard ;)<\/p>\n<p>Voici un petit compte rendu sur une partie des talks auxquels j&rsquo;ai assist\u00e9.<\/p>\n<p>&nbsp;<\/p>\n<h3>Quarkus: Comment faire une appli Java Cloud Native avec Graal VM (E. Bernard, C. Escoffier)<\/h3>\n<p><a href=\"https:\/\/quarkus.io\/\">Quarkus<\/a> est un tout nouveau framework Java OpenSource, d\u00e9velopp\u00e9 principalement par RedHat, pens\u00e9 pour le d\u00e9veloppement de microservice \u00e0 d\u00e9ployer dans le Cloud \/ dans des containers. A sa sortie il a suscit\u00e9 pas mal de question et semblais assez prometteur, c&rsquo;est pour cela que j&rsquo;attendais avec impatience l&rsquo;universit\u00e9 sur le sujet. J&rsquo;avais d\u2019ailleurs \u00e9crit un article sur Quarkus en cours d&rsquo;\u00e9criture (sorti quelques jour apr\u00e8s Devoxx), \u00e0 lire si vous ne connaissez pas Quarkus : <a href=\"https:\/\/blog.zenika.com\/2019\/04\/23\/zoom-sur-quarkus\/\">Zoom sur Quarkus<\/a><\/p>\n<p>Emmanuel et Cl\u00e9ment ont d\u00e9but\u00e9 par expliquer le pourquoi de la cr\u00e9ation de Quarkus : \u00e0 l&rsquo;\u00e8re des conteneurs, le temps de d\u00e9marrage et l&#8217;empreinte m\u00e9moire d&rsquo;une application sont aussi (plus) important que sa performance. Ce qui a men\u00e9 \u00e0 <a href=\"https:\/\/www.graalvm.org\/\">GraalVM<\/a> qui est en rupture avec la mani\u00e8re dont Java fonctionnais avant. De plus, les applications <em><strong>cloud native<\/strong> <\/em>ont des probl\u00e8mes sp\u00e9cifiques qu&rsquo;un framework doit couvrir : unreliability, autoscaling, \u2026<\/p>\n<p>Aujourd&rsquo;hui, les applications passent d&rsquo;une architecture monolithique \u00e0 une architecture microservice voir fonction (serverless) : on a donc un morcellement des artefacts de d\u00e9ploiement de 1 monolithe \u00e0 20 microservices ou &#8230; 200 fonctions !<\/p>\n<p>On a ensuite parl\u00e9 de <em><strong>Responsive<\/strong><\/em> et du probl\u00e8me de communication HTTP entre services :\u00a0 failures, limitation du syst\u00e8me de callback (thread pool, erreur au client, retry storm), &#8230;<\/p>\n<p>La JVM n&rsquo;a pas \u00e9t\u00e9 pens\u00e9e au d\u00e9part pour le cloud et le d\u00e9veloppement de fonctions (m\u00eame si cela \u00e9volue) :<\/p>\n<ul><li>La JVM a \u00e9t\u00e9 faite pour maximiser le throughput et pens\u00e9e multi-thread, multi-core<\/li>\n\n<li>La JVM est lente \u00e0 d\u00e9marrer (beaucoup de classes, bytecode verification, JIT warmup) : probl\u00e8me de warmup avant le pic de performance.<\/li>\n\n<li>Memory overhead (metadata, JIT, \u2026) :\u00a0 pb de Resident Set Size (RSS)\u00a0 m\u00eame avec une heap de 32Mo on peut consommer jusqu\u2019\u00e0 plus de 200 Mo, ce qui peut poser des probl\u00e8mes \u00e0 l&rsquo;OOM-killer de Docker par exemple.<\/li>\n<\/ul>\n<p><strong>Quarkus est optimis\u00e9 pour un nombre de requ\u00eates par Mo consomm\u00e9 !<\/strong><\/p>\n<p>Quarkus a \u00e9t\u00e9 pens\u00e9 pour fonctionner en mode natif via SubstratVM (un des sous-projet de GraalVM). SubstratVM est une VM permettant de faire fonctionner des applications Java compil\u00e9es Ahead-Of-Time (AOT) via l&rsquo;outils <strong>native-image<\/strong>. Il ne contient pas de JIT, et a son propre GC.<\/p>\n<p>SubstratVM vient avec ses propres limites :<\/p>\n<ul><li>\u00a0Hypoth\u00e8se de monde ferm\u00e9 : tout ce qui est dans le package est ce qui va \u00eatre ex\u00e9cut\u00e9 : supprime du binaire final de mani\u00e8re agressive toutes les classes inutiles (lib, JDK, &#8230;) via <em>tree-shaking<\/em>.<\/li>\n\n<li>Gestion des ressources : liste exhaustive donn\u00e9e \u00e0 <strong>native-image<\/strong><\/li>\n\n<li>Reflection : chaque classe\/m\u00e9thode appel\u00e9es via r\u00e9flexion doit \u00eatre d\u00e9finie en JSON dans un fichier de configuration<\/li>\n\n<li>Pas mal de chose pas support\u00e9 (voir les slides) ou manuel (\u00e0 configurer pour <strong>native-image<\/strong>)<\/li>\n<\/ul>\n<p>SubtratVM est compliqu\u00e9 \u00e0 utiliser \u2026 et devient un cauchemar quand on a un \u00e9cosyst\u00e8me complexe (framework !). C&rsquo;est l\u00e0 o\u00f9 Quarkus nous rend service en g\u00e9rant SubstratVM et native-image pour nous.<\/p>\n<p>Quarkus est <em><strong>Subatomic :<\/strong><\/em><\/p>\n<ul><li>D\u00e9pendances pour l&rsquo;ex\u00e9cution en natif : zlib, libc, (openSSL) =&gt; distroless !<\/li>\n\n<li>Optimisation conso m\u00e9moire =&gt; container friendly<\/li>\n\n<li>Utilisation des framework java appr\u00e9ci\u00e9 \u2026 Bon, OK, chacun a son avis sur la question mais :\u00a0 Vert.X, Hibernate, MicroProfile, RxJava, &#8230;<\/li>\n\n<li>Live reload sans limitation (remplacement de classloader) : stable et performant (200ms, moins au second reload)<\/li>\n<\/ul>\n<p>Le principe : passer le plus de choses possible du runtime au compile-time, ce qui permet d&rsquo;avoir un temps de d\u00e9marrage plus rapide et n\u00e9cessite moins de m\u00e9moire au runtime (car tout est pr\u00e9-compil\u00e9 en quelques sortes).<\/p>\n<p>Quarkus n&rsquo;utilise quasiment pas de r\u00e9flexion, ce qui facilite aussi le travail du JIT.<\/p>\n<p>Comment \u00e7a marche : lors du build (via plugin Maven ou Gradle), chaque extension va g\u00e9n\u00e9rer le code n\u00e9cessaire pour son d\u00e9marrage via le framework <strong>Gizmo<\/strong>. Quarkus a son propre moteur d&rsquo;injection de d\u00e9pendance : <strong>arc<\/strong> et r\u00e9alise l&rsquo;injection de d\u00e9pendance au build via Maven\/Gradle et pas via annotation processor (compliqu\u00e9 \u00e0 configurer et scale mal par rapport au nombre de bean).<\/p>\n<p>On a ensuite parl\u00e9 de d\u00e9veloppement r\u00e9actif en diff\u00e9renciant :<\/p>\n<ul><li><strong>Reactive Steam<\/strong> : r\u00e9actif au sein d\u2019un service<\/li>\n\n<li><strong>Reactive System<\/strong> : messaging asynchrone entre service<\/li>\n<\/ul>\n<p>Quarkus utilise Reactive Messaging de <strong>MicroProfile <\/strong>:<\/p>\n<ul><li><strong>@Outpoing<\/strong> : g\u00e9n\u00e8re des messages dans un stream (RxJava par exemple)<\/li>\n\n<li><strong>@Incoming<\/strong> : consomme un topic<\/li>\n\n<li>Pas de d\u00e9pendances sur impl\u00e9mentation messaging (Kafka, RabbitMQ, &#8230;)<\/li>\n\n<li>Possibilit\u00e9 d\u2019avoir un <strong>Emitter<\/strong> qui permet de g\u00e9n\u00e9rer un message depuis un appel HTTP par ex.<\/li>\n\n<li>A l\u2019inverse possibilit\u00e9 de s\u2019enregistrer comme consommateur d\u2019un topic (<strong>@Stream<\/strong>) et de recr\u00e9er des \u00e9v\u00e9nements en reactive (via Server-Side-Event par ex.)<\/li>\n<\/ul>\n<p>Pas mal de d\u00e9mos ont \u00e9t\u00e9 faites pour montrer le fonctionnement du framework, on peut retrouver les sources de ces d\u00e9mos ici : <a href=\"https:\/\/github.com\/cescoffier\/quarkus-deep-dive\"><a href=\"https:\/\/github.com\/cescoffier\/quarkus-deep-dive\">https:\/\/github.com\/cescoffier\/quarkus-deep-dive<\/a><\/a><\/p>\n<p>Lien vers la vid\u00e9o : <iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/S05WsHJZsYk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"Quarkus: Comment faire une appli Java Cloud Native avec Graal VM (E. Bernard, C. Escoffier)\"><\/iframe><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"title style-scope ytd-video-primary-info-renderer\">Observabilit\u00e9 : mythes, r\u00e9alit\u00e9 et Chaos (B. Gakic)<\/h3>\n<p>Tout d&rsquo;abord, parlons de Monitoring.<\/p>\n<p>Monitoring : test r\u00e9p\u00e9t\u00e9 (par une machine) =&gt; n\u00e9cessaire de conna\u00eetre ce qu\u2019on veut monitorer. On sais ce qu\u2019on regarde, pourquoi on le regarde mais pas le quand.<\/p>\n<p>Probl\u00e8me : ne pas d\u00e9tecter un probl\u00e8me !!!\nLe Monitoring technique ne suffit pas =&gt; il nous faut un monitoring m\u00e9tier.\nQuestion: qu&rsquo;est qu&rsquo;un bon indicateur =&gt; pertinent, utilisable, utilis\u00e9 :)<\/p>\n<p>Le Monitoring ne suffit plus \u00e0 cause de la complexit\u00e9 des syst\u00e8mes actuels. <strong>Il faut passer du monitoring \u00e0 l\u2019Observabilit\u00e9<\/strong> !<\/p>\n<p>Observabilit\u00e9 : <strong>un syst\u00e8me est observable si son \u00e9tat est d\u00e9duit de ses sympt\u00f4mes<\/strong>.\nC&rsquo;est la capacit\u00e9 du syst\u00e8me \u00e0 exposer des infos que l\u2019on peut choisir d\u2019exploiter et permettant appr\u00e9hender son fonctionnement et ses \u00e9tat (pour les humain).\nBut : \u00eatre capable de g\u00e9rer les choses dont on n\u2019a pas conscience et qu\u2019on ne ma\u00eetrisent pas.<\/p>\n<p>Observabilit\u00e9 : comment ? Manuelle ou automatique (OpenTracing par exemple).<\/p>\n<p><strong>Chaos engineering<\/strong> : permet de tester l\u2019observabilit\u00e9 du syst\u00e8me :<\/p>\n<ul><li>exp\u00e9rimentation sur le syst\u00e8me pour am\u00e9liorer la confiance<\/li>\n\n<li>d\u00e9tecte les choses inconnues en ma\u00eetrisant le quand\/comment<\/li>\n\n<li>s\u00e9rendipit\u00e9 : d\u00e9couverte fortuite \u00e0 partir de l\u2019observation (ie la pomme de newton)<\/li>\n<\/ul>\n<p>Plusieurs test de chaos engineering ont \u00e9t\u00e9 r\u00e9alis\u00e9 par oui.fr.<\/p>\n<p>Tout d&rsquo;abord via <strong>Chaos Monkey<\/strong> : test basique (kill une instance) =&gt; pas de soucis mais probl\u00e8me d\u2019observabilit\u00e9.<\/p>\n<p>Puis via <strong>Chaos Kong<\/strong> : arr\u00eat complet d\u2019un Datacenter !!! :<\/p>\n<ul><li>R\u00e9alis\u00e9 via la coupure du lien r\u00e9seau !<\/li>\n\n<li>Plusieurs test effectu\u00e9s (date\/heure d\u00e9finie puis date d\u00e9finie puis date inconnue)<\/li>\n\n<li>Tout s\u2019est bien pass\u00e9 mais d\u00e9tection incorrecte (incident de r\u00e9plication de BDD alors que le Datacenter n&rsquo;\u00e9tait plus joignable)<\/li>\n\n<li>Mauvais diagnostique, latence d\u2019alerte, probl\u00e8me de proc\u00e9dures<\/li>\n\n<li>Correction : utilisation de l\u2019outils d\u2019observabilit\u00e9 de Netflix : <a href=\"https:\/\/github.com\/Netflix\/vizceral\">https:\/\/github.com\/Netflix\/vizceral<\/a><\/li>\n<\/ul>\n<p>Le\u00e7on : la v\u00e9rit\u00e9 est dans la prod =&gt; les d\u00e9v doivent donc regarder la prod !!!<\/p>\n<p>Pour finir, voici quelques d\u00e9finitions :<\/p>\n<ul><li><strong>Monitoring<\/strong> : permet de r\u00e9pondre \u00e0 une question connue \u00e0 l\u2019avance.<\/li>\n\n<li><strong>Observabilit\u00e9<\/strong> : permet de r\u00e9pondre \u00e0 une question que l\u2019on ne connait pas.<\/li>\n\n<li><strong>Test<\/strong> : valider le fonctionnement nominal d&rsquo;une application.<\/li>\n\n<li><strong>Chaos Engeneering<\/strong> : trouver ce qu\u2019on n\u2019est pas capable trouver avec les tests.<\/li>\n<\/ul>\n<p>Lien vers la vid\u00e9o : <iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/lV7zTJJOx1Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"Observabilit\u00e9 : mythes, r\u00e9alit\u00e9 et Chaos (B. Gakic)\"><\/iframe><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"title style-scope ytd-video-primary-info-renderer\">Le Web, ses frameworks et ses standards : d\u00e9construire pour mieux (re?)construire (H. SABLONNI\u00c8RE<\/h3>\n<p>La Hype des frameworks web :\u00a0 utiliser un framework web c&rsquo;est mettre la solution avant le probl\u00e8me ? Parce que c\u2019est cool ;), &#8230; parce que GAFA ?<\/p>\n<ul><li>R\u00e9inventer la roue \u00e0 chaque fois avec des frameworks diff\u00e9rents<\/li>\n\n<li>Coupler son code au framework =&gt; dette technique<\/li>\n\n<li>Tr\u00e8s probl\u00e9matique dans le monde web car l&rsquo;\u00e9cosyst\u00e8me \u00e9volue tr\u00e8s vite<\/li>\n<\/ul>\n<p>Ce que nous apportent les frameworks :<\/p>\n<ul><li>Syst\u00e8me de composants<\/li>\n\n<li>Templating<\/li>\n\n<li>Gestion du CSS<\/li>\n\n<li>Manipulation du DOM<\/li>\n\n<li>Server Side Rendering<\/li>\n\n<li>Router<\/li>\n\n<li>State Management<\/li>\n<\/ul>\n<p>Avons-nous besoin de tous \u00e7a pour notre application ?<\/p>\n<p>Ce que nous apportent les standards :<\/p>\n<ul><li>Certain frameworks (jQuery) sont les pr\u00e9mices des standards du web<\/li>\n\n<li>WebComponents :\n<ul><li>custom elements ~&gt; syst\u00e8me de composant<\/li>\n\n<li>Shadow dom ~&gt; syst\u00e8me de composant (slot), gestion CSS (custom prop) ~&gt; templating<\/li>\n<\/ul><\/li>\n<\/ul>\n<p>Cas de la console de CleverCloud :<\/p>\n<ul><li>Utilisation de storybook pour d\u00e9finir le front =&gt; permet de d\u00e9velopper en isolation de l\u2019application<\/li>\n\n<li>Utilisation de LitElement et LitHtml comme sucre syntaxique sur les WebComponent<\/li>\n\n<li>R\u00e9duire l\u2019adh\u00e9rence avec le global =&gt; g\u00e9rer des \u00e9v\u00e9nements<\/li>\n\n<li><strong>Bon choix ? =&gt; on s\u2019en fou car le co\u00fbt est faible et l\u2019adh\u00e9rence aussi<\/strong><\/li>\n<\/ul>\n<p>Questionnement sur la Solution \u00e0 un probl\u00e8me :<\/p>\n<ul><li>Avant de prendre une solution : est-ce qu\u2019elle r\u00e9pond au probl\u00e8me ?<\/li>\n\n<li>Approche pragmatique<\/li>\n\n<li>Utiliser les standard<\/li>\n\n<li>Ne pas coupler<\/li>\n<\/ul>\n<p>Lien vers la vid\u00e9o : <iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/uFxVH5mFAKg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"Le Web, ses frameworks et ses standards : d\u00e9construire pour mieux (re?)construire (H. SABLONNI\u00c8RE)\"><\/iframe><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>The Boring Architecture, ou comment construire une licorne sur un monolith (M. Domenjoud et N. De Nayer)<\/h3>\n<p>Retour exp\u00e9rience de Doctissimo sur une architecture \u00e0 contre sens de la hype !<\/p>\n<p>Chiffre : 40k user\/jour, 3000 req\/s http, 17k req\/s sur BDD (4To), 95th perc &lt; 250ms. En augmentation de 20% tout les 2 mois avec un pic de charge au retour de vacances et chaque Lundi.<\/p>\n<p>Architecture : un repo unique, une application en Ruby (Ruby on Rails), une BDD Postgres sur une machine tr\u00e8s capacitive (scale in), 19 instances de l\u2019application.<\/p>\n<p>Quelques autres techno : elasticsearch et redis.<\/p>\n<p>Organisation en feature team autonome, d\u00e9veloppeur full stack qui d\u00e9veloppe l\u2019int\u00e9gralit\u00e9 de sa feature.<\/p>\n<p><strong>Mantra : combattre la complexit\u00e9 =&gt; optimiser l\u2019existant plut\u00f4t qu\u2019apporter de la nouveaut\u00e9 !<\/strong><\/p>\n<p>Challenge : quand faut-il introduire un nouvel outil pour ne pas faire rentrer un rond dans un carr\u00e9 ?<\/p>\n<p>Au vu de la croissance : impossible de faire des capacity planning \u00e0 plus de 6 mois : les d\u00e9cisions sont prise quand un \u201cmur\u201d est d\u00e9tect\u00e9 \u00e0 moins de 6 mois. Chaque jour un d\u00e9veloppeur va observer les d\u00e9gradations et d\u00e9cider si il faut ou pas prendre des actions correctives sur ces d\u00e9gradations.<\/p>\n<p>Toujours privil\u00e9gier une solution simple \u00e0 un probl\u00e8me : ex recherche full text qui ne marche plus trop sur Postgres : passage \u00e0 Elasticsearch ? Non optimisation des indexes Postgres ! Un ans plus tard, m\u00eame soucis , on arrive aux limite (n\u00e9cessit\u00e9 de forker l\u2019outils pour optimiser) =&gt; la solution la plus simple devient de passer \u00e0 Elasticsearch !<\/p>\n<p>Pas de cache applicatif : impl\u00e9ment\u00e9 en 2 jours en test : faisable, donc d\u00e9cision de ne pas le mettre en production car apporte de la complexit\u00e9 et si n\u00e9cessaire, &#8230; impl\u00e9mentable en 2 jours ;)<\/p>\n<p>Pour le front : cr\u00e9ation d\u2019une application complexe avec React et RxJs (hype du moment) =&gt; apr\u00e8s l&rsquo;impl\u00e9mentation, sur une \u00e9quipe de 20 d\u00e9veloppeurs, seulement 2 ma\u00eetrisent le truc ! Ce qui pose un probl\u00e8me d\u2019autonomie des \u00e9quipes! =&gt; Back to basics ?<\/p>\n<p>Points d\u2019attention :<\/p>\n<ul><li>Stack simple mais comme tr\u00e8s optimis\u00e9 seul quelques dev comprennent ces optims<\/li>\n\n<li>N\u00e9cessit\u00e9 d\u2019\u00eatre toujours sur le pont car peu de marge d\u2019erreur<\/li>\n\n<li>Stack simple mais produit complexe d\u00e9coup\u00e9 en 9 feature teams<\/li>\n\n<li>Monolithe et repo unique : tout le monde travail ensemble<\/li>\n\n<li>N\u00e9cessite point de contact entre toute les \u00e9quipes r\u00e9gulier<\/li>\n<\/ul>\n<p>Pour r\u00e9sumer :<\/p>\n<ul><li>Extr\u00eame design \u00e9mergent<\/li>\n\n<li>Fine tuning : architecture simple mais ultra optimis\u00e9<\/li>\n\n<li>R\u00e8gles d\u2019or : qualit\u00e9 non n\u00e9gociable mais pas de future-tuning, on s\u2019interdit \u201cet si jamais on doit\u201d, \u201cpeut-\u00eatre qu\u2019un jour\u201d, \u201cc\u2019est plus propre\u201d<\/li>\n\n<li>Respecter nos principes<\/li>\n<\/ul>\n<p>La vid\u00e9o n&rsquo;est pas disponible sur la cha\u00eene Youtube de Devoxx FR.<\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"title style-scope ytd-video-primary-info-renderer\">Real Quantum Computing (J. Birnie)<\/h3>\n<p>Tr\u00e8s difficile de faire un r\u00e9sum\u00e9 de ce talk, le sujet, est assez complexe &#8230;<\/p>\n<p>Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un ordinateur quantique? Un ordinateur est un syst\u00e8me qui repr\u00e9sente l&rsquo;information sous forme de 0 ou de 1 (les fameux bit) et va ex\u00e9cuter sur ces bit des op\u00e9rations logique qu&rsquo;on appelle \u00ab\u00a0logic gate\u00a0\u00bb. Un ordinateur classique va stocker ces bit sous forme de voltage diff\u00e9rents tandis qu&rsquo;un ordinateur quantique sous la forme d&rsquo;un Qubit (Quantum bit) qui peut \u00eatre impl\u00e9ment\u00e9 par n&rsquo;importe quelle particule atomique (electron, io, photon, &#8230;).<\/p>\n<p>Les Qubit ont quelques propri\u00e9t\u00e9s particuli\u00e8res :<\/p>\n<ul><li>Observer leur valeur effondre le qubit : on ne peut pas le sauvegarder<\/li>\n\n<li>La valeur r\u00e9el d&rsquo;un Qubit est un point dans une sph\u00e8re qui va s&rsquo;effondrer en un 0 ou un 1 \u00e0 la lecture<\/li>\n\n<li>L&rsquo;incertitude quantique induit des erreurs<\/li>\n\n<li>On a besoin d&rsquo;un ordinateur classique pour programmer des Qubit<\/li>\n<\/ul>\n<p>Il n&rsquo;y a que peu d&rsquo;ordinateur quantique existant, certains sont utilisable depuis le Cloud, certain m\u00eame sont utilisable avec un quotas gratuit (IBM en a deux qui ont chacun 5 Qbit).<\/p>\n<p>On peut utiliser un simulateur, mais celui-ci donne des r\u00e9sultats exacte alors que l&rsquo;ex\u00e9cution d&rsquo;un programme quantique ne donne pas toujours de r\u00e9sultats exacte \u00e0 cause de la fameuse incertitude quantique : quand on flip un bit il n&rsquo;est pas toujours flipped !!!<\/p>\n<p>La programmation quantique est difficile car il n&rsquo;y a pas\u00a0 d&rsquo;abstraction facile, les quelques frameworks qui existent sont encore tr\u00e8s bas niveau, mais les possibilit\u00e9s sont grandes.<\/p>\n<p>Lien vers la vid\u00e9o :<iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/7J4tuIsbBfk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"Real Quantum Computing (J. Birnie)\"><\/iframe><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"title style-scope ytd-video-primary-info-renderer\">Performance tuning Twitter services with Graal and Machine Learning (C. Thalinger)<\/h3>\n<p>Suite du talk de l&rsquo;ann\u00e9e pr\u00e9c\u00e9dente : <a href=\"https:\/\/www.youtube.com\/watch?v=G-vlQaPMAxg\">Twitter\u2019s Quest for a Wholly Graal Runtime<\/a><strong>.<\/strong><\/p>\n<p>Dans ce talk, Graal est pour le Just In Time Compiler (JIT) uniquement.<\/p>\n<p>Ce talk raconte comment Twitter, apr\u00e8s avoir gagn\u00e9 du CPU et des cycles GC en passant de C2 (le JIT par d\u00e9faut de Java) \u00e0 Graal ,a encore plus optimis\u00e9 ses JVM en tunant Graal via <strong>autotune<\/strong>, un programme qui permet d&rsquo;automatiquement tester des param\u00e8tres JVM et s\u00e9lectionner les meilleurs.<\/p>\n<p>Les optimisations de performance\u00a0 se font traditionnellement \u00e0 la main : on modifie un param\u00e8tre, on test (id\u00e9alement en production), on d\u00e9cide si l\u2019optimisation vaut le coup puis on re-modifie la valeur ou on passe \u00e0 un autre param\u00e8tre. C&rsquo;est un processus long qui ne scale pas \u00e0 la taille de Twitter (milliers de services sur des centaines de milliers de machines).<\/p>\n<p>Cons\u00e9quence : beaucoup de syst\u00e8me tournent de mani\u00e8re sub-optimale : argent jet\u00e9 par la fen\u00eatre, sans parler de l\u2019empreinte \u00e9cologique car chaque cycle CPU consomme de l\u2019\u00e9lectricit\u00e9 !<\/p>\n<p>Un algorithme de machine learning existe qui est capable de d\u00e9cider si une optimisation vaut le co\u00fbt : le <strong>Bayesian Optimization<\/strong> qui est capable en quelques it\u00e9rations de trouver un quasi-optimum.<\/p>\n<p>Autotune : Bayezian Optimization as a service, bas\u00e9 sur <a href=\"https:\/\/github.com\/HIPS\/Spearmint\">Spearmint<\/a>. On le configure avec les param\u00e8tres \u00e0 faire varier, leurs bornes min et max et le m\u00e9trique \u00e0 \u00e9valuer (ici l&rsquo;utilisation CPU).<\/p>\n<p>L&rsquo;\u00e9quipe VM de Twitter a utilis\u00e9 autotune pour trouver les param\u00e8tres id\u00e9als de configuration de Graal, ils ont tuner plus pr\u00e9cis\u00e9ment les param\u00e8tres d&rsquo;inlining. Il a \u00e9t\u00e9 lanc\u00e9 sur une machine d\u00e9di\u00e9e, avec des requ\u00eates identique \u00e0 la production, sur une p\u00e9riode de 24h avec des slices de 30mn : a chaque slice l&rsquo;algorithme de Bayesian Optimization \u00e9tait appel\u00e9 pour d\u00e9cider quel changement \u00e0 effectuer dans le slice suivant.<\/p>\n<p>R\u00e9sultat obtenu : 8% moins de CPU !<\/p>\n<p>Pour comparaison, via hand tuning de ces param\u00e8tres, ils ont obtenu 2% moins de CPU que Graal non-tun\u00e9.<\/p>\n<p>Avec C2 ils ont r\u00e9ussit \u00e0 obtenir 4% moins de CPU en utilisant autotune.<\/p>\n<p>Lien vers la vid\u00e9o : <iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/2ucx0gs1dH0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"Performance tuning Twitter services with Graal and Machine Learning (C.  Thalinger)\"><\/iframe><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Cette ann\u00e9e, j&rsquo;ai eu la chance d&rsquo;assister \u00e0 Devoxx France, j&rsquo;ai m\u00eame eu la chance d&rsquo;\u00eatre speaker et de donner deux talks (Mes premiers pas en deeplearning avec Keras et Arthas &#8211; Alibaba Java Diagnostic Tool ), mais \u00e7a je vous en parlerais plus tard \ud83d\ude09 Voici un petit compte rendu sur une partie des talks auxquels j&rsquo;ai assist\u00e9. &nbsp; Quarkus: Comment faire une appli Java Cloud Native avec Graal VM (E. Bernard, C. Escoffier) Quarkus est un tout nouveau&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2019\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[92,174,166,170,11,172,169,173,168,167],"class_list":["post-923","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-architecture","tag-chaos-engineering","tag-devoxx","tag-graalvm","tag-java","tag-jit","tag-monitoring","tag-observability","tag-quantum-programing","tag-quarkus"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":966,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/1-an-chez-zenika\/","url_meta":{"origin":923,"position":0},"title":"1 an chez Zenika","author":"admin","date":"mardi  3 septembre 2019","format":false,"excerpt":"Aujourd'hui est un jour sp\u00e9cial, cela fait un an que je suis arriv\u00e9 chez Zenika, apr\u00e8s 9 ans en tant qu'architecte logiciel dans la DSI d'un grand groupe de retail. Et apr\u00e8s un an, quel est donc le bilan ? Tout d'abord, Zenika m'a surpris. Lors des \u00e9changes que j'ai\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1138,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ma-deuxieme-annee-chez-zenika\/","url_meta":{"origin":923,"position":1},"title":"Ma deuxi\u00e8me ann\u00e9e chez Zenika","author":"admin","date":"jeudi  3 septembre 2020","format":false,"excerpt":"Aujourd\u2019hui est un jour sp\u00e9cial, cela fait deux ans que je suis arriv\u00e9 chez Zenika, apr\u00e8s 9 ans en tant qu\u2019architecte logiciel dans la DSI d\u2019un grand groupe de retail. L'ann\u00e9e derni\u00e8re j'avais fait le bilan de ma premi\u00e8re ann\u00e9e pass\u00e9e : 1 an chez Zenika. Et un an apr\u00e8s,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1508,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/4-ans-chez-zenika\/","url_meta":{"origin":923,"position":2},"title":"4 ans chez Zenika","author":"admin","date":"mardi  6 septembre 2022","format":false,"excerpt":"Avec quelques jours de retard, la date anniversaire \u00e9tant le 3 septembre, voici le bilan de ma quatri\u00e8me ann\u00e9e chez Zenika. Pour ceux qui seraient int\u00e9ress\u00e9 par ce que j\u2019avais fait l\u2019ann\u00e9e pr\u00e9c\u00e9dente, c\u2019est ici : Ma troisi\u00e8me ann\u00e9e chez Zenika. Quelques chiffres : 11 articles sur mon blog perso,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1330,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2021-ledition-9-3-4\/","url_meta":{"origin":923,"position":3},"title":"Devoxx France 2021 &#8211; l&rsquo;\u00e9dition 9 3\/4","author":"admin","date":"vendredi  1 octobre 2021","format":false,"excerpt":"Cette semaine, c'est Devoxx France. Et pour la premi\u00e8re fois depuis pas mal de temps, je sors de chez moi, et j'y vais ! Je vous \u00e9cris ces mots dans le train de retour de la deuxi\u00e8me journ\u00e9e, pas de troisi\u00e8me pour moi cette ann\u00e9e. J'ai assist\u00e9 \u00e0 quelques talks,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1309,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/3-ans-chez-zenika\/","url_meta":{"origin":923,"position":4},"title":"3 ans chez Zenika","author":"admin","date":"mardi  7 septembre 2021","format":false,"excerpt":"Avec un peu de retard, voici le bilan de ma troisi\u00e8me ann\u00e9e chez Zenika. Pour ceux qui seraient int\u00e9ress\u00e9 par ce que j'avais fait l'ann\u00e9e pr\u00e9c\u00e9dente, c'est ici : Ma deuxi\u00e8me ann\u00e9e chez Zenika. Quelques chiffres : 7 articles sur mon blog perso, 2 dans le magazine Programmez et 2\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":936,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/etre-speaker-a-devoxx-france\/","url_meta":{"origin":923,"position":5},"title":"Etre speaker \u00e0 Devoxx France","author":"admin","date":"mercredi 17 juillet 2019","format":false,"excerpt":"J'ai eu la chance de donner deux talks \u00e0 Devoxx France cette ann\u00e9e (2019). Voici un petit retour d'exp\u00e9rience sur comment j'en suis arriv\u00e9 l\u00e0, et comment s'est pass\u00e9 cette exp\u00e9rience. \u00c9tape 1 : les CFPs Lorsque la saison des CFPs arrive, comme chaque ann\u00e9e, reviens le questionnement \"Est-ce que\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=923"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/923\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}