Quarkusdagi mahalliy kompilyatsiya - bu nima uchun muhim

Hammaga salom! Bu Quarkus haqidagi seriyamizdagi ikkinchi post - bugun biz mahalliy kompilyatsiya haqida gaplashamiz.

Quarkusdagi mahalliy kompilyatsiya - bu nima uchun muhim

Kvarkus uchun moslashtirilgan Java stekidir Kubernetes. Albatta, bu yerda qilinadigan ishlar ko‘p bo‘lsa-da, biz ko‘p jihatlar, jumladan JVM va qator ramkalarni optimallashtirish bo‘yicha ko‘plab yaxshi ishlarni amalga oshirdik. Quarkus-ning ishlab chiquvchilarning qiziqishini oshirgan xususiyatlaridan biri bu Java kodini C va C++ ga o'xshash ma'lum bir operatsion tizim uchun bajariladigan fayllarga ("mahalliy kompilyatsiya" deb ataladi) aylantirishga keng qamrovli, muammosiz yondashuvidir. odatda qurish, sinovdan o'tkazish va joylashtirish tsiklining oxirida sodir bo'ladi.

Mahalliy kompilyatsiya muhim bo'lsa-da, quyida ko'rsatamiz, shuni ta'kidlash kerakki, Quarkus biz stek bo'ylab amalga oshirgan ish faoliyatini yaxshilash tufayli eng keng tarqalgan Java mashinasi OpenJDK Hotspotda juda yaxshi ishlaydi. Shuning uchun, mahalliy kompilyatsiya istalgan yoki kerak bo'lganda ishlatilishi mumkin bo'lgan qo'shimcha bonus sifatida ko'rib chiqilishi kerak. Aslida, Quarkus mahalliy tasvirlar haqida gap ketganda OpenJDK ga tayanadi. Ishlab chiquvchilar tomonidan iliq qabul qilingan dev rejimi Hotspot-da joriy qilingan dinamik kodni bajarishning ilg'or imkoniyatlari tufayli o'zgarishlarni deyarli bir zumda sinab ko'rishni ta'minlaydi. Bundan tashqari, mahalliy GraalVM tasvirlarini yaratishda OpenJDK sinf kutubxonasi va HotSpot imkoniyatlaridan foydalaniladi.

Xo'sh, agar hamma narsa allaqachon mukammal optimallashtirilgan bo'lsa, nega sizga mahalliy kompilyatsiya kerak? Bu savolga quyida javob berishga harakat qilamiz.

Aniq narsadan boshlaylik: Red Hat loyihani ishlab chiqish jarayonida JVM, stek va ramkalarni optimallashtirish bo'yicha katta tajribaga ega. JBoss, shu jumladan:

Biz ko‘p yillar davomida bulutda va cheklangan resurslarga ega qurilmalarda (o‘qing: IoT) Java ilovalarini ishga tushirish bilan bog‘liq muammolar bilan shug‘ullanib keldik va unumdorlik va xotirani optimallashtirish nuqtai nazaridan JVM’dan maksimal darajada foydalanishni o‘rgandik. Boshqa ko'pchilik singari, biz ham uzoq vaqt davomida Java ilovalarining mahalliy kompilyatsiyasi bilan ishlamoqdamiz G.C.J., parranda, Excelsior JET va hatto Dalvik va biz bu yondashuvning ijobiy va salbiy tomonlarini yaxshi bilamiz (masalan, “bir marta qurish – hamma joyda ishga tushirish” universalligi va kompilyatsiya qilingan ilovalarning kichikroq va tezroq ishlashi o‘rtasida tanlov dilemmasi).

Nima uchun bu ijobiy va salbiy tomonlarini hisobga olish muhim? Chunki ba'zi hollarda ularning nisbati hal qiluvchi bo'ladi:

  • Masalan, serversiz/hodisaga asoslangan muhitlarda xizmatlar shunchaki boshlash kerak voqealarga javob berishga vaqt topish uchun (qattiq yoki yumshoq) real vaqtda. Uzoq muddatli doimiy xizmatlardan farqli o'laroq, bu erda sovuq boshlashning davomiyligi so'rovga javob berish vaqtini keskin oshiradi. JVMni ishga tushirish uchun hali ham katta vaqt talab etiladi va bu ba'zi hollarda sof apparat usullari bilan qisqartirilishi mumkin bo'lsa-da, bir soniya va 5 millisekundlar orasidagi farq hayot va o'lim o'rtasidagi farq bo'lishi mumkin. Ha, bu erda siz Java mashinalarining issiq zaxirasini yaratish bilan o'ynashingiz mumkin (masalan, biz buni qildik. OpenWhisk-ni Knative-ga o'tkazish), lekin bu o'z-o'zidan yuk shkalasi sifatida so'rovlarni qayta ishlash uchun etarli JVM bo'lishini kafolatlamaydi. Va iqtisodiy nuqtai nazardan, bu, ehtimol, eng to'g'ri variant emas.
  • Bundan tashqari, tez-tez paydo bo'ladigan yana bir jihat bor: ko'p ijaraga olish. JVM'lar o'z imkoniyatlari bo'yicha operatsion tizimlarga juda yaqinlashganiga qaramay, ular hali ham Linuxda biz o'rganib qolgan ishlarni - izolyatsiyalash jarayonlarini amalga oshirishga qodir emas. Shuning uchun, bitta ish zarrachasining ishdan chiqishi butun Java mashinasini buzishi mumkin. Ko'pchilik muvaffaqiyatsizlik oqibatlarini minimallashtirish uchun har bir foydalanuvchi ilovasi uchun alohida JVM ajratish orqali ushbu kamchilikni bartaraf etishga harakat qiladi. Bu juda mantiqiy, lekin masshtablash bilan yaxshi mos kelmaydi.
  • Bundan tashqari, bulutga yo'naltirilgan ilovalar uchun muhim ko'rsatkich xostdagi xizmatlarning zichligi hisoblanadi. Metodologiyaga o'tish 12 ta amaliy omil, mikroservislar va Kubernetes har bir dastur uchun Java mashinalari sonini oshiradi. Ya'ni, bir tomondan, bularning barchasi elastiklik va ishonchlilikni ta'minlaydi, lekin ayni paytda xizmat ko'rsatish nuqtai nazaridan asosiy xotiraning iste'moli ham oshadi va bu xarajatlarning bir qismi har doim ham qat'iy zarur emas. Statik kompilyatsiya qilingan bajariladigan fayllar bu erda turli xil optimallashtirish usullari tufayli foyda keltiradi, masalan, past darajadagi o'lik kodni yo'q qilish, agar oxirgi tasvir faqat xizmat haqiqatda foydalanadigan ramka qismlarini (jumladan, JDK ning o'zini) o'z ichiga oladi. Shu sababli, Quarkus mahalliy kompilyatsiyasi xavfsizlikni buzmasdan xostga xizmat ko'rsatish namunalarini zich joylashtirishga yordam beradi.

Aslida, yuqoridagi dalillar Quarkus loyihasi ishtirokchilari nuqtai nazaridan mahalliy kompilyatsiya asoslanishini tushunish uchun etarli. Biroq, yana bir texnik bo'lmagan, ammo muhim sabab ham bor: so'nggi yillarda ko'plab dasturchilar va ishlab chiquvchilar Java-dan voz kechib, yangi dasturlash tillari foydasiga Java-ni JVM-lar, steklar va ramkalar bilan bir qatorda juda ko'p narsaga aylangan deb hisoblashdi. xotira och, juda sekin va h.k.

Biroq, har qanday muammoni hal qilish uchun bir xil vositadan foydalanish odati har doim ham to'g'ri emas. Ba'zan orqaga bir qadam tashlab, boshqa narsani izlash yaxshiroqdir. Va agar Quarkus odamlarni to'xtatib, o'ylashga majbur qilsa, bu butun Java ekotizimiga foydali bo'ladi. Quarkus Java-ni serversiz kabi yangi ilovalar arxitekturalariga ko'proq moslashtirib, samaraliroq ilovalar yaratishning innovatsion ko'rinishini ifodalaydi. Bundan tashqari, kengayishi tufayli Quarkus Java kengaytmalarining butun ekotizimiga ega bo'ladi, bu esa ilovalarda mahalliy kompilyatsiyani qo'llab-quvvatlaydigan ramkalar sonini sezilarli darajada oshiradi.

Manba: www.habr.com

a Izoh qo'shish