Rumah > Java > javaTutorial > teks badan

Perkhidmatan Mikro Java Pengecas Turbo dengan Imej Asli Quarkus dan GraalVM

王林
Lepaskan: 2024-08-30 06:03:02
asal
298 orang telah melayarinya

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.

Apakah Imej Asli GraalVM?

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.

Cabaran Teknikal dan Implikasi Kewangan

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.

Menangani Masalah Permulaan Dingin

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).

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

Rajah 1 – Boleh laku asli dimulakan hampir serta-merta(oracle.com)


Mencapai Jejak Memori yang Lebih Kurus

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)

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

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.

Jawa asli dengan Quarkus

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>
Salin selepas log masuk

Menghasilkan Native Executable dengan GraalVM yang Dipasang

Semak versi GraalVM anda menggunakan arahan berikut:

./gu info native-image
Salin selepas log masuk

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
Salin selepas log masuk

Dan untuk mencipta boleh laku asli, gunakan:

./mvnw install -Dnative
Salin selepas log masuk

Arahan ini menjana binari *-runner dalam direktori sasaran, membolehkan anda menjalankan boleh laku asli:

./target/*-runner
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk

Arahan ini memulakan binaan dalam bekas Docker dan menyediakan fail imej yang diperlukan. Anda kemudian boleh memulakan aplikasi dengan:

./target/*-runner
Salin selepas log masuk
Salin selepas log masuk

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:

  1. Kenal pasti repositori Mandrel versi Mandrel yang sesuai

  2. 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
Salin selepas log masuk

3. Jalankan arahan binaan Maven:

./mvnw clean install -Pnative
Salin selepas log masuk

Mencipta Bekas Secara Manual

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"]
Salin selepas log masuk

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.

Ringkasan

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:

  • Lebih pantas
  • Lebih berskala
  • Lebih mudah untuk digunakan
  • Lebih jimat kos

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!