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

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 , vĂ€ljalase, mis tĂ€histab projekti arendamisel olulist verstaposti ja pakub palju lahedaid funktsioone ja vĂ”imalusi (nende kohta saate rohkem lugeda ).
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 - Arendajad saavad neid eeliseid Ă€ra kasutada.
, Đž -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.

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, 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:
- Kasutage tĂ”husalt ressursse tarkvarasĂŒsteemi kĂ”ige koormatud piirkondades;
- 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.

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).

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 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 .
Kasulikud ressursid
- Quarkuse projekti veebisait â
- Quarkuse projekt GitHubis â
- Quarkuse projekt Twitter â
- Quarkuse projekti vestlus â
- Quarkuse projekti foorumid â !forum/quarkus-dev
10 videotundi Quarkuse kohta teemaga tutvumiseks
Nagu kodulehel öeldakse , - Kas - 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.

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.

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.

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.

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.

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.

7. Kvarkus: ĂŒlikiire subatomaarne Java
Autor: Dimitris Andreadis
Ălevaade arendajate tunnustuse pĂ€lvinud Quarkuse eelistest: lihtsus, ĂŒlisuured kiirused, parimad raamatukogud ja standardid.

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.

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.

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.

Allikas: www.habr.com
