Natív fordítás a Quarkusban – miért fontos ez?

Üdvözlök mindenkit! Itt a második bejegyzésünk a Quarkusról – ma a natív fordításról beszélünk.

Natív fordítás a Quarkusban – miért fontos ez?

Quarkus – ez egy Java-alapú teknős, amely a Kubernetes. És bár sok minden még hátravan, alaposan kidolgoztunk számos szempontot, beleértve a JVM optimalizálását és számos keretrendszert. A Quarkus egyik jellemzője, amely különös érdeklődést keltett a fejlesztők körében, a zökkenőmentes megközelítés a Java-kód végrehajtható fájlokká való átalakítására a konkrét operációs rendszerhez (úgynevezett „natív fordítás”), hasonlóan a C és C++ nyelvekhez, ahol az ilyen fordítás általában a gyártás, tesztelés és telepítés ciklusának végén történik.

És bár a natív fordítás, amint azt alább bemutatjuk, fontos, fontos megjegyezni, hogy a Quarkus valójában nagyon jól működik a standard OpenJDK Hotspot Java gépen is, a teljes veremben megvalósított teljesítményjavításoknak köszönhetően. Ezért a natív fordítást érdemes plusz bónuszként kezelni, amely igény szerint vagy szükség esetén felhasználható. Valójában a natív képek tekintetében a Quarkus nagymértékben támaszkodik az OpenJDK-ra. Az általunk jól fogadott fejlesztői üzemmód pedig szinte azonnali változások tesztelését biztosít a Hotspot implementált fejlett dinamikus kódvégrehajtási lehetőségeinek köszönhetően. Ezen kívül a natív képek létrehozásakor a GraalVM az OpenJDK osztálykönyvtárát és a HotSpot képességeit használja.

Tehát miért van szükség natív fordításra, ha minden amúgy remekül optimalizált? Erre a kérdésre próbáljuk meg válaszolni alább.

Kezdjük a nyilvánvalóval: A Red Hat jelentős tapasztalattal rendelkezik a JVM, verem és keretrendszerek optimalizálásában a projekt fejlesztése során. JBoss, beleértve:

  • Az első felhőalapú alkalmazás-szerver a Red Hat OpenShift.
  • Az első alkalmazás-szerver asztali számítógépeken Plug PC.
  • Az első alkalmazás-szerver a Raspberry Pi.
  • Számos projekt, amelyek korlátozott erőforrású eszközökön futnak Android.

Már évek óta foglalkozunk a Java-alkalmazások felhőben és korlátozott erőforrású eszközökön (értsd: IoT) történő futtatásával, és megtanultuk kihozni a legtöbbet a JVM-ből teljesítmény és memóriaoptimalizálás szempontjából. Mint sok más, hosszú ideje dolgozunk a Java-alkalmazások natív fordításán keresztül. GCJ, Avian, Excelsior JET Kapcsolja össze saját domainjét Dalvik Tökéletesen tudatában vagyunk ennek a megközelítésnek az előnyeinek és hátrányainak (például a „build once – run-anywhere” univerzalitás és a kisebb méretű, gyorsabban induló kompájnált alkalmazások közötti dilemmának).

Miért fontos figyelembe venni ezeket az előnyöket és hátrányokat? Mert bizonyos helyzetekben a köztük lévő arány döntő jelentőségű lehet:

  • Például serverless/irányított események környezetében, ahol a szolgáltatásoknak feltétlenül el kell indulniuk valós időben (szigorú vagy lágy) ahhoz, hogy képesek legyenek reagálni az eseményekre. Ellentétben a hosszú élettartamú állandó szolgáltatásokkal, itt a hideg indítás hosszú ideje kritikus módon növeli a válaszadási időt. A JVM indítása még mindig jelentős időt igényel, és bár bizonyos esetekben ezt hardveres módszerekkel lehet rövidíteni, a különbség a másodperc és az 5 milliszekundum között élet és halál kérdése lehet. Igen, lehet játszani a Java gépek meleg tartalékának létrehozásával (ahogyan ezt például mi is tettük a OpenWhisk Knative-re történő portálásakor), de önmagában ez nem garantálja a kérdések kezelésére elegendő JVM számot a terhelés skálázásakor. Gazdasági szempontból valószínűleg nem a legjobb megoldás.
  • Ezen kívül van még egy gyakran felmerülő aspektus, mint a multitenanciáság. Annak ellenére, hogy a JVM képességei jelentősen megközelítették az operációs rendszereket, továbbra sem képesek olyan izolálásra, mint amit a Linuxnál megszoktunk – izolálni a folyamatokat. Ezért egy szál meghibásodása az egész Java gépet tönkreteheti. Sokan megpróbálják ezt a hátrányt úgy megkerülni, hogy minden felhasználónak külön JVM-t rendelnek az alkalmazásokhoz, minimalizálva a meghibásodás következményeit. Ez logikus, de nem jól illeszkedik a skálázáshoz.
  • Továbbá, a felhőorientált alkalmazásoknál fontos egy mutató, mint a szolgáltatások sűrűsége a gazdán. Az áttérés a 12 alkalmazási tényezőre, a mikroszolgáltatások és a Kubernetes növeli a Java gépek számát egy alkalmazás esetében. Vagyis egyrészt mindez rugalmasságot és megbízhatóságot nyújt, de ugyanakkor nő az alap memóriafogyasztás a szolgáltatásra vetítve, ráadásul ezeknek a költségeknek egy része nem mindig szigorúan szükséges. A statikusan lefordított végrehajtható fájlok különböző optimalizációs technikák révén, mint például az alacsony szintű dead-code eltávolítás, itt előnyre tesznek szert, amikor a végső képre csak azok a keretrendszerek (beleértve magát a JDK-t) kerülnek be, amelyeket a szolgáltatás valójában használ. Ezért a Quarkus natív fordítása segít a szolgáltatás példányait sűrűbben elhelyezni a gazdagépen anélkül, hogy a biztonságot veszélyeztetné.

Az eddig felsorolt érvek már elegendőek ahhoz, hogy megértsük a natív fordítás indokoltságát a Quarkus projekt résztvevői szempontjából. Azonban van egy másik, nem technikai, de szintén fontos ok: az utóbbi években sok programozó és fejlesztőcég elhagyta a Java-t új programozási nyelvek javára, mivel úgy vélték, hogy a Java a JVM-jével, a stackjeivel és keretrendszereivel túlságosan memóriát igényel, túl lassú, és így tovább.

A megszokás, hogy ugyanazt az eszközt használjuk minden feladat megoldására – nem mindig helyes. Néha jobb egy lépést hátralépni és valami mást keresni. És ha a Quarkus arra ösztönzi az embereket, hogy tartsanak szünetet és elgondolkodjanak, az jót tesz a Java ökoszisztémának. A Quarkus a hatékonyabb alkalmazások létrehozásának innovatív megközelítését képviseli, relevánsabbá téve a Java-t az új alkalmazásarchitektúrák, mint például a serverless számára. Továbbá, a bővíthetősége révén a Quarkus reményeink szerint egy teljes Java bővítmény-ökoszisztémát fog kifejleszteni, jelentősen növelve a natív fordítást natív módon támogató keretrendszerek számát.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster