Konpilasyon natif natal nan Quarkus - poukisa li enpòtan

Bonjou tout moun! Sa a se dezyèm pòs nan seri nou an sou Quarkus - jodi a nou pral pale sou konpilasyon natif natal.

Konpilasyon natif natal nan Quarkus - poukisa li enpòtan

Karkus se yon pile Java pwepare pou Kubernetes. Pandan ke gen sètènman anpil plis fè isit la, nou te fè anpil bon travay sou anpil aspè, ki gen ladan optimize JVM a ak yon kantite kad. Youn nan karakteristik Quarkus ki te atire plis enterè nan men devlopè yo se apwòch konplè, san pwoblèm li yo nan vire kòd Java nan dosye ègzèkutabl pou yon sistèm opere espesifik (sa yo rele "konpilasyon natif natal"), menm jan ak C ak C++, kote konpilasyon sa yo. anjeneral rive nan fen yon sik nan konstriksyon, tès, ak deplwaman.

Epi pandan ke konpilasyon natif natal enpòtan, jan nou pral montre anba a, li ta dwe remake ke Quarkus kouri vrèman byen sou machin nan Java ki pi komen, OpenJDK Hotspot, gras a amelyorasyon pèfòmans yo nou te aplike nan tout pil la. Se poutèt sa, konpilasyon natif natal yo ta dwe konsidere kòm yon bonis adisyonèl ki ka itilize kòm vle oswa nesesè. An reyalite, Quarkus depann anpil sou OpenJDK lè li rive imaj natif natal. Ak mòd dev la, ki aksepte cho pa devlopè, asire tès prèske enstantane nan chanjman akòz kapasite yo avanse nan ekzekisyon kòd dinamik aplike nan Hotspot. Anplis de sa, lè w ap kreye imaj GraalVM natif natal, yo itilize bibliyotèk klas OpenJDK ak kapasite HotSpot.

Se konsa, poukisa ou bezwen konpilasyon natif natal si tout bagay deja parfe optimisé? Nou pral eseye reponn kesyon sa a anba a.

Ann kòmanse ak evidan: Red Hat gen anpil eksperyans nan optimize JVM, pil ak kad pandan devlopman pwojè. JBoss, ki gen ladan:

Nou te fè fas ak defi yo nan kouri aplikasyon Java nan nwaj la ak sou aparèy ki gen resous (li: IoT) pou anpil ane epi yo te aprann jwenn pi plis nan JVM an tèm de pèfòmans ak optimize memwa. Tankou anpil lòt moun, nou te travay ak konpilasyon natif natal nan aplikasyon Java pou yon tan long nan G.C.J., Avyè, Excelsior JET e menm Dalvik epi nou byen okouran de avantaj ak dezavantaj apwòch sa a (pa egzanp, dilèm nan chwazi ant inivèsalite a nan "bati yon fwa - kouri-nenpòt kote" ak lefèt ke aplikasyon konpile yo pi piti epi kouri pi vit).

Poukisa li enpòtan pou konsidere avantaj ak dezavantaj sa yo? Paske nan kèk sitiyasyon rapò yo vin desizif:

  • Pou egzanp, nan anviwònman san sèvè/kondwi evènman kote sèvis yo senpleman dwe kòmanse nan (difisil oswa mou) tan reyèl yo nan lòd yo gen tan pou reponn a evènman yo. Kontrèman ak sèvis ki dire lontan, isit la dire yon demaraj frèt ogmante tan repons a yon demann. JVM a toujou pran yon kantite tan siyifikatif pou kòmanse, epi pandan ke sa a ka redwi nan kèk ka pa metòd pyès ki nan konpitè pi, diferans ki genyen ant yon segonn ak 5 milisgond ka diferans ki genyen ant lavi ak lanmò. Wi, isit la ou ka jwe ak kreye yon rezèv cho nan machin Java (ki, pou egzanp, nou te fè ak pote OpenWhisk nan Knative), men sa a nan tèt li pa garanti ke pral gen ase JVM pou trete demann kòm echèl chaj yo. Ak nan yon pwen de vi ekonomik, sa a se pwobableman pa opsyon ki pi kòrèk.
  • Pli lwen, gen yon lòt aspè ki souvan parèt: miltilokatè. Malgre lefèt ke JVM yo te vin trè pre sistèm opere nan kapasite yo, yo toujou pa kapab fè sa nou tèlman abitye nan Linux - pwosesis izole. Se poutèt sa, echèk nan yon sèl fil ka desann machin nan tout Java. Anpil moun eseye jwenn dezavantaj sa a lè yo dedye yon JVM separe pou aplikasyon pou chak itilizatè yo nan lòd yo minimize konsekans yo nan yon echèk. Sa a se byen lojik, men li pa anfòm byen ak dekale.
  • Anplis de sa, pou aplikasyon pou nwaj oryante, yon endikatè enpòtan se dansite sèvis sou lame a. Tranzisyon nan metodoloji 12 faktè aplikasyon, microservices ak Kubernetes ogmante kantite machin Java pou chak aplikasyon. Sa se, sou yon bò, tout bagay sa yo bay Elastisite ak fyab, men an menm tan an konsomasyon nan memwa baz an tèm de sèvis ogmante tou, ak kèk nan depans sa yo pa toujou estrikteman nesesè. Fichye ègzèkutabl konpile statikman benefisye isit la akòz teknik optimize divès kalite, tankou eliminasyon kòd ki mouri nan nivo ki ba, lè imaj final la gen ladan sèlman pati sa yo nan kad yo (ki gen ladan JDK nan tèt li) ke sèvis la aktyèlman itilize. Se poutèt sa, Quarkus konpilasyon natif natal ede yo peple ka sèvis sou lame a san yo pa konpwomèt sekirite.

Aktyèlman, agiman ki anwo yo se deja ase yo konprann jistifikasyon nan konpilasyon natif natal soti nan pwen de vi nan patisipan yo pwojè Quarkus. Sepandan, gen yon lòt rezon ki pa teknik, men tou enpòtan: nan dènye ane yo, anpil pwogramè ak konpayi devlopman yo te abandone Java an favè nouvo lang pwogramasyon, kwè ke Java, ansanm ak JVM li yo, pil ak kad li yo, te vin twò. grangou memwa, twò dousman, elatriye.

Sepandan, abitid itilize menm zouti pou rezoud nenpòt pwoblèm se li pa toujou bon. Pafwa li pi bon pou w fè yon etap tounen epi chèche yon lòt bagay. Men, si Quarkus fè moun pran poz epi reflechi, Lè sa a, sa a bon pou tout ekosistèm Java a. Quarkus reprezante yon opinyon inovatè sou fason pou konstwi aplikasyon ki pi efikas, fè Java pi enpòtan pou nouvo achitekti aplikasyon tankou san sèvè. Anplis de sa, akòz ekstansibilite li yo, Quarkus pral èspere ke gen yon ekosistèm antye nan ekstansyon Java, siyifikativman ogmante kantite kad ki pral sipòte konpilasyon natif natal nan aplikasyon soti nan bwat la.

Sous: www.habr.com

Add nouvo kòmantè