Hoe Quarkus ymperatyf en reaktive programmearring kombinearret

Dit jier binne wy ​​fan plan om containertema's serieus te ûntwikkeljen, Cloud-Native Java и Kubernetes. In logyske fuortsetting fan dizze ûnderwerpen sil in ferhaal wêze oer it Quarkus-kader, al beskôge op Habré. It artikel fan hjoed giet minder oer it ûntwerp fan "subatomic superfast Java" en mear oer de belofte dy't Quarkus oan Enterprise bringt.

Hoe Quarkus ymperatyf en reaktive programmearring kombinearret

Java en de JVM binne noch altyd ekstreem populêr, mar by it wurkjen mei serverless technologyen en cloud-native mikrotsjinsten, wurde Java en oare JVM-talen hieltyd minder brûkt om't se tefolle ûnthâldromte ynnimme en te stadich binne om te laden, wêrtroch't se min geskikt foar gebrûk mei koarte libbene konteners. Gelokkich begjint dizze situaasje no te feroarjen troch Quarkus.

Supersnelle subatomyske Java hat in nij nivo berikt!

42 releases, 8 moannen fan mienskipswurk en 177 geweldige ûntwikkelders - it resultaat fan alles wie de release yn novimber 2019 Quark 1.0, in útjefte dy't in wichtige mylpeal markearret yn 'e ûntwikkeling fan it projekt en biedt in protte koele funksjes en mooglikheden (jo kinne mear oer har lêze yn oankundiging).

Hjoed sille wy jo sjen litte hoe't Quarkus ymperatyf en reaktive programmearmodellen kombineart yn ien reaktive kearn. Wy sille begjinne mei in koarte skiednis en gean dan yn detail oer wat Quarkus 'reaktive kearndualisme is en hoe Java- Untwikkelders kinne profitearje fan dizze foardielen.

Mikrotsjinsten, evenemint oandreaune arsjitektuer и serverless-funksjes - dit alles is, sa't se sizze, hjoed yn 'e opkomst. Koartlyn is de skepping fan wolk-sintraal arsjitektuer folle makliker en tagonkliker wurden, mar problemen bliuwe - benammen foar Java-ûntwikkelders. Bygelyks, yn it gefal fan serverleaze funksjes en mikrotsjinsten, is d'r driuwend ferlet om opstarttiid te ferminderjen, ûnthâldferbrûk te ferminderjen en har ûntwikkeling noch handiger en nofliker te meitsjen. Java hat de lêste jierren ferskate ferbetterings makke, lykas ferbettere ergonomyske funksjonaliteit foar konteners ensafuorthinne. It krijen fan Java om goed te wurkjen yn in kontener is lykwols noch altyd útdaagjend. Dat wy sille begjinne troch te sjen nei guon fan 'e ynherinte kompleksiteiten fan Java, dy't foaral akuut binne by it ûntwikkeljen fan container-rjochte Java-applikaasjes.

Lit ús earst nei de skiednis sjen.

Hoe Quarkus ymperatyf en reaktive programmearring kombinearret

Streamen en konteners

Begjin mei ferzje 8u131 begon Java mear of minder konteners te stypjen fanwege ferbetteringen yn ergonomyske funksjonaliteit. Benammen de JVM wit no op hoefolle prosessorkearnen it rint en kin threadpools konfigurearje - typysk gabel / meidwaan oan pools - neffens. Fansels is dit geweldich, mar litte wy sizze dat wy in tradisjonele webapplikaasje hawwe dy't HTTP-servlets brûkt en rint yn Tomcat, Jetty, ensfh. As resultaat sil dizze applikaasje elk fersyk in aparte thread jaan en it tastean om dizze thread te blokkearjen wylst jo wachtsje op I/O-operaasjes, bygelyks by tagong ta de databank, bestannen of oare tsjinsten. Dat is, de grutte fan sa'n applikaasje is net ôfhinklik fan it oantal beskikbere kearnen, mar fan it oantal simultane oanfragen. Dêrnjonken betsjut dit dat quota's of limiten yn Kubernetes op it oantal kearnen hjir net folle helpe, en de saak sil úteinlik útrinne op smoarch.

Unthâld útputting

Threads binne ûnthâld. En yntra-container ûnthâld beheinings binne perfoarst gjin panacea. Begjin gewoan it oantal applikaasjes en diskusjes te ferheegjen, en ier of letter sille jo in krityske ferheging fan wikselfrekwinsje tsjinkomme en, as gefolch, prestaasjesdegradaasje. ek, as jo applikaasje brûkt tradisjonele microservice kaders, of ferbynt mei in databank, of brûkt caching, of oars brûkt up ûnthâld, Jo moatte fansels in helpmiddel dat kinne jo sjen binnen de JVM en sjen hoe't it beheart ûnthâld sûnder deadzje it JVM sels (bygelyks XX:+UseCGroupMemoryLimitForHeap). En ek al, begjinnend mei Java 9, hat de JVM leard om cgroups te akseptearjen en dêrop oan te passen, it reservearjen en behearen fan ûnthâld bliuwt in frij komplekse saak.

Kwota en grinzen

Java 11 yntrodusearre stipe foar CPU-kwota's (lykas PreferContainerQuotaForCPUCount). Kubernetes biedt ek stipe foar grinzen en kwotas. Ja, dit hat allegear sin, mar as de applikaasje wer boppe it tawiisde kwota komt, komme wy wer út mei de grutte - lykas it gefal is mei tradisjonele Java-applikaasjes - bepaald troch it oantal kearnen en mei de tawizing fan in aparte thread foar elk fersyk, dan hat dit alles min sin.
Dêrneist, as jo gebrûk meitsje fan kwotas en limiten of de skaalfergrutting funksjes fan it platfoarm ûnderlizzende Kubernetes, it probleem ek net oplosse himsels. Wy besteegje gewoan mear boarnen oan it oplossen fan it orizjinele probleem of einigje mei te folle útjeften. En as it in systeem mei hege lading is yn in iepenbiere iepenbiere wolk, brûke wy hast wis mear boarnen dan wy echt nedich binne.

En wat te dwaan mei dit alles?

Om it gewoan te sizzen, brûk asynchrone en net-blokkearjende I/O-biblioteken en kaders lykas Netty, Vert.x of Akka. Se binne folle better geskikt om te wurkjen yn konteners fanwege harren reaktive aard. Mei tank oan net-blokkearjende I/O kin deselde tried meardere simultane oanfragen ferwurkje. Wylst ien fersyk wachtet op I/O-resultaten, wurdt de thread dy't it ferwurket frijlitten en oernommen troch in oar fersyk. En as de I/O-resultaten einlings oankomme, giet de ferwurking fan it earste fersyk troch. Troch ynterleaved ferwurkjen fan fersiken binnen deselde tried, kinne jo ferminderje it totale oantal triedden en ferminderjen de boarne konsumpsje foar it ferwurkjen fan fersiken.

Mei net-blokkearjende I/O wurdt it oantal kearnen in kaaiparameter, om't it it oantal I/O-threads bepaalt dat parallel kin wurde útfierd. As jo ​​​​korrekt brûkt wurde, kinne jo de lading effektyf fersprieden tusken kearnen en hegere wurkdruk mei minder boarnen omgean.

Hoe, is dat alles?

Nee, der is wat oars. Reaktive programmearring helpt om boarnen better te brûken, mar komt ek foar in priis. Benammen de koade sil moatte wurde opnij skreaun neffens de prinsipes fan net-blokkearjen en foarkommen fan blokkearjen fan I/O-threads. En dit is in folslein oar model fan ûntwikkeling en útfiering. En hoewol d'r hjir in protte nuttige bibleteken binne, is it dochs in radikale feroaring yn 'e gewoane manier fan tinken.

Earst moatte jo leare hoe't jo koade skriuwe dy't asynchronous rint. As jo ​​ienris begjinne mei it brûken fan net-blokkearjende I/O, moatte jo eksplisyt oanjaan wat der barre moat as in antwurd op in fersyk wurdt ûntfongen. Gewoan blokkearje en wachtsje sil net mear wurkje. Ynstee kinne jo callbacks trochjaan, reaktive programmearring brûke as fuortsetting. Mar dat is net alles: om net-blokkearjende I/O te brûken, hawwe jo sawol net-blokkearjende tsjinners as kliïnten nedich, leafst oeral. Yn it gefal fan HTTP is alles ienfâldich, mar d'r binne ek databases, bestânsystemen en folle mear.

En hoewol totale ein-oan-ein reaktiviteit maksimalisearret effisjinsje, kin sa'n ferskowing yn 'e praktyk lestich wêze om te magen. Dêrom wurdt de mooglikheid om reaktive en ymperatyf koade te kombinearjen in betingst om:

  1. Brûk boarnen effektyf yn 'e meast laden gebieten fan it softwaresysteem;
  2. Brûk ienfâldiger stylkoade yn syn oerbleaune dielen.

Yntroduksje fan Quarkus

Eigentlik is dit de essinsje fan Quarkus - om reaktive en ymperatyf modellen te kombinearjen binnen ien runtime-omjouwing.

Quarkus is basearre op Vert.x en Netty, mei in oanbod fan reaktive kaders en tafoegings boppe om de ûntwikkelder te helpen. Quarkus is ûntworpen foar it bouwen fan net allinich HTTP-mikrotsjinsten, mar ek evenemint-oandreaune arsjitektueren. Troch syn reaktive aard wurket it heul effektyf mei messagingsystemen (Apache Kafka, AMQP, ensfh.).

De trúk is hoe't jo deselde reaktive motor brûke kinne foar sawol ymperatyf as reaktive koade.

Hoe Quarkus ymperatyf en reaktive programmearring kombinearret

Quarkus docht dit briljant. De kar tusken ymperatyf en reaktyf is fanselssprekkend - brûk in reaktive kernel foar beide. Wat it echt helpt mei is flugge, net-blokkearjende koade dy't hast alles behannelet dat troch de barren-loop-thread giet, aka IO-thread. Mar as jo klassike REST- of kliïntside-applikaasjes hawwe, hat Quarkus in ymperatyf programmearringmodel klear. Bygelyks, HTTP-stipe yn Quarkus is basearre op it brûken fan in net-blokkearjende en reaktive motor (Eclipse Vert.x en Netty). Alle HTTP-oanfragen dy't ûntfongen binne troch jo applikaasje, wurde earst troch in evenemintloop (IO Thread) trochjûn en dan stjoerd nei it diel fan 'e koade dat de oanfragen beheart. Ôfhinklik fan de bestimming, it fersyk behear koade kin neamd wurde binnen in aparte tried (de saneamde worker tried, brûkt yn it gefal fan servlets en Jax-RS) of brûk de boarne I / O tried (reaktive rûte).

Hoe Quarkus ymperatyf en reaktive programmearring kombinearret

Messaging-systeemferbiningen brûke net-blokkearjende kliïnten dy't boppe op 'e Vert.x-motor rinne. Dêrom kinne jo effektyf berjochten ferstjoere, ûntfange en ferwurkje fan berjochten-middleware-systemen.

Op it webstee Quarkus.io Hjir binne wat goede tutorials om jo te helpen mei Quarkus te begjinnen:

Wy hawwe ek online praktyske tutorials makke om jo ferskate aspekten fan reaktive programmearring te learen yn gewoan in browser, gjin IDE fereaske, en gjin kompjûter fereaske. Jo kinne dizze lessen fine hjir.

Nuttige boarnen

10 fideo-lessen oer Quarkus om fertroud te wurden mei it ûnderwerp

Sa't se sizze op 'e webside Quarkus.io, quarkus - is Kubernetes-rjochte Java-stack, oanpast foar GraalVM en OpenJDK HotSpot en gearstald út 'e bêste Java-biblioteken en noarmen.

Om jo te helpen it ûnderwerp te begripen, hawwe wy 10 fideolessen selekteare dy't ferskate aspekten fan Quarkus dekke en foarbylden fan it gebrûk:

1. Yntroduksje fan Quarkus: The Next Generation Java Framework foar Kubernetes

Troch Thomas Qvarnstrom en Jason Greene
It doel fan it Quarkus-projekt is om in Java-platfoarm te meitsjen foar Kubernetes en serverleaze omjouwings, en reaktive en ymperatyf programmearringmodellen te kombinearjen yn ien runtime-omjouwing, sadat ûntwikkelders har oanpak fleksibel kinne fariearje by it wurkjen mei in breed oanbod fan ferspraat applikaasje-arsjitektueren. Fyn mear yn 'e ynliedende lêzing hjirûnder.

Spielje fideo

2. Quarkus: Superfast Subatomic Java

By: Burr Sutter
Dizze fideo-tutorial fan DevNation Live toant hoe't jo Quarkus brûke kinne om Java-applikaasjes, API's, mikrotsjinsten en serverless funksjes te optimalisearjen yn in Kubernetes/OpenShift-omjouwing, wêrtroch se folle lytser, rapper en skalberber binne.

Spielje fideo

3. Quarkus en GraalVM: fersnelle Hibernate nei supersnelheden en krimp it nei subatomêre maten

Auteur: Sanne Grinovero
Fanút de presintaasje sille jo leare hoe't Quarkus ûntstien is, hoe't it wurket, en hoe't jo komplekse biblioteken, lykas Hibernate ORM, kompatibel meitsje kinne mei native GraalVM-ôfbyldings.

Spielje fideo

4. Learje om serverless applikaasjes te ûntwikkeljen

Auteur: Martin Luther
De fideo hjirûnder lit sjen hoe't jo in ienfâldige Java-applikaasje meitsje kinne mei Quarkus en it ynsette as in serverless applikaasje op Knative.

Spielje fideo

5. Quarkus: Have fun kodearring

Auteur: Edson Yanaga
In fideogids foar it meitsjen fan jo earste Quarkus-projekt, wêrtroch jo kinne begripe wêrom Quarkus de herten fan ûntwikkelders wint.

Spielje fideo

6. Java en konteners - wat harren takomst tegearre sil wêze

Pleatst troch Mark Little
Dizze presintaasje yntrodusearret de skiednis fan Java en ferklearret wêrom't Quarkus de takomst fan Java is.

Spielje fideo

7. Quarkus: Superfast Subatomic Java

Auteur: Dimitris Andreadis
In oersjoch fan 'e foardielen fan Quarkus dy't erkenning krigen hawwe fan ûntwikkelders: ienfâld, ultrahege snelheden, de bêste bibleteken en noarmen.

Spielje fideo

8. Quarkus en subatomic raket systemen

Auteur: Clement Escoffier
Troch yntegraasje mei GraalVM leveret Quarkus in ultrasnelle ûntwikkelingsûnderfining en in subatomyske runtime-omjouwing. De skriuwer fertelt oer de reaktive kant fan Quarkus en hoe't jo it brûke om reaktive en streamende applikaasjes te bouwen.

Spielje fideo

9. Quarkus en flugge applikaasje ûntwikkeling yn Eclipse MicroProfile

Auteur: John Clingan
Troch Eclipse MicroProfile en Quarkus te kombinearjen, kinne ûntwikkelders mei folsleine funksjes MicroProfile-applikaasjes meitsje dy't yn tsientallen millisekonden lansearje. De fideo giet yn detail oer hoe't jo in kontenerisearre MicroProfile-applikaasje kodearje foar ynset op it Kubernetes-platfoarm.

Spielje fideo

10. Java, "Turbo" ferzje

Auteur: Marcus Biel
De auteur lit sjen hoe't jo Quarkus brûke kinne om super-lytse, supersnelle Java-konteners te meitsjen dy't echte trochbraken ynskeakelje, foaral yn serverleaze omjouwings.

Spielje fideo


Boarne: www.habr.com
Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster