التشغيل السريع: نشر تطبيق Java Native Image الأول إلى Azure Spring Apps

إشعار

أول 50 ساعة من وحدة المعالجة المركزية الظاهرية و100 جيجابايت من الذاكرة مجانية كل شهر. لمزيد من المعلومات، راجع خفض الأسعار - تقوم Azure Spring Apps بالمزيد، والتكاليف أقل! على التطبيقات على مدونة Azure.

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على:❌ Basic/Standard ✔️ Enterprise

يوضح هذا التشغيل السريع كيفية نشر تطبيق Spring Boot إلى Azure Spring Apps كصورة أصلية.

تمكنك إمكانية الصورة الأصلية من تحويل تطبيقات Java برمجيا إلى ملفات تنفيذية مستقلة، تعرف باسم الصور الأصلية. يمكن أن توفر هذه الملفات التنفيذية فوائد كبيرة، بما في ذلك أوقات بدء التشغيل الأسرع وخفض حمل ذاكرة وقت التشغيل مقارنة ب JVM التقليدي (جهاز Java الظاهري).

نموذج المشروع هو تطبيق Spring Petclinic. تظهر لقطة الشاشة التالية التطبيق:

Screenshot of a Spring Petclinic application in Azure Spring Apps.

1. المتطلبات الأساسية

2. إعداد مشروع Spring Petclinic

استخدم الخطوات التالية لاستنساخ التطبيق وتشغيله محليا.

  1. استخدم الأمر التالي لاستنساخ مشروع Spring Petclinic من GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. استخدم الأمر التالي لإنشاء مشروع Spring Petclinic:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. استخدم الأمر التالي لتشغيل تطبيق Spring Petclinic باستخدام Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. انتقل إلى http://localhost:8080 في متصفحك للوصول إلى تطبيق Spring Petclinic.

3. إعداد بيئة السحابة

المورد الرئيسي المطلوب لتشغيل تطبيق Spring Petclinic هو مثيل Azure Spring Apps. يوفر هذا القسم الخطوات لإنشاء المورد.

3.1. توفير أسماء لكل مورد

إنشاء متغيرات للاحتفاظ بأسماء الموارد باستخدام الأوامر التالية. تأكد من استبدل العناصر النائبة بقيمتك الخاصة.

export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
export AZURE_SPRING_APPS_NAME=<Azure-Spring-Apps-service-instance-name>
export NATIVE_BUILDER=native-builder
export JAR_APP_NAME=jar-app
export NATIVE_APP_NAME=native-app
export JAR_PATH=target/spring-petclinic-3.1.0-SNAPSHOT.jar

3.2. إنشاء مجموعة موارد جديدة

استخدم الخطوات التالية لإنشاء مجموعة موارد جديدة:

  1. استخدم الأمر التالي لتسجيل الدخول إلى Azure CLI:

    az login
    
  2. استخدم الأمر التالي لتعيين الموقع الافتراضي:

    az configure --defaults location=${LOCATION}
    
  3. استخدم الأمر التالي لسرد جميع الاشتراكات المتوفرة لتحديد معرف الاشتراك المراد استخدامه:

    az account list --output table
    
  4. استخدم الأمر التالي لتعيين الاشتراك الافتراضي:

    az account set --subscription <subscription-ID>
    
  5. استخدم الأمر التالي لإنشاء مجموعة موارد:

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. استخدم الأمر التالي لتعيين مجموعة الموارد التي تم إنشاؤها حديثا كمجموعة الموارد الافتراضية:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. إنشاء مثيل Azure Spring Apps

يتم استخدام Azure Spring Apps لاستضافة تطبيق Spring Petclinic. استخدم الخطوات التالية لإنشاء مثيل Azure Spring Apps وتطبيقين داخله:

  1. استخدم الأمر التالي لإنشاء مثيل خدمة Azure Spring Apps. يتطلب إنشاء صورة أصلية 16 غيغابايت من الذاكرة أثناء إنشاء الصورة، لذا قم بتكوين حجم تجمع البناء ك S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. إنشاء ملف builder-native.json في الدليل الحالي ثم إضافة المحتوى التالي:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. استخدم الأمر التالي لإنشاء منشئ مخصص لإنشاء تطبيق الصورة الأصلية:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. استخدم الأمر التالي لإنشاء تطبيق في مثيل Azure Spring Apps لنشر تطبيق Spring Petclinic كملف JAR. تكوين حد الذاكرة إلى 1 Gi.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. استخدم الأمر التالي لإنشاء تطبيق في مثيل Azure Spring Apps لنشر تطبيق Spring Petclinic كصورة أصلية:

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    

4. نشر التطبيق إلى Azure Spring Apps

الآن بعد أن تم إعداد بيئة السحابة، أصبحت التطبيقات جاهزة للتوزيع.

استخدم الأمر التالي لنشر تطبيق Spring Petclinic كملف JAR:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17

استخدم الأمر التالي لنشر تطبيق Spring Petclinic كصورة أصلية:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --builder ${NATIVE_BUILDER} \
    --build-cpu 8 \
    --build-memory 16Gi \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17 BP_NATIVE_IMAGE=true

5. التحقق من صحة تطبيق الصور الأصلي

يمكنك الآن الوصول إلى تطبيق الصورة الأصلية المنشور لمعرفة ما إذا كان يعمل أم لا. استخدم الخطوات التالية للتحقق من الصحة:

  1. بعد اكتمال النشر، يمكنك تشغيل الأمر التالي للحصول على عنوان URL للتطبيق:

    az spring app show \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --output table
    

    يمكنك الوصول إلى التطبيق باستخدام عنوان URL الموضح في الإخراج ك Public Url. يجب أن تظهر الصفحة كما رأيتها o localhost.

  2. استخدم الأمر التالي للتحقق من سجل التطبيق للتحقيق في أي مشكلة توزيع:

    az spring app logs \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME}
    

6. مقارنة الأداء ل JAR والصورة الأصلية

تصف الأقسام التالية كيفية مقارنة الأداء بين JAR وتوزيع الصورة الأصلية.

وقت بدء تشغيل الخادم

استخدم الأمر التالي للتحقق من سجل Started PetClinicApplication in XXX seconds التطبيق للحصول على وقت بدء تشغيل الخادم لتطبيق JAR:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME}

يبلغ وقت بدء تشغيل الخادم حوالي 25 ثانية لتطبيق JAR.

استخدم الأمر التالي للتحقق من سجل التطبيق للحصول على وقت بدء تشغيل الخادم لتطبيق صورة أصلية:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME}

وقت بدء تشغيل الخادم أقل من 0.5 ثانية لتطبيق صورة أصلية.

استخدام الذاكرة

استخدم الأمر التالي لتقليص حجم الذاكرة إلى 512 ميبي بايت لتطبيق صورة أصلية:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --memory 512Mi

يجب أن يظهر إخراج الأمر أن تطبيق الصورة الأصلية بدأ بنجاح.

استخدم الأمر التالي لتقليل حجم الذاكرة إلى 512 Mi لتطبيق JAR:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --memory 512Mi

يجب أن يظهر إخراج الأمر أن تطبيق JAR فشل في البدء بسبب عدم كفاية الذاكرة. يجب أن تكون رسالة الإخراج مشابهة للمثال التالي: Terminating due to java.lang.OutOfMemoryError: Java heap space.

يوضح الشكل التالي استخدام الذاكرة المحسن لنشر الصورة الأصلية لحمل عمل ثابت يبلغ 400 طلب في الثانية في تطبيق Petclinic. يبلغ استخدام الذاكرة حوالي 1/5 من الذاكرة المستهلكة بواسطة توزيع JAR المكافئ.

Screenshot of the optimized memory usage of a Native Image deployment in Azure Spring Apps.

توفر الصور الأصلية أوقات بدء تشغيل أسرع وتقليل حمل ذاكرة وقت التشغيل مقارنة بجهاز Java الظاهري التقليدي (JVM).

7. تنظيف الموارد

إذا كنت تخطط لمواصلة العمل بالبدايات السريعة والبرامج التعليمية اللاحقة، فقد ترغب في ترك هذه الموارد في مكانها. عندما لم تعد بحاجة إلى الموارد، احذفها عن طريق حذف مجموعة الموارد. استخدم الأمر التالي لحذف مجموعة الموارد:

az group delete --name ${RESOURCE_GROUP}

8. الخطوات التالية

لمزيد من المعلومات، راجع المقالات التالية: