Giunsa paghiusa ni Quarkus ang imperative ug reaktibo nga programa

Karong tuiga nagplano kami nga seryoso nga maghimo mga tema sa sulud, Cloud-Native Java ΠΈ Kubernetes. Ang lohikal nga pagpadayon sa kini nga mga hilisgutan mahimong usa ka istorya bahin sa balangkas sa Quarkus, na gikonsiderar sa HabrΓ©. Ang artikulo karon dili kaayo bahin sa laraw sa "subatomic superfast Java" ug labi pa bahin sa saad nga gidala ni Quarkus sa Enterprise.

Giunsa paghiusa ni Quarkus ang imperative ug reaktibo nga programa

Ang Java ug ang JVM popular gihapon kaayo, apan kung nagtrabaho uban ang mga teknolohiya nga wala’y server ug mga microservice nga lumad sa panganod, ang Java ug uban pang mga lengguwahe sa JVM gigamit labi ka gamay tungod kay nagkuha sila og daghang espasyo sa panumduman ug hinay kaayo sa pag-load, nga naghimo niini. dili maayo nga haum alang sa paggamit sa mubo-nagkinabuhi nga mga sudlanan. Suwerte, kini nga kahimtang karon nagsugod sa pagbag-o salamat sa Quarkus.

Ang superfast subatomic Java nakaabot sa usa ka bag-ong lebel!

42 nga pagpagawas, 8 ka bulan nga trabaho sa komunidad ug 177 ka talagsaon nga mga developer - ang resulta niining tanan mao ang pagpagawas sa Nobyembre 2019 Quarkus 1.0, usa ka pagpagawas nga nagtimaan sa usa ka hinungdanon nga milestone sa pag-uswag sa proyekto ug nagtanyag daghang mga cool nga bahin ug kapabilidad (mahimo nimong mabasa ang dugang bahin niini sa pahibalo).

Karon ipakita namo kanimo kung giunsa pagkombinar sa Quarkus ang mga modelo sa imperative ug reactive programming ngadto sa usa ka reactive core. Magsugod kita sa usa ka mubo nga kasaysayan ug dayon moadto sa detalye kung unsa ang reaktibo nga core dualism ni Quarkus ug kung giunsa Java-Ang mga nag-develop mahimong makapahimulos niini nga mga benepisyo.

Microservices, mga arkitektura nga gipalihok sa panghitabo ΠΈ serverless-functions - kining tanan, ingon sa ilang giingon, sa pagtaas karon. Bag-ohay lang, ang paghimo sa cloud-centric nga mga arkitektura nahimong mas sayon ​​ug mas sayon, apan ang mga problema nagpabilin - ilabi na alang sa Java developers. Pananglitan, sa kaso sa serverless functions ug microservices, adunay dinalian nga panginahanglan sa pagpakunhod sa oras sa pagsugod, pagpakunhod sa konsumo sa panumduman, ug paghimo gihapon sa ilang pag-uswag nga mas sayon ​​ug makalingaw. Ang Java nakahimo og daghang mga kalamboan sa bag-ohay nga mga tuig, sama sa gipaayo nga ergonomics functionality alang sa mga sudlanan ug uban pa. Bisan pa, ang pagkuha sa Java nga molihok sa husto sa usa ka sudlanan lisud gihapon. Mao nga magsugod kita pinaagi sa pagtan-aw sa pipila ka mga kinaiyanhon nga pagkakomplikado sa Java, nga labi ka grabe kung nag-develop sa mga aplikasyon sa Java nga nakabase sa sulud.

Una, atong tan-awon ang kasaysayan.

Giunsa paghiusa ni Quarkus ang imperative ug reaktibo nga programa

Mga sapa ug mga sudlanan

Sugod sa bersyon 8u131, ang Java nagsugod sa mas daghan o dili kaayo pagsuporta sa mga sudlanan tungod sa pag-uswag sa ergonomics functionality. Sa partikular, nahibal-an na karon sa JVM kung pila ang mga core sa processor nga gipadagan niini ug mahimo’g ma-configure ang mga pool pool-kasagaran mga fork / join pool-sumala. Siyempre, kini maayo, apan ingnon ta nga kita adunay usa ka tradisyonal nga web application nga naggamit sa HTTP servlets ug nagdagan sa Tomcat, Jetty, ug uban pa. Ingon usa ka sangputanan, kini nga aplikasyon maghatag sa matag hangyo sa usa ka lahi nga hilo ug tugotan kini nga babagan kini nga hilo samtang naghulat sa mga operasyon sa I/O, pananglitan, kung nag-access sa database, mga file o uban pang mga serbisyo. Kana mao, ang gidak-on sa ingon nga aplikasyon wala magdepende sa gidaghanon sa magamit nga mga core, apan sa gidaghanon sa dungan nga mga hangyo. Dugang pa, kini nagpasabut nga ang mga quota o mga limitasyon sa Kubernetes sa gidaghanon sa mga cores dili kaayo makatabang dinhi, ug ang butang sa katapusan matapos sa throttling.

Kakapoy sa memorya

Ang mga hilo maoy memorya. Ug ang mga limitasyon sa memorya sa intra-container dili gyud usa ka panacea. Pagsugod lang sa pagdugang sa gidaghanon sa mga aplikasyon ug mga hilo, ug sa madugay o sa madali masugatan nimo ang usa ka kritikal nga pagtaas sa frequency sa pagbalhin ug, ingon usa ka sangputanan, pagkadaot sa pasundayag. Usab, kung ang imong aplikasyon naggamit sa tradisyonal nga microservice nga mga gambalay, o nagkonektar sa usa ka database, o naggamit sa caching, o sa laing paagi naggamit sa memorya, klaro nga kinahanglan nimo ang usa ka himan nga nagtugot kanimo sa pagtan-aw sa sulod sa JVM ug tan-awon kung giunsa kini pagdumala sa memorya nga dili kini patyon. Ang JVM mismo (pananglitan, XX:+UseCGroupMemoryLimitForHeap). Ug bisan pa, sukad sa Java 9, ang JVM nakakat-on sa pagdawat sa mga cgroup ug pagpahiangay sumala niana, ang pagreserba ug pagdumala sa memorya nagpabilin nga usa ka komplikado nga butang.

Mga quota ug limitasyon

Gipaila sa Java 11 ang suporta alang sa mga quota sa CPU (sama sa PreferContainerQuotaForCPUCount). Nagtanyag usab ang Kubernetes og suporta alang sa mga limitasyon ug mga quota. Oo, kining tanan makatarunganon, apan kung ang aplikasyon molapas pag-usab sa gigahin nga quota, kita usab matapos sa gidak-on - sama sa kaso sa tradisyonal nga Java nga mga aplikasyon - gitino sa gidaghanon sa mga cores ug uban sa alokasyon sa usa ka linain nga hilo alang sa matag hangyo, nan adunay gamay nga kahulugan niining tanan.
Dugang pa, kung mogamit ka og mga quota ug mga limitasyon o ang scale-out nga mga gimbuhaton sa plataporma nga nagpahiping Kubernetes, ang problema dili usab makasulbad sa iyang kaugalingon. Naggasto lang kami og dugang nga mga kahinguhaan sa pagsulbad sa orihinal nga problema o mahimong sobra ang paggasto. Ug kung kini usa ka high-load nga sistema sa usa ka publiko nga panganod, hapit gyud namon magamit ang daghang mga kapanguhaan kaysa sa kinahanglan namon.

Ug unsa ang buhaton niining tanan?

Sa yanong pagkasulti, gamita ang asynchronous ug non-blocking I/O library ug frameworks sama sa Netty, Vert.x o Akka. Sila mas maayo nga haum sa pagtrabaho sa mga sudlanan tungod sa ilang reaktibo nga kinaiya. Salamat sa dili pag-block sa I/O, ang parehas nga thread makaproseso sa daghang dungan nga mga hangyo. Samtang ang usa ka hangyo naghulat alang sa mga resulta sa I/O, ang pagproseso sa thread niini gibuhian ug gikuha sa laing hangyo. Ug sa diha nga ang mga resulta sa I/O sa katapusan moabut, ang pagproseso sa unang hangyo nagpadayon. Pinaagi sa interleaved nga pagproseso sa mga hangyo sulod sa samang thread, mahimo nimong pakunhuran ang kinatibuk-ang gidaghanon sa mga thread ug pakunhuran ang konsumo sa kapanguhaan alang sa pagproseso sa mga hangyo.

Uban sa dili pag-block sa I/O, ang gidaghanon sa mga cores nahimong yawe nga parametro tungod kay kini nagtino sa gidaghanon sa I/O nga mga hilo nga mahimong ipatuman sa parallel. Kung gigamit sa husto, kini nagtugot kanimo sa epektibong pag-apod-apod sa load tali sa mga cores ug pagdumala sa mas taas nga workloads nga adunay gamay nga mga kapanguhaan.

Unsaon, kana lang?

Dili, naa pay lain. Ang reaktibo nga pagprograma makatabang sa paggamit sa mga kahinguhaan, apan moabut usab sa usa ka presyo. Sa partikular, ang code kinahanglan nga isulat pag-usab sumala sa mga prinsipyo sa non-blocking ug likayan ang pagbabag sa I/O threads. Ug kini usa ka hingpit nga lahi nga modelo sa pag-uswag ug pagpatuman. Ug bisan kung adunay daghang mapuslanon nga mga librarya dinhi, kini usa gihapon ka radikal nga pagbag-o sa naandan nga paagi sa panghunahuna.

Una, kinahanglan nimong mahibal-an kung giunsa pagsulat ang code nga nagdagan nga asynchronously. Kung magsugod ka sa paggamit sa dili pag-block sa I/O, kinahanglan nimo nga klaro nga ipiho kung unsa ang mahitabo kung ang tubag sa usa ka hangyo madawat. Ang pag-block ug paghulat lang dili na molihok. Hinuon, mahimo nimong ipasa ang mga callback, gamiton ang reaktibo nga programming o pagpadayon. Apan dili kana ang tanan: aron magamit ang dili pag-block sa I/O, kinahanglan nimo ang dili pag-block nga mga server ug kliyente, labi na bisan diin. Sa kaso sa HTTP, ang tanan yano ra, apan adunay usab mga database, file system, ug daghan pa.

Ug bisan kung ang kinatibuk-an nga end-to-end nga reaktibidad nagpadako sa kaepektibo, ang ingon nga pagbalhin mahimong lisud sa tiyan sa praktis. Busa, ang abilidad sa paghiusa sa reaktibo ug imperative nga kodigo nahimong kinahanglanon aron:

  1. Epektibo nga paggamit sa mga kapanguhaan sa labing puno nga mga lugar sa sistema sa software;
  2. Gamita ang mas simple nga style code sa nahabilin nga mga bahin niini.

Pagpaila sa Quarkus

Sa tinuud, kini ang esensya sa Quarkus - aron makombinar ang mga reaktibo ug kinahanglanon nga mga modelo sa sulod sa usa ka runtime nga palibot.

Ang Quarkus gibase sa Vert.x ug Netty, nga adunay lain-laing mga reaktibo nga frameworks ug mga extension sa ibabaw aron matabangan ang developer. Ang Quarkus gidisenyo alang sa pagtukod dili lamang sa mga microservice sa HTTP, apan usab sa mga arkitektura nga gipadagan sa panghitabo. Tungod sa reaktibo nga kinaiya niini, kini epektibo kaayo sa mga sistema sa pagmemensahe (Apache Kafka, AMQP, ug uban pa).

Ang lansis mao kung giunsa paggamit ang parehas nga reaktibo nga makina alang sa kinahanglan ug reaktibo nga code.

Giunsa paghiusa ni Quarkus ang imperative ug reaktibo nga programa

Gibuhat kini ni Quarkus nga maayo kaayo. Ang pagpili tali sa imperative ug reaktibo klaro - gamita ang usa ka reaktibo nga kernel alang sa duha. Ang makatabang gyud niini mao ang paspas, non-blocking code nga nagdumala sa halos tanang butang nga moagi sa event-loop thread, aka IO thread. Apan kung ikaw adunay klasiko nga REST o mga aplikasyon sa kilid sa kliyente, ang Quarkus adunay usa ka kinahanglanon nga modelo sa pagprograma nga andam. Pananglitan, ang suporta sa HTTP sa Quarkus gibase sa paggamit sa usa ka non-blocking ug reactive nga makina (Eclipse Vert.x ug Netty). Ang tanan nga mga hangyo sa HTTP nga nadawat sa imong aplikasyon una nga gipaagi sa usa ka loop sa panghitabo (IO Thread) ug dayon ipadala sa bahin sa code nga nagdumala sa mga hangyo. Depende sa destinasyon, ang request management code mahimong tawgon sulod sa bulag nga thread (ang gitawag nga worker thread, nga gigamit sa kaso sa servlets ug Jax-RS) o gamiton ang source I/O thread (reactive route).

Giunsa paghiusa ni Quarkus ang imperative ug reaktibo nga programa

Ang mga koneksyon sa sistema sa pagmemensa naggamit sa mga kliyente nga dili nagbabag nga nagdagan sa ibabaw sa makina sa Vert.x. Busa, mahimo ka nga epektibo nga magpadala, makadawat ug magproseso sa mga mensahe gikan sa mga sistema sa middleware sa pagmemensahe.

Sa site Quarkus.io Ania ang pipila ka maayong mga panudlo aron matabangan ka nga makasugod sa Quarkus:

Naghimo usab kami mga online nga hands-on nga mga panudlo aron itudlo kanimo ang lainlaing mga aspeto sa reaktibo nga programa sa usa lang ka browser, wala’y kinahanglan nga IDE, ug wala’y kinahanglan nga kompyuter. Makita nimo kini nga mga leksyon dinhi.

Mapuslanon nga mga gigikanan

10 nga mga leksyon sa video sa Quarkus aron pamilyar sa hilisgutan

Sa ilang giingon sa website Quarkus.io, quarkus - mao ang Kubernetes-oriented nga Java stack, gipahaum alang sa GraalVM ug OpenJDK HotSpot ug gitigum gikan sa labing maayo nga mga librarya ug mga sumbanan sa Java.

Aron matabangan ka nga masabtan ang hilisgutan, gipili namon ang 10 nga mga tutorial sa video nga naglangkob sa lainlaing mga aspeto sa Quarkus ug mga pananglitan sa paggamit niini:

1. Pagpaila sa Quarkus: Ang Sunod nga Kaliwatan sa Java Framework para sa Kubernetes

Ni Thomas Qvarnstrom ug Jason Greene
Ang tumong sa proyekto sa Quarkus mao ang paghimo og Java nga plataporma para sa Kubernetes ug serverless nga mga palibot, ug ang paghiusa sa reaktibo ug imperative nga mga modelo sa programming ngadto sa usa ka runtime nga palibot aron ang mga developers mahimong daling mag-usab-usab sa ilang pamaagi sa dihang magtrabaho uban sa usa ka halapad nga apod-apod nga mga arkitektura sa aplikasyon. Hibal-i ang dugang sa pasiuna nga lektyur sa ubos.

2. Quarkus: Superfast Subatomic Java

Ni: Burr Sutter
Kini nga video tutorial gikan sa DevNation Live nagpakita kon unsaon paggamit ang Quarkus aron ma-optimize ang enterprise Java nga mga aplikasyon, API, microservices, ug serverless functions sa usa ka Kubernetes/OpenShift environment, nga naghimo kanila nga mas gamay, mas paspas, ug mas scalable.

3. Quarkus ug GraalVM: pagpadali sa Hibernate ngadto sa sobrang katulin ug pagpakunhod niini ngadto sa subatomic nga mga gidak-on

Awtor: Sanne Grinovo
Gikan sa presentasyon mahibal-an nimo kung giunsa pagkahimo ang Quarkus, kung giunsa kini molihok, ug kung giunsa ka gitugotan sa paghimo sa mga komplikado nga librarya, sama sa Hibernate ORM, nga nahiuyon sa lumad nga mga imahe sa GraalVM.

4. Pagkat-on sa paghimo og serverless nga mga aplikasyon

Awtor: Martin Luther
Gipakita sa video sa ubos kung giunsa paghimo ang usa ka yano nga aplikasyon sa Java gamit ang Quarkus ug i-deploy kini ingon usa ka wala’y server nga aplikasyon sa Knative.

5. Quarkus: Paglingaw sa coding

Awtor: Edson Yanaga
Usa ka giya sa video sa paghimo sa imong una nga proyekto sa Quarkus, nga nagtugot kanimo nga masabtan kung ngano nga ang Quarkus nagdaog sa mga kasingkasing sa mga developer.

6. Java ug mga sudlanan - unsa ang ilang umaabot nga magkauban

Gi-post ni Mark Little
Kini nga presentasyon nagpaila sa kasaysayan sa Java ug nagpatin-aw nganong ang Quarkus mao ang kaugmaon sa Java.

7. Quarkus: Superfast Subatomic Java

Awtor: Dimitris Andreadis
Usa ka overview sa mga bentaha sa Quarkus nga nakadawat pag-ila gikan sa mga developers: kayano, ultra-high speed, ang labing maayo nga mga librarya ug mga sumbanan.

8. Quarkus ug subatomic rocket system

Awtor: Clement Escoffier
Pinaagi sa paghiusa sa GraalVM, ang Quarkus naghatag usa ka labing paspas nga kasinatian sa pag-uswag ug usa ka subatomic runtime nga palibot. Ang tagsulat naghisgot bahin sa reaktibo nga bahin sa Quarkus ug kung giunsa kini gamiton sa paghimo og mga reaktibo ug streaming nga mga aplikasyon.

9. Quarkus ug paspas nga pag-uswag sa aplikasyon sa Eclipse MicroProfile

Awtor: John Clingan
Pinaagi sa paghiusa sa Eclipse MicroProfile ug Quarkus, ang mga developers makamugna ug full-feature nga containerized nga MicroProfile nga mga aplikasyon nga maglunsad sulod sa napulo ka milliseconds. Detalyado ang video kung giunsa pag-code ang usa ka containerized nga aplikasyon sa MicroProfile alang sa pag-deploy sa platform sa Kubernetes.

10. Java, "Turbo" nga bersyon

Awtor: Marcus Biel
Gipakita sa tagsulat kung giunsa paggamit ang Quarkus aron makamugna ang labi ka gamay, kusog kaayo nga mga sulud sa Java nga makahimo sa mga tinuud nga pagkahugno, labi na sa mga wala’y server nga palibot.



Source: www.habr.com

Idugang sa usa ka comment