{"id":74795,"date":"2020-03-20T20:42:21","date_gmt":"2020-03-20T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie"},"modified":"2020-03-20T20:42:21","modified_gmt":"2020-03-20T17:42:21","slug":"kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cette ann\u00e9e, nous pr\u00e9voyons de d\u00e9velopper s\u00e9rieusement les th\u00e8mes des conteneurs, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Java Cloud-Native<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Une suite logique de ces th\u00e8mes sera le r\u00e9cit du framework Quarkus, d\u00e9j\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">examin\u00e9<\/a><\/noindex> sur Habr\u00e9. L'article d'aujourd'hui n'est pas tant consacr\u00e9 \u00e0 la structure de la \u00ab Java subatomique ultra-rapide \u00bb, mais plut\u00f4t aux perspectives que Quarkus apporte \u00e0 l'Enterprise.<\/p>\n<p><img decoding=\"async\" alt=\"Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava et la JVM restent extr\u00eamement populaires, mais lors de l'utilisation de technologies sans serveur et de microservices ax\u00e9s sur le cloud, Java et d'autres langages pour la JVM sont de moins en moins utilis\u00e9s, car ils prennent trop de m\u00e9moire et se chargent trop lentement, ce qui les rend inadapt\u00e9s \u00e0 l'utilisation avec des conteneurs \u00e0 courte dur\u00e9e de vie. Heureusement, cette situation commence \u00e0 changer gr\u00e2ce \u00e0 Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Java subatomique ultra-rapide a atteint un nouveau niveau !<\/h3>\n<p>\n42 versions, 8 mois de travail communautaire et 177 d\u00e9veloppeurs incroyables \u2013 tout cela a abouti \u00e0 la sortie en novembre 2019 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">de Quarkus 1.0<\/a><\/noindex>, une version qui marque une \u00e9tape importante dans le d\u00e9veloppement du projet et propose de nombreuses fonctionnalit\u00e9s int\u00e9ressantes (vous pouvez en lire plus \u00e0 propos de cela dans <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">l'annonce<\/a><\/noindex>).<\/p>\n<p>Aujourd'hui, nous allons expliquer comment Quarkus unit les mod\u00e8les de programmation imp\u00e9ratifs et r\u00e9actifs sur la base d'un noyau r\u00e9actif unique. Nous commencerons par un bref aper\u00e7u historique, puis nous examinerons en d\u00e9tail en quoi consiste le dualisme du noyau r\u00e9actif de Quarkus et comment <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-les d\u00e9veloppeurs peuvent tirer parti de ces avantages.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Les microservices<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">des architectures orient\u00e9es \u00e9v\u00e9nements<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverless<\/a><\/noindex>-les fonctions sont aujourd'hui, ce qu'on appelle, en plein essor. R\u00e9cemment, la cr\u00e9ation d'architectures orient\u00e9es vers le cloud est devenue beaucoup plus simple et accessible, mais des d\u00e9fis subsistent \u2013 surtout pour les d\u00e9veloppeurs Java. Par exemple, dans le cas des fonctions serverless et des microservices, il y a un besoin urgent de r\u00e9duire le temps de d\u00e9marrage, de diminuer l'utilisation de la m\u00e9moire et de rendre leur d\u00e9veloppement plus pratique et agr\u00e9able. Java a fait quelques am\u00e9liorations ces derni\u00e8res ann\u00e9es, comme l'optimisation du fonctionnement pour les conteneurs et autres. Cependant, faire fonctionner Java correctement dans un conteneur reste difficile. C'est pourquoi nous commencerons par examiner certaines des complexit\u00e9s internes de Java, qui se manifestent particuli\u00e8rement lors du d\u00e9veloppement d'applications Java orient\u00e9es conteneurs.<\/p>\n<p>Commen\u00e7ons par l'histoire.<\/p>\n<p><img decoding=\"async\" alt=\"Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Flux et conteneurs<\/h3>\n<p>\nDepuis la version 8u131, Java a commenc\u00e9 \u00e0 supporter les conteneurs gr\u00e2ce \u00e0 des am\u00e9liorations fonctionnalit\u00e9 ergonomique. En particulier, la JVM sait d\u00e9sormais sur combien de c\u0153urs de processeur elle s'ex\u00e9cute et peut configurer les pools de threads en cons\u00e9quence - g\u00e9n\u00e9ralement des pools fork\/join. C'est formidable, mais supposons que nous ayons une application Web traditionnelle utilisant des servlets HTTP et s'ex\u00e9cutant sous Tomcat, Jetty, etc. En cons\u00e9quence, cette application attribuera un thread distinct \u00e0 chaque requ\u00eate et lui permettra de bloquer ce thread en attendant des op\u00e9rations d'entr\u00e9e-sortie, comme lors de l'acc\u00e8s \u00e0 une base de donn\u00e9es, \u00e0 des fichiers ou \u00e0 d'autres services. Cela signifie que la taille de cette application ne d\u00e9pend pas du nombre de c\u0153urs disponibles, mais du nombre de requ\u00eates simultan\u00e9es. De plus, cela signifie que les quotas ou limites dans Kubernetes concernant le nombre de c\u0153urs ne seront pas vraiment utiles ici, et que le r\u00e9sultat final sera un throttling.<\/p>\n<h3>\u00c9puisement de la m\u00e9moire<\/h3>\n<p>\nLes threads sont de la m\u00e9moire. Et les limitations de m\u00e9moire \u00e0 l'int\u00e9rieur des conteneurs ne sont pas une panac\u00e9e. Commencez simplement \u00e0 augmenter le nombre d'applications et de threads, et t\u00f4t ou tard vous rencontrerez une augmentation critique de la fr\u00e9quence des commutations et, par cons\u00e9quent, une d\u00e9gradation des performances. De plus, si l'application utilise des frameworks de microservices traditionnels ou se connecte \u00e0 une base de donn\u00e9es, ou utilise le cache, ou consomme de la m\u00e9moire d'une autre mani\u00e8re, vous avez absolument besoin d'un outil qui vous permet de voir \u00e0 l'int\u00e9rieur de la JVM et de comprendre comment elle g\u00e8re la m\u00e9moire, sans pour autant tuer la JVM elle-m\u00eame (par exemple, XX:+UseCGroupMemoryLimitForHeap). Et m\u00eame si, depuis Java 9, la JVM a appris \u00e0 reconna\u00eetre les cgroups et \u00e0 s'adapter en cons\u00e9quence, la r\u00e9servation et la gestion de la m\u00e9moire restent des t\u00e2ches assez complexes.<\/p>\n<h3>Quotas et limites<\/h3>\n<p>\nJava 11 a introduit le support des quotas CPU (comme PreferContainerQuotaForCPUCount). Kubernetes propose \u00e9galement un support pour les limites et quotas. Oui, tout cela a du sens, mais si l'application sort \u00e0 nouveau des limites allou\u00e9es, nous revenons \u00e0 la situation o\u00f9 la taille - comme avec les applications Java traditionnelles - est d\u00e9termin\u00e9e par le nombre de c\u0153urs avec un thread s\u00e9par\u00e9 allou\u00e9 \u00e0 chaque requ\u00eate, donc tout cela n'est pas d'une grande utilit\u00e9.<br \/>\nDe plus, si l'on utilise des quotas et des limites ou des fonctions de mise \u00e0 l'\u00e9chelle horizontale (scale-out) de la plateforme sous-jacente de Kubernetes, le probl\u00e8me ne se r\u00e9sout pas de lui-m\u00eame. Nous d\u00e9pensons simplement plus de ressources pour r\u00e9soudre le probl\u00e8me initial ou finissons par un surconsommation des ressources. Et si c'est un syst\u00e8me tr\u00e8s charg\u00e9 dans un cloud public accessible au public, nous commen\u00e7ons presque certainement \u00e0 utiliser plus de ressources que n\u00e9cessaire.<\/p>\n<h3>Et que faire avec tout cela ?<\/h3>\n<p>\nPour faire simple, il faut utiliser des biblioth\u00e8ques et des frameworks d'entr\u00e9e-sortie asynchrones et non bloquants, comme Netty, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/10\/21\/eclipse-vert-x-3-8-1-update-for-red-hat-runtimes\/\">Vert.x<\/a><\/noindex> ou Akka. Ils conviennent beaucoup mieux au travail dans des conteneurs en raison de leur nature r\u00e9active. Gr\u00e2ce \u00e0 l'entr\u00e9e-sortie non bloquante, un m\u00eame thread peut traiter plusieurs requ\u00eates simultan\u00e9ment. Pendant qu'une requ\u00eate attend des r\u00e9sultats d'entr\u00e9e-sortie, le thread qui la traite est lib\u00e9r\u00e9 et s'occupe d'une autre requ\u00eate. Et lorsque les r\u00e9sultats d'entr\u00e9e-sortie arrivent enfin, le traitement de la premi\u00e8re requ\u00eate se poursuit. En alternant le traitement des requ\u00eates dans un m\u00eame thread, on peut r\u00e9duire le nombre total de threads et diminuer la consommation de ressources li\u00e9e au traitement des requ\u00eates.<\/p>\n<p>Avec l'entr\u00e9e-sortie non bloquante, le nombre de c\u0153urs devient un param\u00e8tre cl\u00e9, car c'est ce qui d\u00e9termine le nombre de threads d'entr\u00e9e-sortie qui peuvent s'ex\u00e9cuter en parall\u00e8le. Lorsque cela est utilis\u00e9 correctement, cela permet de r\u00e9partir efficacement la charge entre les c\u0153urs et de g\u00e9rer des charges plus \u00e9lev\u00e9es avec moins de ressources.<\/p>\n<h3>Comment, c'est tout ?<\/h3>\n<p>\nNon, il y a encore autre chose. La programmation r\u00e9active aide \u00e0 mieux utiliser les ressources, mais cela a aussi un co\u00fbt. En particulier, le code devra \u00eatre r\u00e9\u00e9crit selon les principes de non-bloquage, et il faudra \u00e9viter le blocage des threads d'entr\u00e9e-sortie. C'est un tout autre mod\u00e8le de d\u00e9veloppement et d'ex\u00e9cution. Et bien qu'il existe un grand nombre de biblioth\u00e8ques utiles, cela repr\u00e9sente tout de m\u00eame un changement radical de la fa\u00e7on de penser habituelle.<\/p>\n<p>Tout d'abord, vous devez apprendre \u00e0 \u00e9crire du code qui s'ex\u00e9cute de mani\u00e8re asynchrone. D\u00e8s que vous commencez \u00e0 utiliser des entr\u00e9es-sorties non bloquantes, vous devez sp\u00e9cifier clairement ce qui doit se passer lors de la r\u00e9ception d'une r\u00e9ponse \u00e0 la demande. Il n'est plus possible de bloquer et d'attendre. En revanche, vous pouvez passer des rappels, utiliser la programmation r\u00e9active ou des continuations. Mais ce n'est pas tout : pour utiliser des entr\u00e9es-sorties non bloquantes, vous avez besoin de serveurs et de clients non bloquants, de pr\u00e9f\u00e9rence partout. Dans le cas de HTTP, c'est simple, mais il y a aussi des bases de donn\u00e9es, des syst\u00e8mes de fichiers et bien d'autres choses.<\/p>\n<p>Et bien que la r\u00e9activit\u00e9 totale et int\u00e9grale offre un maximum d'efficacit\u00e9, ce changement peut \u00eatre difficile \u00e0 dig\u00e9rer en pratique. C'est pourquoi la possibilit\u00e9 de combiner code r\u00e9actif et imp\u00e9ratif devient une condition n\u00e9cessaire pour :<\/p>\n<ol>\n<li>Utiliser efficacement les ressources dans les domaines les plus sollicit\u00e9s du syst\u00e8me logiciel ;<\/li>\n<li>Utiliser un code au style plus simple dans ses autres parties.<\/li>\n<\/ol>\n<p><\/p>\n<h3>D\u00e9couvrez Quarkus<\/h3>\n<p>\nEn r\u00e9alit\u00e9, c'est l\u00e0 toute la philosophie de Quarkus \u2013 unir les mod\u00e8les r\u00e9actif et imp\u00e9ratif dans le cadre d'un m\u00eame environnement d'ex\u00e9cution.<\/p>\n<p>Au c\u0153ur de Quarkus se trouvent Vert.x et Netty, sur lesquels repose une s\u00e9rie de frameworks et d'extensions r\u00e9actifs con\u00e7us pour aider le d\u00e9veloppeur. Quarkus est destin\u00e9 \u00e0 la construction non seulement de microservices HTTP, mais aussi d'architectures pilot\u00e9es par des \u00e9v\u00e9nements. Gr\u00e2ce \u00e0 sa nature r\u00e9active, il fonctionne tr\u00e8s efficacement avec des syst\u00e8mes de messagerie (Apache Kafka, AMQP, etc.).<\/p>\n<p>Tout le secret r\u00e9side dans la mani\u00e8re d'utiliser le m\u00eame moteur r\u00e9actif pour le code imp\u00e9ratif et le code r\u00e9actif.<\/p>\n<p><img decoding=\"async\" alt=\"Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus s'en occupe brillamment. Le choix entre une approche imp\u00e9rative et r\u00e9active est \u00e9vident : utiliser un noyau r\u00e9actif pour les deux. Et ce sur quoi il aide beaucoup, c\u2019est le code non bloquant rapide qui traite presque tout ce qui passe par le thread de la boucle d'\u00e9v\u00e9nements (event-loop thread, aussi appel\u00e9 IO thread). Mais si vous avez des applications REST classiques ou des applications c\u00f4t\u00e9 client, Quarkus est pr\u00eat avec un mod\u00e8le de programmation imp\u00e9ratif. Par exemple, le support HTTP dans Quarkus est construit sur l'utilisation d'un moteur non bloquant et r\u00e9actif (Eclipse Vert.x et Netty). Toutes les requ\u00eates HTTP re\u00e7ues par votre application passent d'abord par la boucle d'\u00e9v\u00e9nements (IO Thread), puis sont envoy\u00e9es \u00e0 la partie du code qui g\u00e8re les requ\u00eates. Selon la destination, le code de gestion des requ\u00eates peut \u00eatre appel\u00e9 dans un thread s\u00e9par\u00e9 (le soi-disant worker thread, utilis\u00e9 dans le cas des servlets et Jax-RS) ou utiliser le thread d'entr\u00e9e-sortie d'origine (le chemin r\u00e9actif).<\/p>\n<p><img decoding=\"async\" alt=\"Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pour les connecteurs des syst\u00e8mes de transmission de messages, des clients non bloquants sont utilis\u00e9s, fonctionnant sur le moteur Vert.x. Vous pouvez donc envoyer, recevoir et traiter efficacement des messages depuis des syst\u00e8mes de type middleware de messaging.<\/p>\n<p>Sur le site <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> plusieurs bons guides ont \u00e9t\u00e9 rassembl\u00e9s pour vous aider \u00e0 d\u00e9marrer avec Quarkus :<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Utiliser des routes r\u00e9actives<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Clients SQL r\u00e9actifs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Utiliser Apache Kafka avec la messagerie r\u00e9active<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Utiliser l'AMQP avec la messagerie r\u00e9active<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Utiliser l'API Vertx<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nDe plus, nous avons pr\u00e9par\u00e9 des cours pratiques en ligne pour d\u00e9couvrir divers aspects de la programmation r\u00e9active, et pour les suivre, il suffit d'un navigateur, aucune IDE n'est n\u00e9cessaire, et m\u00eame un ordinateur n'est pas obligatoire. Vous pouvez trouver ces cours <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">ici<\/a><\/noindex>.<\/p>\n<h3>Ressources utiles<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.redhat.com\/cms\/managed-files\/cl-4-reasons-try-quarkus-checklist-f19180cs-201909-en.pdf\">4 raisons d'essayer Quarkus<\/a><\/noindex><\/li>\n<li>Le site du projet Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Le projet Quarkus sur GitHub \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Le Twitter du projet Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Le chat du projet Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Les forums du projet Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/groups.google.com\/forum\/#\">groups.google.com\/forum\/#<\/a><\/noindex>!forum\/quarkus-dev<\/li>\n<\/ul>\n<h3>10 tutoriels vid\u00e9o sur Quarkus pour se familiariser avec le sujet<\/h3>\n<p>\nComme indiqu\u00e9 sur le site <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/\">Quarkus.io<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/blog\/2019\/05\/09\/create-your-first-quarkus-project-with-eclipse-ide-red-hat-codeready-studio\/\">Quarkus<\/a><\/noindex> \u2013 c'est <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>- une pile Java orient\u00e9e, optimis\u00e9e pour GraalVM et OpenJDK HotSpot, assembl\u00e9e \u00e0 partir des meilleures biblioth\u00e8ques et standards Java.<\/p>\n<p>Pour vous aider \u00e0 comprendre le sujet, nous avons s\u00e9lectionn\u00e9 10 tutoriels vid\u00e9o qui couvrent divers aspects de Quarkus et des exemples d'utilisation :<\/p>\n<h4>1. Pr\u00e9sentation de Quarkus : framework Java de nouvelle g\u00e9n\u00e9ration pour Kubernetes<\/h4>\n<p>\nAuteurs : Thomas Qvarnstrom et Jason Greene<br \/>\nL'objectif du projet Quarkus est de cr\u00e9er une plateforme Java pour Kubernetes et les environnements serverless, tout en combinant les mod\u00e8les de programmation r\u00e9actifs et imp\u00e9ratifs dans un seul environnement d'ex\u00e9cution, permettant aux d\u00e9veloppeurs de varier flexiblement leur approche dans un large \u00e9ventail d'architectures d'applications distribu\u00e9es. En savoir plus dans la conf\u00e9rence d'introduction ci-dessous.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"ZCsWi_641Rk\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/ZCsWi_641Rk\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>2. Quarkus : java subatomique ultra-rapide<\/h4>\n<p>\nAuteur : Burr Sutter<br \/>\nLe tutoriel vid\u00e9o du s\u00e9minaire en ligne DevNation Live montre comment utiliser Quarkus pour optimiser les applications Java d'entreprise, APIs, microservices et fonctions serverless dans un environnement Kubernetes\/OpenShift, les rendant beaucoup plus petites, plus rapides et \u00e9volutives.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"7G_r1iyrn2c\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/7G_r1iyrn2c\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>3. Quarkus et GraalVM : propulsons Hibernate \u00e0 des vitesses extr\u00eames et r\u00e9duisons-le \u00e0 des tailles subatomiques<\/h4>\n<p>\nAuteur : Sanne Grinovero<br \/>\nDans cette pr\u00e9sentation, vous d\u00e9couvrirez comment Quarkus a \u00e9t\u00e9 d\u00e9velopp\u00e9, comment il fonctionne et comment il rend compatibles des biblioth\u00e8ques complexes comme Hibernate ORM avec les images natives de GraalVM.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"za5CSBX-UME\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/za5CSBX-UME\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>4. Apprenons \u00e0 d\u00e9velopper des applications serverless<\/h4>\n<p>\nAuteur : Marthen Luther<br \/>\nLa vid\u00e9o ci-dessous montre comment cr\u00e9er une simple application Java avec Quarkus et la d\u00e9ployer en tant qu'application serverless sur Knative.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-c1Sh-1uAeM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-c1Sh-1uAeM\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>5. Quarkus : codez avec plaisir<\/h4>\n<p>\nAuteur : Edson Yanaga<br \/>\nUn guide vid\u00e9o pour cr\u00e9er votre premier projet Quarkus, permettant de comprendre pourquoi Quarkus s\u00e9duit les d\u00e9veloppeurs.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"8r3ZV36ah4I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/8r3ZV36ah4I\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>6. Java et conteneurs \u2013 quel sera leur avenir commun ?<\/h4>\n<p>\nAuteur : Mark Little<br \/>\nCette pr\u00e9sentation pr\u00e9sente l'histoire de Java et explique pourquoi Quarkus est l'avenir de Java.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"O085h6jKBWc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/O085h6jKBWc\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>7. Quarkus : java subatomique ultra-rapide<\/h4>\n<p>\nAuteur : Dimitris Andreadis<br \/>\nAper\u00e7u des avantages de Quarkus qui ont \u00e9t\u00e9 reconnus par les d\u00e9veloppeurs : simplicit\u00e9, vitesses ultra-rapides, meilleures biblioth\u00e8ques et normes.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"UWETnSFB0WA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/UWETnSFB0WA\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>8. Quarkus et syst\u00e8mes r\u00e9actifs subatomiques<\/h4>\n<p>\nAuteur : Clement Escoffier<br \/>\nGr\u00e2ce \u00e0 l'int\u00e9gration avec GraalVM, Quarkus offre une exp\u00e9rience de d\u00e9veloppement ultra-rapide et un environnement d'ex\u00e9cution subatomique. L'auteur parle de l'aspect r\u00e9actif de Quarkus et de la fa\u00e7on de l'utiliser pour cr\u00e9er des applications r\u00e9actives et des applications de streaming.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"trwJxZawglc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/trwJxZawglc\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>9. Quarkus et d\u00e9veloppement rapide d'applications dans Eclipse MicroProfile<\/h4>\n<p>\nAuteur : John Clingan<br \/>\nEn combinant Eclipse MicroProfile et Quarkus, les d\u00e9veloppeurs peuvent cr\u00e9er des applications conteneuris\u00e9es MicroProfile enti\u00e8rement fonctionnelles, qui se lancent en quelques dizaines de millisecondes. La vid\u00e9o explique en d\u00e9tail comment coder une application conteneuris\u00e9e MicroProfile pour un d\u00e9ploiement sur la plateforme Kubernetes.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"hReKM6rmcho\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/hReKM6rmcho\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h4>10. Java, version \u00ab Turbo \u00bb<\/h4>\n<p>\nAuteur : Marcus Biel<br \/>\nL'auteur montre comment utiliser Quarkus pour cr\u00e9er des conteneurs Java super petits et super rapides, permettant de r\u00e9aliser une v\u00e9ritable perc\u00e9e, notamment dans les environnements sans serveur.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"eqUApOrYeS8\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/eqUApOrYeS8\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/493010\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438 Kubernetes. \u041b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0442\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Quarkus, \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u00ab\u0441\u0443\u0431\u0430\u0442\u043e\u043c\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u043e\u0439 Java\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Quarkus \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432 Enterprise. Java \u0438 JVM \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74796,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-20T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-20T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comment Quarkus combine la programmation imp\u00e9rative et r\u00e9active | ProHoster","description":"Cette ann\u00e9e, nous pr\u00e9voyons de d\u00e9velopper s\u00e9rieusement les th\u00e8mes des conteneurs, de Java Cloud-Native et","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a Quarkus \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, Cloud-Native Java \u0438","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-20T17:42:21+00:00","article:modified_time":"2020-03-20T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74795","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:07:28","updated":"2022-10-01 02:07:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}