Kuidas Quarkus ĂŒhendab imperatiivse ja reaktiivse programmeerimise

Sel aastal plaanime konteineriteemasid tĂ”siselt arendada, Pilv-native Java Đž Kubernetes. Nende teemade loogiline jĂ€tk on juba lugu Quarkuse raamistikust kaalus HabrĂ© kohta. TĂ€nane artikkel rÀÀgib vĂ€hem "subatomaarse ĂŒlikiire Java" disainist ja rohkem lubadusest, mille Quarkus Enterprise'ile annab.

Kuidas Quarkus ĂŒhendab imperatiivse ja reaktiivse programmeerimise

Java ja JVM on endiselt ĂŒlipopulaarsed, kuid serverita tehnoloogiate ja pilvepĂ”histe mikroteenustega töötades kasutatakse Java ja teisi JVM-keeli ĂŒha vĂ€hem, kuna need vĂ”tavad liiga palju mĂ€luruumi ja on liiga aeglased laadimiseks, muutes need sobib halvasti kasutamiseks lĂŒhiealiste mahutitega. Õnneks hakkab see olukord nĂŒĂŒd tĂ€nu Quarkusele muutuma.

Üliire subatomiline Java on jĂ”udnud uuele tasemele!

42 vĂ€ljalaset, 8 kuud kogukonnatööd ja 177 hĂ€mmastavat arendajat – selle kĂ”ige tulemuseks oli vĂ€ljalase 2019. aasta novembris Kvarkus 1.0, vĂ€ljalase, mis tĂ€histab projekti arendamisel olulist verstaposti ja pakub palju lahedaid funktsioone ja vĂ”imalusi (nende kohta saate rohkem lugeda teadaanne).

TĂ€na nĂ€itame teile, kuidas Quarkus ĂŒhendab kohustuslikud ja reaktiivsed programmeerimismudelid ĂŒheks reaktiivseks tuumaks. Alustame lĂŒhikese ajalooga ja seejĂ€rel rÀÀgime ĂŒksikasjalikult, mis on Quarkuse reaktiivne tuumdualism ja kuidas Java- Arendajad saavad neid eeliseid Ă€ra kasutada.

Mikroteenused, sĂŒndmustest juhitud arhitektuurid Đž serverita-funktsioonid – kĂ”ik see, nagu öeldakse, on tĂ€napĂ€eval tĂ”usuteel. Viimasel ajal on pilvekesksete arhitektuuride loomine muutunud palju lihtsamaks ja ligipÀÀsetavamaks, kuid probleemid pĂŒsivad – eriti Java arendajate jaoks. NĂ€iteks serverita funktsioonide ja mikroteenuste puhul on hĂ€dasti vaja vĂ€hendada kĂ€ivitusaega, vĂ€hendada mĂ€lukulu ning muuta nende arendamine siiski mugavamaks ja nauditavamaks. Java on viimastel aastatel teinud mitmeid tĂ€iustusi, nĂ€iteks parandanud konteinerite ergonoomilist funktsionaalsust ja nii edasi. Java konteineris korralikult tööle panemine on aga endiselt keeruline. Seega alustame Javale omase keerukuse vaatlemisega, mis on konteinerile orienteeritud Java-rakenduste arendamisel eriti terav.

KÔigepealt vaatame ajalugu.

Kuidas Quarkus ĂŒhendab imperatiivse ja reaktiivse programmeerimise

Vood ja konteinerid

Alates versioonist 8u131 hakkas Java ergonoomika funktsionaalsuse tĂ€iustamise tĂ”ttu enam-vĂ€hem konteinereid toetama. EelkĂ”ige teab JVM nĂŒĂŒd, kui paljudel protsessorituumadel see töötab, ja saab vastavalt konfigureerida lĂ”imekogumeid – tavaliselt hargneda/liituda. See on muidugi suurepĂ€rane, aga oletame, et meil on traditsiooniline veebirakendus, mis kasutab HTTP servlette ja töötab Tomcatis, Jettys jne. Selle tulemusena annab see rakendus igale pĂ€ringule eraldi lĂ”ime ja lubab sellel lĂ”ime blokeerida, oodates I/O toiminguid, nĂ€iteks andmebaasi, failide vĂ”i muude teenuste juurde pÀÀsemisel. See tĂ€hendab, et sellise rakenduse suurus ei sĂ”ltu saadaolevate tuumade arvust, vaid samaaegsete pĂ€ringute arvust. Lisaks tĂ€hendab see, et Kubernetese tuumade arvu kvoodid vĂ”i piirangud pole siin eriti abiks ja asi lĂ”ppeb lĂ”puks tĂ”rjumisega.

MĂ€lu ammendumine

Niidid on mĂ€lu. Ja konteinerisisesed mĂ€lupiirangud pole mingil juhul imerohi. Lihtsalt alustage rakenduste ja lĂ”imede arvu suurendamist ning varem vĂ”i hiljem kogete lĂŒlitussageduse kriitilist tĂ”usu ja selle tulemusena jĂ”udluse halvenemist. Samuti, kui teie rakendus kasutab traditsioonilisi mikroteenuste raamistikke vĂ”i loob ĂŒhenduse andmebaasiga vĂ”i kasutab vahemĂ€llu vĂ”i kasutab muul viisil mĂ€lu, vajate ilmselgelt tööriista, mis vĂ”imaldab teil vaadata JVM-i sisse ja nĂ€ha, kuidas see mĂ€lu haldab ilma seda hĂ€vitamata. JVM ise (nĂ€iteks XX:+UseCGroupMemoryLimitForHeap). Ja kuigi alates Java 9-st on JVM Ă”ppinud c-gruppe aktsepteerima ja vastavalt kohanema, on mĂ€lu reserveerimine ja haldamine endiselt ĂŒsna keeruline kĂŒsimus.

Kvoodid ja piirangud

Java 11 tutvustas protsessori kvootide (nagu PreferContainerQuotaForCPUCount) tuge. Kubernetes pakub ka toetust limiitide ja kvootide jaoks. Jah, see kĂ”ik on loogiline, kuid kui rakendus ĂŒletab taas eraldatud kvoodi, jĂ”uame jĂ€lle suuruseni – nagu traditsiooniliste Java-rakenduste puhul –, mis mÀÀratakse tuumade arvu jĂ€rgi ja iga jaoks eraldi lĂ”ime eraldamisega. taotlust, siis on sellel kĂ”igel vĂ€he mĂ”tet.
Lisaks ei lahene probleem iseenesest, kui kasutate kvoote ja piiranguid vĂ”i Kubernetese aluseks oleva platvormi skaleerimisfunktsioone. Me lihtsalt kulutame rohkem ressursse algse probleemi lahendamisele vĂ”i kulutame lĂ”puks ĂŒle. Ja kui see on suure koormusega sĂŒsteem avalikus avalikus pilves, kasutame peaaegu kindlasti rohkem ressursse, kui tegelikult vajame.

Ja mida selle kÔigega peale hakata?

Lihtsamalt öeldes kasutage asĂŒnkroonseid ja mitteblokeerivaid I/O teeke ja raamistikke, nagu Netty, Vert.x vĂ”i Akka. Reaktiivse iseloomu tĂ”ttu sobivad need palju paremini konteinerites töötamiseks. TĂ€nu mitteblokeerivale I/O-le saab sama lĂ”ime töödelda mitut samaaegset pĂ€ringut. Samal ajal kui ĂŒks pĂ€ring ootab I/O tulemusi, vabastatakse selle lĂ”ime töötlemine ja selle vĂ”tab ĂŒle teine ​​pĂ€ring. Ja kui I/O tulemused lĂ”puks saabuvad, jĂ€tkub esimese pĂ€ringu töötlemine. PĂ€ringute pĂ”imitud töötlemisega samas lĂ”imes saate vĂ€hendada lĂ”imede koguarvu ja vĂ€hendada pĂ€ringute töötlemise ressursikulu.

Mitteblokeeriva I/O puhul muutub tuumade arv vĂ”tmeparameetriks, kuna see mÀÀrab paralleelselt teostatavate I/O lĂ”imede arvu. Õige kasutamise korral vĂ”imaldab see tĂ”husalt jaotada koormust tuumade vahel ja toime tulla suurema töökoormusega vĂ€iksemate ressurssidega.

Kuidas, kas see on kÔik?

Ei, seal on midagi muud. Reaktiivne programmeerimine aitab ressursse paremini kasutada, kuid sellel on ka oma hind. EelkĂ”ige tuleb kood ĂŒmber kirjutada vastavalt mitteblokeerimise pĂ”himĂ”tetele ja vĂ€ltida I/O lĂ”imede blokeerimist. Ja see on tĂ€iesti erinev arendus- ja teostusmudel. Ja kuigi kasulikke raamatukogusid on siin palju, on see siiski harjumuspĂ€rase mĂ”tteviisi radikaalne muutus.

Esiteks peate Ă”ppima, kuidas kirjutada asĂŒnkroonselt töötavat koodi. Kui hakkate kasutama mitteblokeerivat I/O-d, peate selgelt mÀÀrama, mis peaks juhtuma, kui pĂ€ringule vastus saabub. Lihtsalt blokeerimine ja ootamine ei toimi enam. Selle asemel saate edastada tagasihelistusi, kasutada reaktiivset programmeerimist vĂ”i jĂ€tkamist. Kuid see pole veel kĂ”ik: mitteblokeeriva I/O kasutamiseks on vaja nii mitteblokeerivaid servereid kui ka kliente, eelistatavalt kĂ”ikjal. HTTP puhul on kĂ”ik lihtne, kuid on ka andmebaase, failisĂŒsteeme ja palju muud.

Ja kuigi tÀielik otsast lÔpuni reaktiivsus maksimeerib tÔhusust, vÔib sellist nihet praktikas olla raske mÔista. SeetÔttu muutub reaktiivse ja imperatiivse koodi kombineerimise vÔimalus eelduseks, et:

  1. Kasutage tĂ”husalt ressursse tarkvarasĂŒsteemi kĂ”ige koormatud piirkondades;
  2. Kasutage ĂŒlejÀÀnud osades lihtsamat stiilikoodi.

Tutvustame Quarkust

Tegelikult on see Quarkuse olemus – ĂŒhendada reaktiivsed ja kohustuslikud mudelid ĂŒhes kĂ€ituskeskkonnas.

Quarkus pĂ”hineb Vert.x-l ja Nettyl, mille peal on arendaja abistamiseks rida reaktiivseid raamistikke ja laiendusi. Quarkus on mĂ”eldud mitte ainult HTTP mikroteenuste, vaid ka sĂŒndmustepĂ”hise arhitektuuri loomiseks. TĂ€nu oma reaktiivsele olemusele töötab see vĂ€ga tĂ”husalt sĂ”numsidesĂŒsteemidega (Apache Kafka, AMQP jne).

Trikk seisneb selles, kuidas kasutada sama reaktiivset mootorit nii kohustusliku kui ka reaktiivse koodi jaoks.

Kuidas Quarkus ĂŒhendab imperatiivse ja reaktiivse programmeerimise

Quarkus teeb seda suurepĂ€raselt. Valik imperatiivse ja reaktiivse vahel on ilmne – kasutage mĂ”lema jaoks reaktiivset tuuma. See aitab tegelikult kiiret, mitteblokeerivat koodi, mis kĂ€sitleb peaaegu kĂ”ike, mis lĂ€bib sĂŒndmusetsĂŒkli lĂ”ime ehk IO lĂ”ime. Kuid kui teil on klassikalised REST- vĂ”i kliendipoolsed rakendused, on Quarkusel valmis programmeerimismudel. NĂ€iteks HTTP tugi Quarkuses pĂ”hineb mitteblokeeriva ja reaktiivse mootori (Eclipse Vert.x ja Netty) kasutamisel. KĂ”ik teie rakenduse poolt vastuvĂ”etud HTTP-pĂ€ringud juhitakse esmalt lĂ€bi sĂŒndmusetsĂŒkli (IO Thread) ja saadetakse seejĂ€rel pĂ€ringuid haldavasse koodiossa. Olenevalt sihtkohast saab pĂ€ringuhalduskoodi kutsuda eraldi lĂ”ime (nn töölĂ”ime, mida kasutatakse servletite ja Jax-RS-i puhul) vĂ”i kasutada lĂ€hteteksti I/O lĂ”ime (reaktiivne marsruut).

Kuidas Quarkus ĂŒhendab imperatiivse ja reaktiivse programmeerimise

SĂ”numsidesĂŒsteemi konnektorid kasutavad mitteblokeerivaid kliente, mis töötavad Vert.x mootori peal. SeetĂ”ttu saate tĂ”husalt saata, vastu vĂ”tta ja töödelda sĂ”numeid sĂ”numside vahevarasĂŒsteemidest.

Site Quarkus.io Siin on mÔned head Ôpetused, mis aitavad teil Quarkuse kasutamist alustada:

Oleme loonud ka veebipÔhiseid praktilisi Ôpetusi, et Ôpetada teile reaktiivse programmeerimise erinevaid aspekte ainult brauseris, IDE pole vaja ega arvutit. Need Ôppetunnid leiate siin.

Kasulikud ressursid

10 videotundi Quarkuse kohta teemaga tutvumiseks

Nagu kodulehel öeldakse Quarkus.io, Kvarkus - Kas Kubernetes- orienteeritud Java pinu, mis on kohandatud GraalVM-i ja OpenJDK HotSpoti jaoks ning mis on kokku pandud parimatest Java raamatukogudest ja standarditest.

Teema mÔistmiseks oleme valinud 10 videoÔpetust, mis hÔlmavad Quarkuse erinevaid aspekte ja nÀiteid selle kasutamisest:

1. Quarkuse tutvustamine: Kubernetese jÀrgmise pÔlvkonna Java raamistik

Thomas Qvarnstrom ja Jason Greene
Quarkuse projekti eesmĂ€rk on luua Java platvorm Kubernetese ja serverivabade keskkondade jaoks ning ĂŒhendada reaktiivsed ja imperatiivsed programmeerimismudelid ĂŒheks kĂ€ituskeskkonnaks, et arendajad saaksid oma lĂ€henemisviisi paindlikult varieerida, töötades laia valiku hajutatud rakendusarhitektuuridega. Uuri lĂ€hemalt allolevast sissejuhatavast loengust.

Esita video

2. Kvarkus: ĂŒlikiire subatomaarne Java

Autor: Burr Sutter
See DevNation Live'i videoÔpetus nÀitab, kuidas Quarkust kasutada ettevÔtte Java-rakenduste, API-de, mikroteenuste ja serverivabade funktsioonide optimeerimiseks Kubernetes/OpenShift keskkonnas, muutes need palju vÀiksemaks, kiiremaks ja skaleeritavamaks.

Esita video

3. Quarkus ja GraalVM: talveunereĆŸiimi kiirendamine ĂŒlikiireks ja selle kahandamine subatomaarsete suurusteni

Autor: Sanne Grinovero
Esitlusest saate teada, kuidas Quarkus tekkis, kuidas see töötab ja kuidas see vĂ”imaldab teil luua keerukaid teeke, nagu nĂ€iteks Hibernate ORM, ĂŒhilduma GraalVM-i loomulike piltidega.

Esita video

4. Õppige arendama serverita rakendusi

Autor: Martin Luther
Allolev video nÀitab, kuidas luua Quarkuse abil lihtne Java-rakendus ja juurutada see Knative'is serverita rakendusena.

Esita video

5. Quarkus: nautige kodeerimist

Autor: Edson Yanaga
Videojuhend oma esimese Quarkuse projekti loomiseks, mis vĂ”imaldab teil mĂ”ista, miks Quarkus arendajate sĂŒdameid vĂ”idab.

Esita video

6. Java ja konteinerid – milline saab olema nende ĂŒhine tulevik

Postitas Mark Little
See esitlus tutvustab Java ajalugu ja selgitab, miks Quarkus on Java tulevik.

Esita video

7. Kvarkus: ĂŒlikiire subatomaarne Java

Autor: Dimitris Andreadis
Ülevaade arendajate tunnustuse pĂ€lvinud Quarkuse eelistest: lihtsus, ĂŒlisuured kiirused, parimad raamatukogud ja standardid.

Esita video

8. Kvarkud ja subatomaarsed raketisĂŒsteemid

Autor: Clement Escoffier
TĂ€nu GraalVM-iga integreerimisele pakub Quarkus ĂŒlikiire arenduskogemuse ja subatomaarse kĂ€ituskeskkonna. Autor rÀÀgib Quarkuse reaktiivsest poolest ja sellest, kuidas seda kasutada reaktiivsete ja voogedastusrakenduste ehitamiseks.

Esita video

9. Quarkus ja kiire rakenduste arendamine Eclipse MicroProfile'is

Autor: John Clingan
Kombineerides Eclipse MicroProfile'i ja Quarkuse, saavad arendajad luua tĂ€isfunktsionaalsusega konteineris MicroProfile'i rakendusi, mis kĂ€ivituvad kĂŒmnete millisekunditega. Video kirjeldab ĂŒksikasjalikult, kuidas kodeerida konteineris MicroProfile'i rakendust Kubernetese platvormil juurutamiseks.

Esita video

10. Java, "Turbo" versioon

Autor: Marcus Biel
Autor nĂ€itab, kuidas Quarkuse abil luua ĂŒlivĂ€ikesi ĂŒlikiireid Java konteinereid, mis vĂ”imaldavad tĂ”elisi lĂ€bimurdeid, eriti serverita keskkondades.

Esita video


Allikas: www.habr.com
Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster