VietÄjÄ kompilÄcija Quarkus - kÄpÄc tas ir svarÄ«gi
Sveiki visiem! Å Ä« ir otrÄ ziÅa mÅ«su sÄrijÄ par Quarkus ā Å”odien mÄs runÄsim par vietÄjo kompilÄciju.
Kvarkuss ir Java kaudze, kas pielÄgota Kubernetes. Lai gan Å”eit noteikti ir daudz darÄmÄ, mÄs esam paveikuÅ”i daudz laba darba pie daudziem aspektiem, tostarp optimizÄjot JVM un vairÄkas ietvaras. Viena no Quarkus funkcijÄm, kas ir izraisÄ«jusi pastiprinÄtu izstrÄdÄtÄju interesi, ir tÄ visaptveroÅ”Ä, vienlaidus pieeja Java koda pÄrvÄrÅ”anai izpildÄmos failos noteiktai operÄtÄjsistÄmai (tÄ sauktÄ ānative kompilÄcijaā), lÄ«dzÄ«gi kÄ C un C++, kur Å”Äda kompilÄcija parasti notiek izveides, testÄÅ”anas un izvietoÅ”anas cikla beigÄs.
Un, lai gan vietÄjÄ kompilÄcija ir svarÄ«ga, kÄ mÄs parÄdÄ«sim tÄlÄk, jÄatzÄ«mÄ, ka Quarkus patieÅ”Äm labi darbojas visizplatÄ«tÄkajÄ Java maŔīnÄ OpenJDK Hotspot, pateicoties veiktspÄjas uzlabojumiem, ko esam ieviesuÅ”i visÄ kaudzÄ. TÄpÄc vietÄjÄ kompilÄcija jÄuzskata par papildu bonusu, ko var izmantot pÄc vÄlÄÅ”anÄs vai nepiecieÅ”amÄ«bas. Faktiski Quarkus ļoti paļaujas uz OpenJDK, kad runa ir par vietÄjiem attÄliem. Un izstrÄdÄtÄju režīms, ko ļoti atzinÄ«gi novÄrtÄjuÅ”i izstrÄdÄtÄji, nodroÅ”ina gandrÄ«z tÅ«lÄ«tÄju izmaiÅu pÄrbaudi, pateicoties Hotspot ieviestajÄm uzlabotajÄm dinamiskÄ koda izpildes iespÄjÄm. TurklÄt, veidojot vietÄjos GraalVM attÄlus, tiek izmantota OpenJDK klases bibliotÄka un HotSpot iespÄjas.
TÄtad, kÄpÄc jums ir nepiecieÅ”ama vietÄjÄ kompilÄcija, ja viss jau ir perfekti optimizÄts? TÄlÄk mÄs centÄ«simies atbildÄt uz Å”o jautÄjumu.
SÄksim ar acÄ«mredzamo: Red Hat ir liela pieredze JVM, steku un ietvaru optimizÄÅ”anÄ projekta izstrÄdes laikÄ. JBoss, tostarp:
Pirmais lietojumprogrammu serveris, kas platformÄ strÄdÄ mÄkonÄ« Red Hat OpenShift.
Pirmais lietojumprogrammu serveris, kas darbojas datoros Pievienojiet datoru.
Pirmais lietojumprogrammu serveris, kurÄ darbojas Raspberry Pi.
MÄs jau daudzus gadus esam risinÄjuÅ”i problÄmas, kas saistÄ«tas ar Java lietojumprogrammu darbinÄÅ”anu mÄkonÄ« un ierÄ«cÄs ar ierobežotiem resursiem (lasÄ«t: IoT), un esam iemÄcÄ«juÅ”ies maksimÄli izmantot JVM veiktspÄjas un atmiÅas optimizÄcijas ziÅÄ. TÄpat kÄ daudzi citi, mÄs jau ilgu laiku esam strÄdÄjuÅ”i ar Java lietojumprogrammu vietÄjo kompilÄciju G.C.J., Putni, Excelsior JET un pat Dalvik un mÄs labi apzinÄmies Ŕīs pieejas plusus un mÄ«nusus (piemÄram, dilemma izvÄlÄties starp universÄlumu ābÅ«vÄt vienreiz ā palaist jebkurā un to, ka apkopotÄs lietojumprogrammas ir mazÄkas un darbojas ÄtrÄk).
KÄpÄc ir svarÄ«gi apsvÄrt Å”os plusus un mÄ«nusus? TÄ kÄ dažÄs situÄcijÄs to attiecÄ«ba kļūst noteicoÅ”Ä:
PiemÄram, bezserveru/notikumu vadÄ«tÄs vidÄs, kur pakalpojumi vienkÄrÅ”i jÄsÄk (cietajÄ vai mÄ«kstajÄ) reÄllaikÄ, lai bÅ«tu laiks reaÄ£Ät uz notikumiem. AtŔķirÄ«bÄ no ilgstoÅ”iem pastÄvÄ«giem pakalpojumiem, Å”eit aukstÄs palaiÅ”anas ilgums kritiski palielina atbildes laiku uz pieprasÄ«jumu. JVM palaiÅ”ana joprojÄm prasa ievÄrojamu laiku, un, lai gan dažos gadÄ«jumos to var samazinÄt, izmantojot tikai aparatÅ«ras metodes, atŔķirÄ«ba starp vienu sekundi un 5 milisekundÄm var bÅ«t atŔķirÄ«ba starp dzÄ«vÄ«bu un nÄvi. JÄ, Å”eit jÅ«s varat paspÄlÄties ar Java maŔīnu karstÄs rezerves izveidi (ko, piemÄram, mÄs darÄ«jÄm ar OpenWhisk pÄrneÅ”ana uz Knative), taÄu tas pats par sevi negarantÄ, ka bÅ«s pietiekami daudz JVM, lai apstrÄdÄtu pieprasÄ«jumus kÄ slodzes skalas. Un no ekonomiskÄ viedokļa tas, iespÄjams, nav pareizÄkais variants.
TurklÄt bieži parÄdÄs vÄl viens aspekts: vairÄku Ä«re. Neskatoties uz to, ka JVM savÄs iespÄjÄs ir pietuvojuÅ”ies ļoti tuvu operÄtÄjsistÄmÄm, tie joprojÄm nav spÄjÄ«gi darÄ«t to, pie kÄ esam tik ļoti pieraduÅ”i Linux ā izolÄt procesus. TÄpÄc viena pavediena kļūme var nojaukt visu Java maŔīnu. Daudzi cilvÄki cenÅ”as apiet Å”o trÅ«kumu, katrai lietotÄja lietojumprogrammai pieŔķirot atseviŔķu JVM, lai samazinÄtu kļūmes sekas. Tas ir diezgan loÄ£iski, taÄu tas labi nesaskan ar mÄrogoÅ”anu.
TurklÄt uz mÄkoÅiem orientÄtÄm lietojumprogrammÄm svarÄ«gs rÄdÄ«tÄjs ir pakalpojumu blÄ«vums resursdatorÄ. PÄreja uz metodiku 12 pielietojuma faktori, mikropakalpojumi un Kubernetes palielina Java maŔīnu skaitu vienÄ lietojumprogrammÄ. Tas ir, no vienas puses, tas viss nodroÅ”ina elastÄ«bu un uzticamÄ«bu, bet tajÄ paÅ”Ä laikÄ palielinÄs arÄ« bÄzes atmiÅas patÄriÅÅ” apkalpoÅ”anas ziÅÄ, un daži no Å”iem izdevumiem ne vienmÄr ir obligÄti nepiecieÅ”ami. Statiski kompilÄti izpildÄmie faili Å”eit ir noderÄ«gi dažÄdu optimizÄcijas paÅÄmienu dÄļ, piemÄram, zema lÄ«meÅa miruÅ”Ä koda likvidÄÅ”ana, kad galÄ«gajÄ attÄlÄ ir iekļautas tikai tÄs ietvaru daļas (tostarp pats JDK), kuras pakalpojums faktiski izmanto. TÄpÄc Quarkus vietÄjÄ kompilÄcija palÄ«dz blÄ«vi izvietot pakalpojumu gadÄ«jumus resursdatorÄ, neapdraudot droŔību.
Faktiski ar iepriekÅ”minÄtajiem argumentiem jau ir pietiekami, lai saprastu vietÄjÄs kompilÄcijas pamatojumu no Quarkus projekta dalÄ«bnieku viedokļa. TomÄr ir vÄl viens, netehnisks, bet arÄ« svarÄ«gs iemesls: pÄdÄjos gados daudzi programmÄtÄji un izstrÄdes uzÅÄmumi ir atteikuÅ”ies no Java par labu jaunÄm programmÄÅ”anas valodÄm, uzskatot, ka Java kopÄ ar tÄs JVM, skursteÅiem un ietvariem ir kļuvusi pÄrÄk liela. atmiÅas izsalkuÅ”i, pÄrÄk lÄni utt.
TomÄr ieradums izmantot vienu un to paÅ”u rÄ«ku jebkuras problÄmas risinÄÅ”anai ir tas ne vienmÄr ir pareizi. Dažreiz labÄk ir atkÄpties un meklÄt kaut ko citu. Un, ja Quarkus liek cilvÄkiem apstÄties un padomÄt, tad tas nÄk par labu visai Java ekosistÄmai. Quarkus ir novatorisks skatÄ«jums uz to, kÄ veidot efektÄ«vÄkas lietojumprogrammas, padarot Java atbilstoÅ”Äku jaunÄm lietojumprogrammu arhitektÅ«rÄm, piemÄram, bez servera. TurklÄt, pateicoties tÄ paplaÅ”inÄmÄ«bai, Quarkus, cerams, bÅ«s visa Java paplaÅ”inÄjumu ekosistÄma, ievÄrojami palielinot to ietvaru skaitu, kas atbalstÄ«s sÄkotnÄjo kompilÄciju lietojumprogrammÄs.