{"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\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","title":{"rendered":"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sel aastal plaanime t\u00f5siselt arendada konteinerite teemasid, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863337\">Cloud-Native Java<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/125705747\">Kubernetes<\/a><\/noindex>. Loomulik j\u00e4tk nendele teemadele on jutustamine raamistikust Quarkus, mida on juba <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/haulmont\/blog\/443242\/\">tutvustatud<\/a><\/noindex> Habr\u00e9. T\u00e4na on artikkel p\u00fchendatud mitte niiv\u00f5rd \u201esubatomaarse \u00fcli kiire Java\u201c seadusele, kuiv\u00f5rd sellele, millised perspektiivid Quarkus toob Enterprise'i.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/6337d74cb66ee078c2b7c206be3d88fe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJava ja JVM on endiselt \u00e4\u00e4rmiselt populaarsed, kuid serveriteta tehnoloogiate ja pilvep\u00f5histe mikroteenustega t\u00f6\u00f6tades kasutatakse Java't ja teisi JVM-i keeli j\u00e4rjest harvemini, kuna need kasutavad liiga palju m\u00e4lu ja laaditakse liiga aeglaselt, mist\u00f5ttu need ei sobi h\u00e4sti l\u00fchiealiste konteinerite kasutamiseks. \u00d5nneks hakkab praegune olukord t\u00e4nu Quarkusele muutuma.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00dcli kiire subatomaarne Java on saavutanud uue taseme!<\/h3>\n<p>\n42 versiooni, 8 kuud kogukonna t\u00f6\u00f6d ja 177 h\u00e4mmastavat arendajat \u2013 selle k\u00f5ikide tulemuseks oli Quarkus 1.0 v\u00e4ljaandmine novembris 2019. <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/quarkus\/\">Quarkus 1.0<\/a><\/noindex>, v\u00e4ljaanne, mis t\u00e4histab olulist verstaposti projekti arengus ja pakub hulgaliselt lahedaid funktsioone ja v\u00f5imalusi (t\u00e4iendavat teavet nende kohta saab lugeda <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/blog\/announcing-quarkus-1-0\/\">teated<\/a><\/noindex>).<\/p>\n<p>T\u00e4na r\u00e4\u00e4gime sellest, kuidas Quarkus \u00fchendab imperatiivse ja reaktiivse programmeerimise mudelid \u00fchtse reaktiivse tuuma p\u00f5hjal. Alustame l\u00fchikese ajaloo\u00fclevaatega ja seej\u00e4rel vaatame p\u00f5hjalikult, kus seisneb Quarkuse reaktiivse tuuma dualism ja kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/enterprise-java\/\">Java<\/a><\/noindex>-arendajad saavad neist eelistest kasu.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/microservices\/\">Mikroteenused<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/event-driven\/\">s\u00fcndmustega juhitavate arhitektuuride<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/serverless-architecture\/\">serverless<\/a><\/noindex>-funktsioonid \u2013 k\u00f5ik see on t\u00e4nap\u00e4eval, nagu \u00f6eldakse, t\u00f5usuteel. Hiljuti on pilvep\u00f5histe arhitektuuride loomine muutunud palju lihtsamaks ja k\u00e4ttesaadavamaks, kuid probleemid j\u00e4\u00e4vad \u2013 eriti Java arendajatele. N\u00e4iteks serverless-funktsioonide ja mikroteenuste puhul on \u00e4\u00e4rmiselt oluline v\u00e4hendada k\u00e4ivitusaega, v\u00e4hendada m\u00e4lu kasutust ja muuta nende arendamine mugavamaks ja meeldivamaks. Java on viimastel aastatel teinud mitmeid t\u00e4iustusi, sealhulgas konteinerite toetava funktsionaalsuse ergonoomikat jne. Kuid enamasti ei ole Java sujuva t\u00f6\u00f6 saavutamine konteineris endiselt lihtne. Seet\u00f5ttu alustame m\u00f5ningate Java sisemiste keerukustega, mis ilmnevad eriti teravalt konteinerip\u00f5histe Java rakenduste arendamisel.<\/p>\n<p>Alustame ajaloost.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/4478ef5c3b89a1bd91752a4ede74bdfd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Voogud ja konteinerid<\/h3>\n<p>\nAlates versioonist 8u131 on Java hakanud paremini toetama konteinerite kasutust, t\u00e4nu ergonomika funktsionaalsuse parendustele. Eelk\u00f5ige teab JVM n\u00fc\u00fcd, kui palju protsessori tuumasid see kasutab, ja saab vastavalt sellele kohandada l\u00f5ime gruppe \u2013 enamasti fork\/join gruppe. Muidugi on see suurep\u00e4rane, kuid oletame, et meil on traditsiooniline veebirakendus, mis kasutab HTTP-servlette ja t\u00f6\u00f6tab Tomcatis, Jetty's jne. Tulemuseks on, et see rakendus eraldab igale p\u00e4ringule eraldi l\u00f5ime ja v\u00f5imaldab tal blokeerida selle l\u00f5ime sisend-v\u00e4ljund operatsioonide ootel, n\u00e4iteks andmebaasi, failide v\u00f5i teiste teenuste kutsumisel. See t\u00e4hendab, et sellise rakenduse suurus ei s\u00f5ltu k\u00e4ttesaadavate tuumade arvust, vaid samaaegsete p\u00e4ringute arvust. Lisaks t\u00e4hendab see, et Kubernetes'i tuumade arvu kvoodid v\u00f5i piirangud ei aita siin eriti, ja asi l\u00f5ppeb l\u00f5puks throttling'uga.<\/p>\n<h3>M\u00e4lu ammendumine<\/h3>\n<p>\nL\u00f5imed on m\u00e4lu. Ja konteinerite sisemised m\u00e4lu piirangud ei ole kaugeltki imerohi. Alustage rakenduste ja l\u00f5imede arvu suurendamist ja varem v\u00f5i hiljem seisate silmitsi kriitilise kl\u00f5psamissageduse kasvuga, mis omakorda toob kaasa j\u00f5udluse languse. Lisaks, kui rakendus kasutab traditsioonilisi mikroteenuste raamistikku v\u00f5i \u00fchendub andmebaasidega, v\u00f5i kasutab cache'ingut, v\u00f5i tarbib kuidagi muul moel m\u00e4lu, vajate kindlasti t\u00f6\u00f6riista, mis v\u00f5imaldab vaadata JVM-i sisse ja n\u00e4ha, kuidas ta m\u00e4lu haldab, tapmata samas JVM-i (nt XX:+UseCGroupMemoryLimitForHeap). Ning kuigi alates Java 9-st on JVM \u00f5ppinud tundma cgroup'e ja kohandub vastavalt, j\u00e4\u00e4b m\u00e4lu reserveerimine ja haldamine ikka \u00fcsna keeruliseks.<\/p>\n<h3>Kvoodid ja piirangud<\/h3>\n<p>\nJava 11-s lisandus CPU kvootide tugi (nt PreferContainerQuotaForCPUCount). Kubernetes pakub samuti toetust piirangutele ja kvootidele. Jah, see k\u00f5ik on m\u00f5ttekas, kuid kui rakendus j\u00e4lle \u00fcletab m\u00e4\u00e4ratud kvooti, j\u00f5uame j\u00e4lle selleni, et suurus \u2013 nagu traditsiooniliste Java rakenduste puhul \u2013 m\u00e4\u00e4ratakse tuumade arvu j\u00e4rgi, eraldades igale p\u00e4ringule eraldi l\u00f5ime, see t\u00e4hendab, et kogu sellest ei ole suurt kasu.<br \/>\nLisaks, isegi kui kasutada Kubernetes'i aluseks olevat platvormi kvote ja limiite v\u00f5i horisontaalse (scale-out) skaleerimise funktsioone, ei lahenda probleem iseenesest. Me lihtsalt kulutame rohkem ressursse algse probleemi lahendamiseks v\u00f5i l\u00f5puks j\u00e4\u00e4me ressursse \u00fcle. Ja kui see on k\u00f5rge koormusega s\u00fcsteem avalikus pilves, hakkame peaaegu kindlasti kasutama rohkem ressursse, kui tegelikult vajalik on.<\/p>\n<h3>Ja mida k\u00f5igega sellega teha?<\/h3>\n<p>\nLihtsalt \u00f6eldes, tuleks kasutada as\u00fcnkroonseid ja blokeerimata sisendi-v\u00e4ljundi teeke ning raamistikke nagu 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> v\u00f5i Akka. Need sobivad konteinerites t\u00f6\u00f6tamiseks palju paremini oma reaktiivse olemuse t\u00f5ttu. Blokeerimata sisendi-v\u00e4ljundi t\u00f5ttu saab sama niidi t\u00f6\u00f6tleja korraga t\u00f6\u00f6delda mitmeid samaaegseid p\u00e4ringuid. Samal ajal kui \u00fcks p\u00e4ring ootab sisendi-v\u00e4ljundi tulemusi, vabastatakse selle t\u00f6\u00f6tlev niit ja asub teise p\u00e4ringu juurde. Ja kui sisendi-v\u00e4ljundi tulemused l\u00f5puks saadakse, j\u00e4tkub esimese p\u00e4ringu t\u00f6\u00f6tlemine. Korrates p\u00e4ringute t\u00f6\u00f6tlemist \u00fche ja sama niidi raames, saab v\u00e4hendada \u00fcldiste niitide arvu ja v\u00e4hendada p\u00e4ringute t\u00f6\u00f6tlemise jaoks vajalike ressursside kulu.<\/p>\n<p>Blokeerimata sisendi-v\u00e4ljundi korral muutub protsessorite arv kriitiliseks parameetriks, kuna see m\u00e4\u00e4rab sisendi-v\u00e4ljundi niitide arvu, mida saab samaaegselt t\u00f6\u00f6delda. \u00d5ige kasutamise korral v\u00f5imaldab see t\u00f5husalt jaotada koormust protsessorite vahel ja hallata suuremaid koormusi v\u00e4iksema ressursikasutusega.<\/p>\n<h3>Kuidas, ja kas see on k\u00f5ik?<\/h3>\n<p>\nEi, on veel midagi. Reaktiivne programmeerimine aitab paremini kasutada ressursse, kuid sellel on ka oma hind. Eelk\u00f5ige tuleb kood \u00fcmber kirjutada vastavalt blokeerimise v\u00e4ltimise p\u00f5him\u00f5tetele ja v\u00e4ltida sisendi-v\u00e4ljundi niitide blokeerimist. Ja see on hoopis teine arendamise ja t\u00e4itmise mudel. Ja kuigi seal on palju kasulikke teeke, on see ikkagi radikaalne muutus harjumusp\u00e4rastest m\u00f5ttemustritest.<\/p>\n<p>Esiteks peate \u00f5ppima kirjutama koodi, mis t\u00f6\u00f6tab as\u00fcnkroonselt. Kui hakkate kasutama blokeerimata sisend-v\u00e4ljundit, peate selgelt m\u00e4\u00e4rama, mis peaks toimuma vastuse saamisel p\u00e4ringule. Lihtsalt blokeerida ja oodata enam ei saa. Selle asemel v\u00f5ite edastada tagasiside, kasutada reaktiivprogrammeerimist v\u00f5i continuation-i. Kuid see pole veel k\u00f5ik: blokeerimata sisend-v\u00e4ljundi kasutamiseks vajate ka blokeerimata servereid ja kliente, eelistatult igal pool. HTTP puhul on k\u00f5ik lihtne, kuid on veel andmebaasid, failis\u00fcsteemid ja palju muud.<\/p>\n<p>Ja kuigi totaalne l\u00e4bipaistev reaktiivsus pakub maksimaalset efektiivsust, v\u00f5ib selline muutus olla praktikas raske seedida. Seet\u00f5ttu muutub reaktiivse ja imperatiivse koodi kombineerimise v\u00f5imalus h\u00e4davajalikuks, et:<\/p>\n<ol>\n<li>T\u00f5husalt kasutada ressursse k\u00f5ige koormatumates programmide s\u00fcsteemides;<\/li>\n<li>Kasutada lihtsamat stiili koodi \u00fclej\u00e4\u00e4nud osades.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Tutvustame Quarkust<\/h3>\n<p>\nOtsustav ongi see, et Quarkus \u00fchendab reaktiivsed ja imperatiivsed mudelid \u00fches t\u00e4itmiskeskkonnas.<\/p>\n<p>Quarkuse aluseks on Vert.x ja Netty, mille peal on rida reaktiivseid raamistikke ja laiendusi, mis aitavad arendajal. Quarkus on m\u00f5eldud mitte ainult HTTP-mikroteenuste, vaid ka s\u00fcndmustega juhitud arhitektuuride loomiseks. T\u00e4nu oma reaktiivsele iseloomule t\u00f6\u00f6tab see v\u00e4ga t\u00f5husalt s\u00f5numite edastamise s\u00fcsteemidega (Apache Kafka, AMQP jms).<\/p>\n<p>K\u00f5ik on h\u00f5lmatud selles, kuidas kasutada \u00fchte ja sama reaktiivset mootorit nii imperatiivse kui ka reaktiivse koodi jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/f7269f4bb9d6767ab3bcc79d317861b0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quarkus lahendab selle suurep\u00e4raselt. Valik imperatiivse ja reaktiivse vahel on selge \u2013 kasutada reaktiivset tuuma nii \u00fche kui teise jaoks. Ja see, millega see t\u00f5eliselt aitab, on kiire mitteblokeeriv kood, mis t\u00f6\u00f6tleb peaaegu k\u00f5ike, mis l\u00e4bib s\u00fcndmuste ts\u00fckli (event-loop thread, tuntud ka kui IO thread). Kuid kui teil on klassikalised REST-iga rakendused v\u00f5i kliendipoolseid rakendusi, on Quarkusel valmis imperatiivne programmeerimisviis. N\u00e4iteks HTTP tugi Quarkuses p\u00f5hineb mitteblokeeriva ja reaktiivse mootori (Eclipse Vert.x ja Netty) kasutamisel. K\u00f5ik HTTP p\u00e4ringud, mis teie rakendusse j\u00f5uavad, l\u00e4bivad esmalt s\u00fcndmuste ts\u00fckli (IO Thread) ja seej\u00e4rel saadetakse koodiosale, mis haldab p\u00e4ringuid. S\u00f5ltuvalt sihtkohast v\u00f5ib p\u00e4ringute haldamise kood k\u00e4ivituda eraldi l\u00f5imes (nii tuntud worker thread, mis on kasutusel servletite ja Jax-RS puhul) v\u00f5i kasutada algset sisend-v\u00e4ljundit (reaktiivne marsruut).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas Quarkus \u00fchendab imperatiivset ja reaktiivset programmeerimist\" src=\"\/wp-content\/uploads\/2020\/03\/7338d6881fc9d7582f3fadf3e5f69618.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u00f5numite edastamise s\u00fcsteemide konnektorite jaoks kasutatakse mitteblokeerivaid kliente, mis t\u00f6\u00f6tavad Vert.x mootori peal. Seega saate t\u00f5husalt saata, vastu v\u00f5tta ja t\u00f6\u00f6delda s\u00f5numeid s\u00f5numite vahendusklassi s\u00fcsteemidest.<\/p>\n<p>Meie veebisaidil <noindex><a rel=\"nofollow\" href=\"http:\/\/www.quarkus.io\/\">Quarkus.io<\/a><\/noindex> on koostatud mitu head juhendit, mis aitavad Quarkusega alustada:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-routes-guide\">Reaktiivsete marsruutide kasutamine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/reactive-sql-clients\">Reaktiivsed SQL kliendid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/kafka-guide\">Apache Kafka kasutamine reaktiivse s\u00f5numisega<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/amqp-guide\">AMQP kasutamine reaktiivse s\u00f5numisega<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/quarkus.io\/guides\/using-vertx\">Vertx API kasutamine<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nLisaks oleme ette valmistanud veebip\u00f5hised praktilised kursused, et tutvuda reaktiivse programmeerimise erinevate aspektidega, kusjuures nende l\u00e4bimiseks on vajalik ainult brauser, ei ole vaja IDE-d, samuti ei ole vajalik arvuti. Need kursused leiate <noindex><a rel=\"nofollow\" href=\"https:\/\/learn.openshift.com\/middleware\/courses\/middleware-quarkus\/\">siin<\/a><\/noindex>.<\/p>\n<h3>Kasulikud ressursid<\/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 p\u00f5hjust, miks proovida Quarkust<\/a><\/noindex><\/li>\n<li>Quarkuse projekti koduleht on <noindex><a rel=\"nofollow\" href=\"http:\/\/quarkus.io\">quarkus.io<\/a><\/noindex><\/li>\n<li>Quarkuse projekt GitHubis on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/quarkusio\/quarkus\">github.com\/quarkusio\/quarkus<\/a><\/noindex><\/li>\n<li>Quarkuse projekti Twitteri konto on <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/QuarkusIO\">twitter.com\/QuarkusIO<\/a><\/noindex><\/li>\n<li>Quarkuse projekti vestlus on <noindex><a rel=\"nofollow\" href=\"https:\/\/quarkusio.zulipchat.com\/\">quarkusio.zulipchat.com<\/a><\/noindex><\/li>\n<li>Quarkuse projekti foorumid on <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\u00f5petust Quarkuse kohta teema selgitamiseks<\/h3>\n<p>\nNagu veebilehel kirjutatakse <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> , which combines <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/topics\/kubernetes\/\">Kubernetes<\/a><\/noindex>-orienteeritud Java-stek, mis on kohandatud GraalVM-i ja OpenJDK HotSpot-i ning koosneb parimatest Java teekidest ja standarditest.<\/p>\n<p>Teema selgitamiseks oleme v\u00e4lja valinud 10 video\u00f5petust, kus k\u00e4sitletakse Quarkuse erinevaid aspekte ning n\u00e4idatakse selle kasutamise n\u00e4iteid:<\/p>\n<h4>1. Tutvustame Quarkust: uue p\u00f5lvkonna Java raamistik Kubernetes'e jaoks<\/h4>\n<p>\nAutorid: Thomas Qvarnstrom ja Jason Greene<br \/>\nQuarkus projekti eesm\u00e4rk on luua Java platvorm Kubernetes ja serverless keskkondade jaoks ning \u00fchendada reaktiivsed ja imperatiivsed programmeerimise mudelid \u00fches k\u00e4ituskeskkonnas, et arendajad saaksid paindlikult varieerida l\u00e4henemist laia valiku jaotatud rakenduste arhitektuuride puhul. Lisateavet leiate allolevast sissejuhatavast loengust.<\/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=\"M\u00e4ngi videot\" 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: \u00fclikiire subaatomaarne Java<\/h4>\n<p>\nAutor: Burr Sutter<br \/>\nVeebiloeng DevNation Live n\u00e4itab, kuidas kasutada Quarkust ettev\u00f5tte Java rakenduste, API-de, mikroteenuste ja serverless funktsioonide optimeerimiseks Kubernetes\/OpenShift keskkonnas, muutes need palju v\u00e4iksemaks, kiiremaks ja skaleeritavamaks.<\/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=\"M\u00e4ngi videot\" 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 ja GraalVM: sundime Hibernate kiireks ja surume subaatomaarsetesse m\u00f5\u00f5tmetesse<\/h4>\n<p>\nAutor: Sanne Grinovero<br \/>\nEsitluses saate teada, kuidas Quarkus tekkis, kuidas see t\u00f6\u00f6tab ja kuidas see muudab keerukad raamatukogud, nagu Hibernate ORM, GraalVM-i natiivpiltidega \u00fchilduvaks.<\/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=\"M\u00e4ngi videot\" 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. \u00d5pime looma serverless rakendusi<\/h4>\n<p>\nAutor: Marthen Luther<br \/>\nAllolevas videos n\u00e4idatakse, kuidas luua lihtne Java rakendus Quarkuse abil ja juurutada see serverless rakendusena Knative'is.<\/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=\"M\u00e4ngi videot\" 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: kodut\u00f6\u00f6dega nauditavamalt<\/h4>\n<p>\nAutor: Edson Yanaga<br \/>\nSamm-sammuline juhend teie esimese Quarkus projekti loomiseks, et m\u00f5ista, miks Quarkus v\u00f5idab arendajate s\u00fcdamed.<\/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=\"M\u00e4ngi videot\" 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 ja konteinerid \u2013 milline saab olema nende \u00fchistulevik<\/h4>\n<p>\nAutor: Mark Little<br \/>\nSee esitlus tutvustab Java ajalugu ja selgitab, miks Quarkus on Java tulevik.<\/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=\"M\u00e4ngi videot\" 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: \u00fclikiire subaatomaarne Java<\/h4>\n<p>\nAutor: Dimitris Andreadis<br \/>\n\u00dclevaade Quarkuse eelistest, mis on arendajate seas tunnustatud: lihtsus, \u00fclim kiirus, parimad raamatukogud ja standardid.<\/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=\"M\u00e4ngi videot\" 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 ja subaatomaarne reaktiivne s\u00fcsteem<\/h4>\n<p>\nAutor: Clement Escoffier<br \/>\nGraalVM-i integreerimise t\u00f5ttu pakub Quarkus \u00fclimalt kiiret arenduskogemust ja subaatomaarset k\u00e4ituskeskkonda. Autor r\u00e4\u00e4gib Quarkuse reaktiivsest poolest ja sellest, kuidas seda kasutada reaktiivsete rakenduste ja andmevoogude rakenduste loomisel.<\/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=\"M\u00e4ngi videot\" 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 ja rakenduste kiire arendamine Eclipse MicroProfile'is<\/h4>\n<p>\nAutor: John Clingan<br \/>\nKombineerides Eclipse MicroProfile'i ja Quarkuse, saavad arendajad luua t\u00e4isfunktsionaalseid MicroProfile konteinerirakendusi, mis k\u00e4ivituvad vaid m\u00f5ne k\u00fcmne millisekundi jooksul. Videos k\u00e4sitletakse \u00fcksikasjalikult, kuidas kodeerida MicroProfile konteinerirakendust Kubernetes platvormile juurutamiseks.<\/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=\"M\u00e4ngi videot\" 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, versioon \"Turbo\"<\/h4>\n<p>\nAutor: Markus Biel<br \/>\nAutor n\u00e4itab, kuidas kasutada Quarkust superv\u00e4ikeste ja superkiirete Java konteinerite loomiseks, mis v\u00f5imaldavad t\u00f5elist l\u00e4bimurret, eriti serverless keskkondades.<\/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=\"M\u00e4ngi videot\" 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 \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47Kuidas Quarkus \u00fchendab imperatiivse ja reaktiivse programmeerimise | ProHoster","description":"Sel aastal plaanime t\u00f5siselt arendada teemade \u00fcmber konteinerid, Cloud-Native Java ja","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-quarkus-obedinyaet-imperativnoe-i-reaktivnoe-programmirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/74795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=74795"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/74796"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=74795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=74795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=74795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}