Dalam landskap dinamik pembangunan perisian moden, perkhidmatan mikro telah menjadi pendekatan seni bina yang digemari. Walaupun metodologi ini menawarkan banyak kelebihan, ia bukan tanpa cabarannya. Isu seperti jejak memori yang besar, masa mula yang dilanjutkan dan penggunaan CPU yang tinggi sering mengiringi perkhidmatan berasaskan JVM tradisional. Cabaran ini bukan sahaja memberi kesan kepada aspek teknikal tetapi juga mempunyai implikasi kewangan yang boleh menjejaskan kos keseluruhan menjalankan dan menyelenggara penyelesaian perisian dengan ketara.
GraalVM Native Image ialah ciri utama GraalVM, yang merupakan masa jalan berprestasi tinggi yang menyediakan sokongan untuk pelbagai bahasa pengaturcaraan dan mod pelaksanaan. Khususnya, GraalVM Native Image membolehkan anda menyusun aplikasi Java lebih awal ke dalam boleh laku asli kendiri, memintas keperluan untuk Mesin Maya Java (JVM) semasa masa jalan. Pendekatan inovatif ini menghasilkan fail boleh laku yang mempamerkan masa permulaan yang hampir serta-merta dan mengurangkan penggunaan memori dengan ketara berbanding rakan JVM tradisional mereka. Boleh laku asli ini direka dengan teliti, mengandungi hanya kelas, kaedah, dan perpustakaan bergantung yang penting yang sangat diperlukan untuk kefungsian aplikasi. Di luar kehebatan teknikalnya, GraalVM Native Image muncul sebagai penyelesaian strategik dengan implikasi yang meluas. Ia bukan sahaja mengatasi cabaran teknikal tetapi juga memperkenalkan kes kewangan yang menarik. Dengan memudahkan pembangunan aplikasi Java asli awan yang cekap, selamat dan berskala serta-merta, GraalVM menjadi penting dalam mengoptimumkan penggunaan sumber dan memupuk keberkesanan kos. Pada dasarnya, ia memainkan peranan penting dalam meningkatkan prestasi dan kecekapan kewangan penyelesaian perisian dalam persekitaran dinamik kontemporari.
1. Tapak Memori Besar
Kesan Teknikal
Perkhidmatan berasaskan JVM tradisional sering menimbulkan overhed memori yang besar disebabkan pemuatan kelas dan metadata untuk kelas yang dimuatkan.
Kes Kewangan
Penggunaan memori yang tinggi diterjemahkan kepada peningkatan kos infrastruktur. Penghapusan metadata GraalVM untuk kelas yang dimuatkan dan pengoptimuman lain membawa kepada penggunaan sumber yang lebih cekap, menghasilkan penjimatan kos yang berpotensi.
2. Masa Mula Dilanjutkan
Kesan Teknikal
Permulaan dingin dalam perkhidmatan mikro boleh membawa kepada masa tindak balas yang lebih tinggi, memberi kesan kepada pengalaman pengguna dan berpotensi menyebabkan kemerosotan perkhidmatan.
Kes Kewangan
Masa mula yang dilanjutkan bukan sahaja menjejaskan kepuasan pengguna tetapi juga menyumbang kepada kos operasi yang lebih tinggi. Pengoptimuman GraalVM, seperti menghapuskan overhed pemuatan kelas dan timbunan imej pra-jana semasa pembinaan, secara drastik mengurangkan masa permulaan, yang berpotensi meminimumkan perbelanjaan operasi.
3. Penggunaan CPU yang Tinggi
Kesan Teknikal
JVM tradisional sering membakar kitaran CPU untuk pemprofilan dan kompilasi Just-In-Time (JIT) semasa permulaan.
Kes Kewangan
Penggunaan CPU yang berlebihan menyebabkan kos infrastruktur awan meningkat. Pengelakan GraalVM terhadap pemprofilan dan overhed JIT-ing secara langsung menyumbang kepada pengurangan penggunaan CPU, diterjemahkan kepada potensi penjimatan kos dalam penggunaan awan.
Perkhidmatan mikro, terutamanya dalam persekitaran tanpa pelayan atau dalam kontena, sering menghadapi Masalah Permulaan Dingin, yang menjejaskan masa tindak balas dan pengalaman pengguna. GraalVM menangani cabaran ini dengan melaksanakan beberapa pengoptimuman:
1. Tiada Overhed Pemuatan Kelas
Aplikasi Java tradisional bergantung pada pemuatan kelas pada masa jalan untuk memuatkan dan memautkan kelas secara dinamik. Proses ini memperkenalkan overhed, terutamanya semasa fasa permulaan. GraalVM meminimumkan overhed ini melalui proses yang dikenali sebagai kompilasi statik atau ahead-of-time (AOT). Ini melibatkan pramuat, memaut dan memulakan sebahagian semua kelas yang diperlukan oleh aplikasi. Akibatnya, tidak ada keperluan untuk pemuatan kelas masa jalan semasa aplikasi dimulakan.
2. Penghapusan Kod Ditafsir
Mesin Maya Java Tradisional bergantung pada mod pelaksanaan yang ditafsirkan sebelum menggunakan kompilasi Just-In-Time (JIT). Ini boleh menyumbang kepada kelewatan permulaan dan peningkatan penggunaan CPU. Boleh laku asli tidak mengandungi kod yang ditafsirkan, seterusnya menyumbang kepada masa permulaan yang lebih pantas.
3. Tiada Pemprofilan dan Overhed JIT
GraalVM memintas keperluan untuk memulakan Pengkompil Just-In-Time (JIT), mengurangkan penggunaan CPU semasa permulaan.
4. Penjanaan Timbunan Imej pada Masa Pembinaan
Utiliti imej asli GraalVM membolehkan pelaksanaan proses pemulaan untuk kelas tertentu semasa proses binaan. Ini menghasilkan penjanaan timbunan imej yang merangkumi bahagian yang dipramulakan, mempercepatkan permulaan aplikasi.
Utiliti imej asli Oracle GraalVM telah menunjukkan masa permulaan hampir 100 kali lebih pantas daripada aplikasi berasaskan JVM tradisional. Graf di bawah menggambarkan pengurangan ketara dalam keperluan memori masa jalan, mempamerkan kecekapan GraalVM berbanding HotSpot(Rajah 1).
Rajah 1 – Boleh laku asli dimulakan hampir serta-merta(oracle.com)
GraalVM menyumbang kepada mengurangkan jejak memori melalui pengoptimuman berikut:
1. Tiada Metadata untuk Kelas Dimuatkan
GraalVM mengelak daripada menyimpan metadata untuk kelas yang dimuatkan secara dinamik dalam memori bukan timbunan. Semasa proses binaan, maklumat kelas yang diperlukan dimuatkan dan dipautkan, meminimumkan keperluan untuk metadata tambahan semasa masa jalan.
2. Tiada Data Pemprofilan atau Pengoptimuman JIT
Memandangkan bytecode sudah ada dalam kod asli, GraalVM menghapuskan keperluan untuk mengumpul data pemprofilan untuk pengoptimuman JIT, mengurangkan overhed memori.
3. Teknologi Pengasingan
GraalVM memperkenalkan Isolates, teknologi yang membahagikan timbunan kepada "timbunan" yang lebih kecil dan bebas, meningkatkan kecekapan, terutamanya dalam senario pemprosesan permintaan.
Secara umum, ia menggunakan sehingga x5 kali lebih sedikit memori berbanding berjalan pada JVM(Rajah 2)
Rajah 2 – Memori boleh laku asli berbanding Go atau Java HotSpot(oracle.com)
Kesimpulannya, utiliti imej asli GraalVM menawarkan penyelesaian transformatif kepada cabaran yang ditimbulkan oleh perkhidmatan mikro, menangani masa permulaan, jejak memori dan kebimbangan penggunaan CPU. Dengan mengguna pakai GraalVM, pembangun boleh mencipta aplikasi Java asli awan yang bukan sahaja cekap dan selamat tetapi juga memberikan pengalaman pengguna yang unggul.
Untuk menyusun perkhidmatan Quarkus anda ke dalam imej asli, pelbagai kaedah tersedia. Walaupun artikel ini tidak akan mendalami prosedur binaan asli Quarkus, ia memberikan gambaran keseluruhan langkah-langkah penting.
Sebelum meneruskan sebarang pendekatan untuk membina imej asli, adalah penting untuk menyediakan profil asli yang betul dalam fail pom.xml anda. Tambahkan profil berikut:
<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles>
Menghasilkan Native Executable dengan GraalVM yang Dipasang
Semak versi GraalVM anda menggunakan arahan berikut:
./gu info native-image
Arahan ini akan memaparkan versi GraalVM yang dipasang:
Downloading: Component catalog from www.graalvm.org Filename : https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.0/native-image-installable-svm-java19-linux-amd64-22.3.0.jar Name : Native Image ID : native-image Version : 22.3.0 GraalVM : 22.3.0 Stability: Experimental Component bundle native-image cannot be installed - The same component Native Image (org.graalvm.native-image[22.3.0.0/55b341ca1bca5219aafa8ed7c8a2273b81d184dd600d8261c837fc32d2dedae5]) is already installed in version 22.3.0
Dan untuk mencipta boleh laku asli, gunakan:
./mvnw install -Dnative
Arahan ini menjana binari *-runner dalam direktori sasaran, membolehkan anda menjalankan boleh laku asli:
./target/*-runner
Mencipta Native Executable tanpa GraalVM dipasang
Jika memasang GraalVM secara setempat menimbulkan cabaran, binaan dalam bekas boleh digunakan:
./mvnw install -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=graalvm
Arahan ini memulakan binaan dalam bekas Docker dan menyediakan fail imej yang diperlukan. Anda kemudian boleh memulakan aplikasi dengan:
./target/*-runner
Dalam kes membina imej asli terbukti mencabar, pasukan RedHat menyediakan pengedaran khusus GraalVM yang direka untuk rangka kerja Quarkus yang dipanggil Mandrel. Mandrel memperkemas
GraalVM, memfokuskan semata-mata pada keupayaan imej asli yang penting untuk aplikasi Quarkus. Untuk menggunakan Mandrel, ikut langkah berikut:
Kenal pasti repositori Mandrel versi Mandrel yang sesuai
Tetapkan versi Mandrel dalam fail application.properties anda:
quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17
3. Jalankan arahan binaan Maven:
./mvnw clean install -Pnative
Bagi mereka yang lebih suka kawalan manual ke atas penciptaan kontena, binaan Docker berbilang peringkat boleh digunakan.
FROM quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17 AS build COPY --chown=quarkus:quarkus mvnw /app/mvnw COPY --chown=quarkus:quarkus .mvn /app/.mvn COPY --chown=quarkus:quarkus pom.xml /app/ USER quarkus WORKDIR /app RUN ./mvnw -B org.apache.maven.plugins:maven-dependency-plugin:3.6.1:go-offline COPY src /app/src RUN ./mvnw package -Dnative FROM quay.io/quarkus/quarkus-micro-image:2.0 WORKDIR /app/ COPY --from=build /app/target/*-runner /app/application RUN chmod 775 /app /app/application \ && chown -R 1001 /app \ && chmod -R "g+rwX" /app \ && chown -R 1001:root /app EXPOSE 8080 USER 1001 CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
Fail Docker ini mengatur binaan berbilang peringkat, menghasilkan imej Docker dengan aplikasi Quarkus anda. Jalankan fail Docker ini untuk menghasilkan imej Docker, sedia untuk menjalankan aplikasi Quarkus anda.
GraalVM Native Image ialah teknologi berkuasa yang boleh merevolusikan cara anda membangun dan menggunakan perkhidmatan mikro Java. Dengan mengguna pakai Imej Asli GraalVM, anda boleh mencipta perkhidmatan mikro iaitu:
GraalVM Native Image ialah pemboleh utama pembangunan Java asli awan dan boleh membantu anda mencapai prestasi, kebolehskalaan dan penjimatan kos yang dituntut oleh perniagaan anda.
Atas ialah kandungan terperinci Perkhidmatan Mikro Java Pengecas Turbo dengan Imej Asli Quarkus dan GraalVM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!