{"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\/it\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Come Quarkus unisce programmazione imperativa e reattiva","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Quest'anno prevediamo di sviluppare seriamente i temi dei container, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Java Cloud-Native<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Un seguito logico a questi temi sar\u00e0 la discussione sul framework Quarkus, gi\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">esaminato<\/a><\/noindex> su Habr. L'articolo di oggi non si concentra tanto sull'architettura della \u00abJava subatomica superveloce\u00bb, quanto sulle prospettive che Quarkus porta nel mondo Enterprise.<\/p>\n<p><img decoding=\"async\" alt=\"Come Quarkus unisce programmazione imperativa e reattiva\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava e la JVM sono ancora eccezionalmente popolari, ma quando si tratta di tecnologie serverless e microservizi orientati al cloud, Java e altri linguaggi per la JVM vengono utilizzati sempre meno, in quanto occupano troppo spazio in memoria e si caricano troppo lentamente, risultando quindi poco adatti per essere utilizzati con container a breve durata. Fortunatamente, questa situazione sta iniziando a cambiare grazie a Quarkus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>La Java subatomica superveloce ha raggiunto un nuovo livello!<\/h3>\n<p>\n42 release, 8 mesi di lavoro della comunit\u00e0 e 177 straordinari sviluppatori \u2013 il risultato di tutto ci\u00f2 \u00e8 stata la pubblicazione nel novembre 2019 di <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, una release che segna una tappa importante nello sviluppo del progetto e offre molte funzionalit\u00e0 e possibilit\u00e0 interessanti (puoi leggerne di pi\u00f9 in <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">comunicato<\/a><\/noindex>).<\/p>\n<p>Oggi parleremo di come Quarkus unisca i modelli di programmazione imperativa e reattiva su una base di un unico nucleo reattivo. Inizieremo con una breve escursione nella storia, per poi analizzare nei dettagli in cosa consiste il dualismo del nucleo reattivo di Quarkus e come <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-gli sviluppatori possono sfruttare questi vantaggi.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Microservizi<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">architetture basate su eventi<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverless<\/a><\/noindex>-le funzioni \u2013 tutto questo oggi, per cos\u00ec dire, \u00e8 in crescita. Recentemente, la creazione di architetture orientate al cloud \u00e8 diventata molto pi\u00f9 semplice e accessibile, ma i problemi rimangono, soprattutto per gli sviluppatori Java. Ad esempio, nel caso delle funzioni serverless e dei microservizi, c'\u00e8 una forte necessit\u00e0 di ridurre il tempo di avvio, diminuire il consumo di memoria e rendere lo sviluppo pi\u00f9 comodo e piacevole. Negli ultimi anni, Java ha introdotto diversi miglioramenti, come funzionalit\u00e0 ergonomiche ottimizzate per i container e altro. Tuttavia, ottenere un funzionamento normale di Java in un container \u00e8 ancora complicato. Pertanto, inizieremo esaminando alcune delle complessit\u00e0 interne di Java, che si manifestano in modo particolarmente acuto durante lo sviluppo di applicazioni Java orientate ai container.<\/p>\n<p>Per cominciare, diamo un'occhiata alla storia.<\/p>\n<p><img decoding=\"async\" alt=\"Come Quarkus unisce programmazione imperativa e reattiva\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Thread e container<\/h3>\n<p>\nA partire dalla versione 8u131, Java ha iniziato a supportare pi\u00f9 o meno i container grazie a miglioramenti nelle funzionalit\u00e0 ergonomiche. In particolare, ora la JVM sa su quanti core di elaborazione sta girando e pu\u00f2 configurare correttamente i pool di thread \u2013 di solito, pool fork\/join. Certamente, \u00e8 ottimo, ma supponiamo di avere un'applicazione web tradizionale che utilizza servlet HTTP e che gira su Tomcat, Jetty e simili. In tal caso, questa applicazione fornisce a ogni richiesta un thread separato e consente di bloccare quel thread in attesa di operazioni di input\/output, ad esempio quando si accede a un database, a file o ad altri servizi. Questo significa che la dimensione di tale applicazione non dipende dal numero di core disponibili, ma dal numero di richieste simultanee. Inoltre, ci\u00f2 implica che le quote o i limiti in Kubernetes per il numero di core non aiutano molto, e la situazione alla fine si risolver\u00e0 con il throttling.<\/p>\n<h3>Esaurimento della memoria<\/h3>\n<p>\nI flussi sono memoria. Le limitazioni interne ai contenitori non sono affatto una panacea. Iniziate semplicemente ad aumentare il numero di applicazioni e flussi, e prima o poi vi troverete a fronteggiare una crescita critica della frequenza di switching e, di conseguenza, una degradazione delle prestazioni. Inoltre, se l'applicazione utilizza framework microservizi tradizionali o si connette a un database, o utilizza la memorizzazione nella cache, o in qualche altro modo consuma memoria, \u00e8 chiaro che avete bisogno di uno strumento che consenta di guardare dentro la JVM e vedere come gestisce la memoria, senza uccidere la JVM stessa (ad esempio, XX:+UseCGroupMemoryLimitForHeap). E anche se a partire da Java 9 la JVM ha imparato a capire i cgroups e ad adattarsi di conseguenza, la riservazione e la gestione della memoria rimangono un compito piuttosto complesso.<\/p>\n<h3>Quote e limiti<\/h3>\n<p>\nCon Java 11 \u00e8 stata introdotta la supporto per le quote di CPU (come PreferContainerQuotaForCPUCount). Kubernetes offre anche supporto per limiti e quote. S\u00ec, tutto questo ha senso, ma se l'applicazione supera di nuovo la quota assegnata, torniamo al punto in cui la dimensione - come nel caso delle applicazioni Java tradizionali - \u00e8 definita dal numero di core e dall'assegnazione di un thread separato per ogni richiesta, quindi ne deriva poco.<br \/>\nInoltre, se si utilizzano quote e limiti o le funzionalit\u00e0 di scalabilit\u00e0 orizzontale (scale-out) della piattaforma alla base di Kubernetes, il problema non si risolve da solo. Stiamo semplicemente spendendo pi\u00f9 risorse per risolvere il problema originale o finiamo per sprecare risorse. E se si tratta di un sistema ad alta disponibilit\u00e0 nel cloud pubblico, \u00e8 quasi certo che cominciamo a utilizzare pi\u00f9 risorse di quelle realmente necessarie.<\/p>\n<h3>E cosa fare con tutto questo?<\/h3>\n<p>\nIn parole semplici, si devono utilizzare librerie e framework di I\/O asincroni e non bloccanti come 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> o Akka. Sono decisamente pi\u00f9 adatti per lavorare in contenitori grazie alla loro natura reattiva. Grazie all'input\/output non bloccante, lo stesso thread pu\u00f2 gestire simultaneamente pi\u00f9 richieste. Mentre una richiesta aspetta i risultati dell'input\/output, il thread che la gestisce viene liberato e si occupa di un'altra richiesta. Quando i risultati dell'input\/output arrivano infine, la elaborazione della prima richiesta continua. Alternando la gestione delle richieste all'interno dello stesso thread, \u00e8 possibile ridurre il numero totale di thread e diminuire il consumo di risorse nella gestione delle richieste.<\/p>\n<p>Con l'input\/output non bloccante, il numero di core diventa un parametro chiave, poich\u00e9 determina il numero di thread di input\/output che possono essere eseguiti in parallelo. Se usato correttamente, consente di distribuire efficacemente il carico tra i core e gestire carichi pi\u00f9 elevati con risorse inferiori.<\/p>\n<h3>Come, e questo \u00e8 tutto?<\/h3>\n<p>\nNo, c'\u00e8 ancora qualcos'altro. La programmazione reattiva aiuta a sfruttare meglio le risorse, ma ha anche un costo. In particolare, sar\u00e0 necessario riscrivere il codice secondo i principi della non bloccabilit\u00e0 ed evitare di bloccare i thread di input\/output. E questo \u00e8 un modello di sviluppo e di esecuzione completamente diverso. Anche se ci sono molte librerie utili, si tratta comunque di un cambiamento radicale nel modo di pensare.<\/p>\n<p>Prima di tutto, \u00e8 necessario imparare a scrivere codice che si esegue in modo asincrono. Una volta iniziato a utilizzare l'input\/output non bloccante, \u00e8 necessario specificare esplicitamente cosa deve accadere quando si riceve una risposta alla richiesta. Non \u00e8 pi\u00f9 possibile semplicemente bloccare e aspettare. In cambio, \u00e8 possibile passare callback, utilizzare la programmazione reattiva o continuazioni. E non \u00e8 tutto: per utilizzare l'input\/output non bloccante, servono anche server e client non bloccanti, e idealmente ovunque. Nel caso dell'HTTP \u00e8 semplice, ma ci sono anche database, sistemi di file e molto altro.<\/p>\n<p>E sebbene la reattivit\u00e0 totale offra la massima efficienza, un tale cambiamento pu\u00f2 essere difficile da digerire nella pratica. Pertanto, la possibilit\u00e0 di combinare codice reattivo e imperativo diventa una condizione necessaria per:<\/p>\n<ol>\n<li>Utilizzare in modo efficace le risorse nelle aree pi\u00f9 cariche del sistema software;<\/li>\n<li>Utilizzare un codice pi\u00f9 semplice nello stile nelle altre parti.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Presentiamo Quarkus<\/h3>\n<p>\nIn effetti, questo \u00e8 il punto di Quarkus: unire i modelli reattivi e imperativi all'interno di un unico ambiente di esecuzione.<\/p>\n<p>Alla base di Quarkus ci sono Vert.x e Netty, sopra i quali viene utilizzata una serie di framework e estensioni reattive, progettate per aiutare lo sviluppatore. Quarkus \u00e8 destinato alla creazione non solo di microservizi HTTP, ma anche di architetture basate su eventi. Grazie alla sua natura reattiva, lavora molto efficacemente con i sistemi di messaggistica (Apache Kafka, AMQP, ecc.).<\/p>\n<p>La vera astuzia sta nel come utilizzare lo stesso motore reattivo sia per il codice imperativo che per quello reattivo.<\/p>\n<p><img decoding=\"async\" alt=\"Come Quarkus unisce programmazione imperativa e reattiva\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus riesce a farlo splendidamente. La scelta tra imperativo e reattivo \u00e8 chiara: utilizzare il nucleo reattivo per entrambi. E ci\u00f2 che aiuta molto \u00e8 il codice non bloccante e veloce, che elabora quasi tutto ci\u00f2 che passa attraverso il thread del ciclo degli eventi (thread dell'event-loop, noto anche come thread IO). Ma se hai applicazioni REST classiche o applicazioni lato client, Quarkus ha a disposizione un modello di programmazione imperativa. Ad esempio, il supporto HTTP in Quarkus si basa sull'utilizzo di un motore non bloccante e reattivo (Eclipse Vert.x e Netty). Tutte le richieste HTTP ricevute dall'applicazione passano inizialmente attraverso il ciclo degli eventi (IO Thread) e poi vengono inviate alla parte di codice che gestisce le richieste. A seconda della destinazione, il codice di gestione delle richieste pu\u00f2 essere eseguito in un thread separato (il cosiddetto worker thread, utilizzato nel caso di servlet e Jax-RS) o pu\u00f2 utilizzare il thread di input-output originale (rotta reattiva).<\/p>\n<p><img decoding=\"async\" alt=\"Come Quarkus unisce programmazione imperativa e reattiva\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Per i connettori dei sistemi di messaggistica vengono utilizzati client non bloccanti che lavorano sopra il motore Vert.x. Pertanto, puoi inviare, ricevere e elaborare messaggi dai sistemi di messaggistica in modo efficace.<\/p>\n<p>Sul sito <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> \u00e8 raccolto un certo numero di ottimi tutorial che aiutano a iniziare a lavorare con Quarkus:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Utilizzo delle rotte reattive<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Client SQL reattivi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Utilizzo di Apache Kafka con messaggistica reattiva<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">Utilizzo di AMQP con messaggistica reattiva<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Utilizzo dell'API Vert.x<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nInoltre, abbiamo preparato lezioni pratiche online per familiarizzare con i vari aspetti della programmazione reattiva, e per seguirle \u00e8 sufficiente un browser, non \u00e8 necessaria alcuna IDE, e neanche un computer \u00e8 obbligatorio. \u00c8 possibile trovare queste lezioni <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">qui<\/a><\/noindex>.<\/p>\n<h3>Risorse utili<\/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 motivi per provare Quarkus<\/a><\/noindex><\/li>\n<li>Sito del progetto Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Progetto Quarkus su GitHub \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Twitter del progetto Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Chat del progetto Quarkus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Forum del progetto 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 video-lezioni su Quarkus per comprendere l'argomento<\/h3>\n<p>\nCome riportato sul sito <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 \u00e8 <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-stack Java orientato, progettato per GraalVM e OpenJDK HotSpot, composto dalle migliori librerie e standard Java.<\/p>\n<p>Per aiutarvi a comprendere l'argomento, abbiamo selezionato 10 video-lezioni che trattano vari aspetti di Quarkus e esempi del suo utilizzo:<\/p>\n<h4>1. Introduzione a Quarkus: framework Java di nuova generazione per Kubernetes<\/h4>\n<p>\nAutori: Thomas Qvarnstrom e Jason Greene<br \/>\nL'obiettivo del progetto Quarkus \u00e8 creare una piattaforma Java per Kubernetes e ambienti serverless, unendo i modelli di programmazione reattiva e imperativa in un'unica runtime, consentendo agli sviluppatori di variare flessibilmente le approcci nel lavoro con un ampio spettro di architetture distribuite di applicazioni. Scopri di pi\u00f9 dalla lezione introduttiva qui sotto.<\/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=\"Guarda il video\" 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 subatomica super veloce<\/h4>\n<p>\nAutore: Burr Sutter<br \/>\nLa video-lezione dal seminario online DevNation Live dimostra come utilizzare Quarkus per ottimizzare applicazioni Java aziendali, API, microservizi e funzioni serverless in ambienti Kubernetes\/OpenShift, rendendoli molto pi\u00f9 leggeri, veloci e scalabili.<\/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=\"Guarda il video\" 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 e GraalVM: acceleriamo Hibernate a velocit\u00e0 super e lo riduciamo a dimensioni subatomiche<\/h4>\n<p>\nAutore: Sanne Grinovero<br \/>\nDalla presentazione, imparerai come \u00e8 nato Quarkus, come funziona e come rende le complesse librerie, come Hibernate ORM, compatibili con le immagini nativi di 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=\"Guarda il video\" 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. Impariamo a sviluppare applicazioni serverless<\/h4>\n<p>\nAutore: Marthen Luther<br \/>\nNel video qui sotto viene mostrato come creare una semplice applicazione Java con Quarkus e distribuirla come applicazione serverless su 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=\"Guarda il video\" 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: scrivete con piacere<\/h4>\n<p>\nAutore: Edson Yanaga<br \/>\nGuida video per la creazione del tuo primo progetto Quarkus, che spiega perch\u00e9 Quarkus sta conquistando i cuori dei programmatori.<\/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=\"Guarda il video\" 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 e contenitori \u2013 quale sar\u00e0 il loro futuro insieme<\/h4>\n<p>\nAutore: Mark Little<br \/>\nQuesta presentazione introduce la storia di Java e spiega perch\u00e9 Quarkus rappresenta il futuro di 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=\"Guarda il video\" 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 subatomica super veloce<\/h4>\n<p>\nAutore: Dimitris Andreadis<br \/>\nPanoramica sui vantaggi di Quarkus, riconosciuti dai programmatori: semplicit\u00e0, velocit\u00e0 superiori, le migliori librerie e standard.<\/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=\"Guarda il video\" 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 e sistemi reattivi subatomici<\/h4>\n<p>\nAutore: Clement Escoffier<br \/>\nGrazie all'integrazione con GraalVM, Quarkus fornisce un'esperienza di sviluppo super veloce e un ambiente di esecuzione subatomico. L'autore parla del lato reattivo di Quarkus e di come utilizzarlo nella creazione di applicazioni reattive e di applicazioni con flussi di dati.<\/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=\"Guarda il video\" 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 e sviluppo rapido di applicazioni in Eclipse MicroProfile<\/h4>\n<p>\nAutore: John Clingan<br \/>\nCombinando Eclipse MicroProfile e Quarkus, i programmatori possono creare applicazioni container full-featured di MicroProfile che si avviano in pochi millisecondi. Nel video, viene spiegato in dettaglio come codificare un'app container di MicroProfile per il deployment sulla piattaforma 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=\"Guarda il video\" 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, versione \"Turbo\"<\/h4>\n<p>\nAutore: Marcus Biel<br \/>\nL'autore mostra come utilizzare Quarkus per creare container Java ultra piccoli e super rapidi, che rappresentano una vera innovazione, specialmente negli ambienti serverless.<\/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=\"Guarda il video\" 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 \/>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Come Quarkus unisce programmazione imperativa e reattiva | ProHoster","description":"Quest'anno intendiamo sviluppare seriamente i temi relativi ai contenitori, Cloud-Native Java e","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}