في المشهد الديناميكي لتطوير البرمجيات الحديثة، أصبحت الخدمات الصغيرة هي النهج المعماري المفضل. وفي حين توفر هذه المنهجية العديد من المزايا، إلا أنها لا تخلو من التحديات. غالبًا ما تصاحب الخدمات التقليدية المستندة إلى JVM مشكلات مثل آثار الذاكرة الكبيرة وأوقات البدء الممتدة والاستخدام العالي لوحدة المعالجة المركزية. لا تؤثر هذه التحديات على الجوانب التقنية فحسب، بل لها أيضًا آثار مالية يمكن أن تؤثر بشكل كبير على التكلفة الإجمالية لتشغيل وصيانة الحلول البرمجية.
تعد GraalVM Native Image إحدى الميزات الرئيسية لـ GraalVM، وهو وقت تشغيل عالي الأداء يوفر الدعم لمختلف لغات البرمجة وأنماط التنفيذ. على وجه التحديد، تسمح لك GraalVM Native Image بتجميع تطبيقات Java مسبقًا إلى ملفات تنفيذية أصلية مستقلة، مما يتجاوز الحاجة إلى جهاز Java الظاهري (JVM) أثناء وقت التشغيل. ينتج عن هذا الأسلوب المبتكر ملفات قابلة للتنفيذ تظهر أوقات بدء تشغيل فورية تقريبًا وتقلل بشكل كبير من استهلاك الذاكرة مقارنة بنظيراتها التقليدية في JVM. تم تصميم هذه الملفات التنفيذية الأصلية بدقة، وتحتوي فقط على الفئات الأساسية والأساليب والمكتبات التابعة التي لا غنى عنها لوظائف التطبيق. وبعيدًا عن براعتها التقنية، تظهر GraalVM Native Image كحل استراتيجي له آثار بعيدة المدى. فهو لا يتغلب على التحديات التقنية فحسب، بل يقدم أيضًا حالة مالية مقنعة. من خلال تسهيل تطوير تطبيقات Java الأصلية السحابية الفعالة والآمنة والقابلة للتطوير على الفور، تصبح GraalVM فعالة في تحسين استخدام الموارد وتعزيز فعالية التكلفة. في جوهرها، تلعب دورًا محوريًا في رفع الأداء والكفاءة المالية للحلول البرمجية في البيئات الديناميكية المعاصرة.
1. آثار ذاكرة كبيرة
التأثير الفني
غالبًا ما تتحمل الخدمات التقليدية المستندة إلى JVM حملًا كبيرًا للذاكرة بسبب تحميل الفئات والبيانات الوصفية للفئات المحملة.
الحالة المالية
يؤدي ارتفاع استهلاك الذاكرة إلى زيادة تكاليف البنية التحتية. تؤدي إزالة GraalVM للبيانات التعريفية للفئات المحملة والتحسينات الأخرى إلى استخدام أكثر كفاءة للموارد، مما يؤدي إلى توفير محتمل في التكاليف.
2. أوقات البدء الممتدة
التأثير الفني
يمكن أن تؤدي البداية الباردة في الخدمات الصغيرة إلى أوقات استجابة أعلى، مما يؤثر على تجربة المستخدم ويحتمل أن يتسبب في تدهور الخدمة.
الحالة المالية
لا تؤثر أوقات البدء الممتدة على رضا المستخدمين فحسب، بل تساهم أيضًا في ارتفاع تكاليف التشغيل. تعمل تحسينات GraalVM، مثل التخلص من الحمل الزائد للفئات وإنشاء كومة الصور مسبقًا أثناء الإنشاء، على تقليل أوقات بدء التشغيل بشكل كبير، ومن المحتمل تقليل نفقات التشغيل.
3. استخدام عالي لوحدة المعالجة المركزية
التأثير الفني
غالبًا ما تحرق أجهزة JVM التقليدية دورات وحدة المعالجة المركزية للتوصيف والتجميع في الوقت المناسب (JIT) أثناء بدء التشغيل.
الحالة المالية
يؤدي الاستخدام المفرط لوحدة المعالجة المركزية إلى زيادة تكاليف البنية التحتية السحابية. يساهم تجنب GraalVM للتوصيف وأعباء JIT بشكل مباشر في تقليل استهلاك وحدة المعالجة المركزية، مما يترجم إلى توفير محتمل في التكاليف في استخدام السحابة.
غالبًا ما تواجه الخدمات الصغيرة، خاصة في البيئات التي لا تحتوي على خادم أو في حاويات، مشكلة البداية الباردة، مما يؤثر على أوقات الاستجابة وتجربة المستخدم. يعالج GraalVM هذا التحدي من خلال تنفيذ العديد من التحسينات:
1. لا يوجد تحميل إضافي للفصل الدراسي
تعتمد تطبيقات Java التقليدية على تحميل الفئات في وقت التشغيل لتحميل الفئات وربطها ديناميكيًا. تقدم هذه العملية الحمل، خاصة أثناء مرحلة بدء التشغيل. يقوم GraalVM بتقليل هذا الحمل من خلال عملية تعرف باسم التجميع الثابت أو المسبق (AOT). يتضمن ذلك التحميل المسبق لجميع الفئات التي يتطلبها التطبيق وربطها وبدء تشغيلها جزئيًا. ونتيجة لذلك، ليست هناك حاجة لتحميل فئة وقت التشغيل أثناء بدء تشغيل التطبيق.
2. إزالة التعليمات البرمجية المفسرة
تعتمد أجهزة Java الافتراضية التقليدية على وضع التنفيذ المفسر قبل تطبيق التحويل البرمجي Just-In-Time (JIT). يمكن أن يساهم هذا في تأخير بدء التشغيل وزيادة استخدام وحدة المعالجة المركزية. لا تحتوي الملفات التنفيذية الأصلية على تعليمات برمجية مفسرة، مما يساهم في زيادة سرعة بدء التشغيل.
3. لا توجد ملفات تعريف وJIT-ing النفقات العامة
يتجاوز GraalVM الحاجة إلى تشغيل مترجم Just-In-Time (JIT)، مما يقلل من استخدام وحدة المعالجة المركزية أثناء بدء التشغيل.
4. إنشاء كومة الصور في وقت البناء
تتيح الأداة المساعدة للصور الأصلية لـ GraalVM تنفيذ عمليات التهيئة لفئات معينة أثناء عملية الإنشاء. وينتج عن هذا إنشاء كومة صور تتضمن أجزاء تمت تهيئتها مسبقًا، مما يؤدي إلى تسريع بدء تشغيل التطبيق.
أظهرت أداة الصور الأصلية لـ Oracle GraalVM أوقات بدء تشغيل أسرع بحوالي 100 مرة من التطبيقات التقليدية المستندة إلى JVM. يوضح الرسم البياني أدناه الانخفاض الكبير في متطلبات ذاكرة وقت التشغيل، ويعرض كفاءة GraalVM مقارنة بـ HotSpot(الشكل 1).
الشكل 1 – تشغيل الملفات التنفيذية الأصلية على الفور تقريبًا (Oracle.com)
يساهم GraalVM في تقليل آثار الذاكرة من خلال التحسينات التالية:
1. لا توجد بيانات وصفية للفئات المحملة
يتجنب GraalVM تخزين البيانات التعريفية للفئات المحملة ديناميكيًا في الذاكرة غير الكومة. أثناء عملية الإنشاء، يتم تحميل معلومات الفئة الضرورية وربطها مسبقًا، مما يقلل الحاجة إلى بيانات تعريف إضافية في وقت التشغيل.
2. لا توجد بيانات ملفات تعريف أو تحسينات JIT
نظرًا لأن الكود الثانوي موجود بالفعل في الكود الأصلي، فإن GraalVM يلغي الحاجة إلى جمع بيانات ملفات التعريف لتحسينات JIT، مما يقلل من حمل الذاكرة.
3. تقنية العزل
تقدم GraalVM العزلات، وهي تقنية تعمل على تقسيم الكومة إلى "أكوام" أصغر ومستقلة، مما يعزز الكفاءة، خاصة في سيناريوهات معالجة الطلبات.
بشكل عام، يستهلك ما يصل إلى 5 مرات ذاكرة أقل مقارنة بالعمل على JVM(الشكل 2)
الشكل 2 - ذاكرة الملفات التنفيذية الأصلية مقارنة بـ Go أو Java HotSpot(oracle.com)
في الختام، توفر أداة الصور الأصلية لـ GraalVM حلاً تحويليًا للتحديات التي تطرحها الخدمات الصغيرة، ومعالجة وقت بدء التشغيل، وبصمة الذاكرة، ومخاوف استخدام وحدة المعالجة المركزية. من خلال اعتماد GraalVM، يمكن للمطورين إنشاء تطبيقات Java سحابية لا تتسم بالكفاءة والأمان فحسب، بل توفر أيضًا تجربة مستخدم فائقة.
لتجميع خدمة Quarkus الخاصة بك إلى صورة أصلية، تتوفر طرق مختلفة. على الرغم من أن هذه المقالة لن تتعمق في إجراء البناء الأصلي لـ Quarkus، إلا أنها تقدم نظرة عامة على الخطوات الأساسية.
قبل الشروع في أي أسلوب لإنشاء صورة أصلية، من الضروري إعداد ملف التعريف الأصلي المناسب في ملف pom.xml الخاص بك. أضف الملف الشخصي التالي:
native native
إنتاج ملف تنفيذي أصلي باستخدام GraalVM المثبت
تحقق من إصدار GraalVM الخاص بك باستخدام الأمر التالي:
./gu info native-image
سيعرض هذا الأمر إصدار GraalVM المثبت:
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
ولإنشاء ملف تنفيذي أصلي، استخدم:
./mvnw install -Dnative
تنشئ هذه الأوامر ملفًا ثنائيًا *-runner في الدليل الهدف، مما يسمح لك بتشغيل الملف القابل للتنفيذ الأصلي:
./target/*-runner
إنشاء ملف تنفيذي أصلي بدون تثبيت GraalVM
إذا كان تثبيت GraalVM محليًا يشكل تحديات، فيمكن استخدام إنشاء داخل الحاوية:
./mvnw install -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=graalvm
يبدأ هذا الأمر الإنشاء داخل حاوية Docker ويوفر ملف الصورة الضروري. يمكنك بعد ذلك بدء التطبيق بـ:
./target/*-runner
في الحالات التي يكون فيها بناء الصورة الأصلية أمرًا صعبًا، يوفر فريق RedHat توزيعًا متخصصًا لـ GraalVM مصممًا لإطار عمل Quarkus يسمى Mandrel. شياق يبسط
GraalVM، مع التركيز فقط على إمكانات الصورة الأصلية الضرورية لتطبيقات Quarkus. لاستخدام الماندريل، اتبع الخطوات التالية:
تحديد إصدار Mandrel المناسب لمستودع Mandrel
قم بتعيين إصدار Mandrel في ملف application.properties الخاص بك:
quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17
3. قم بتشغيل أمر بناء Maven:
./mvnw clean install -Pnative
بالنسبة لأولئك الذين يفضلون التحكم اليدوي في إنشاء الحاوية، يمكن استخدام بناء Docker متعدد المراحل.
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"]
ينسق ملف Dockerfile هذا إنشاءًا متعدد المراحل، مما ينتج عنه صورة Docker مع تطبيق Quarkus الخاص بك. قم بتنفيذ ملف Dockerfile هذا لإنتاج صورة Docker، جاهزة لتشغيل تطبيق Quarkus الخاص بك.
GraalVM Native Image هي تقنية قوية يمكنها إحداث ثورة في طريقة تطوير ونشر خدمات Java الصغيرة. من خلال اعتماد GraalVM Native Image، يمكنك إنشاء خدمات صغيرة هي:
تعد GraalVM Native Image عامل تمكين رئيسي لتطوير Java الأصلي على السحابة ويمكن أن تساعدك على تحقيق الأداء وقابلية التوسع وتوفير التكاليف التي يتطلبها عملك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3