البرنامج التعليمي: توسيع نطاق تطبيق حاوية باستخدام مقاييس Java

تدير Azure Container Apps القياس الأفقي التلقائي من خلال مجموعة من قواعد القياس التعريفية. يمكنك إنشاء قواعد المقياس الخاصة بك مع مصادر أحداث مخصصة.

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

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

إعداد البيئة

استخدم الخطوات التالية لتعريف متغيرات البيئة وإعداد البيئة.

  1. إنشاء متغيرات لدعم تكوين المقياس الخاص بك.

    export LOCATION=eastus
    export TENANT_ID={tenant-id}
    export SUBSCRIPTION_ID={subscription-id}
    export RESOURCE_GROUP=my-resource-group
    export APP_NAME=my-aca-app
    export IDENTITY_NAME=my-identity
    
    المتغير ‏‏الوصف
    LOCATION موقع منطقة Azure حيث تقوم بإنشاء Azure Container Apps.
    TENANT_ID معرف المستأجر الخاص بك.
    SUBSCRIPTION_ID معرف الاشتراك، الذي تستخدمه لإنشاء تطبيقات حاوية Azure الخاصة بك.
    RESOURCE_GROUP اسم مجموعة موارد Azure لتطبيقات حاوية Azure.
    APP_NAME اسم التطبيق لتطبيقات حاوية Azure.
    IDENTITY_NAME اسم هويتك المدارة، التي تم تعيينها إلى Azure Container Apps.
  2. سجل الدخول إلى Azure باستخدام Azure CLI.

    az login
    

إعداد هوية مدارة لتطبيقات حاوية Azure

للتحجيم باستخدام مقاييس النظام الأساسي ل Azure Container Apps، تحتاج إلى هوية مدارة للوصول إلى المقاييس من Azure Monitor.

  1. إنشاء هوية معينة من قبل المستخدم وتعيينها إلى Azure Container Apps. يمكنك اتباع المستند إضافة هوية معينة من قبل المستخدم. بعد إنشاء الهوية، قم بتشغيل الأمر CLI لتعيين معرف الهوية.

    USER_ASSIGNED_IDENTITY_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "id" --output tsv)
    
  2. Monitoring Reader امنح دور هويتك المدارة لقراءة البيانات من Azure Monitor. يمكنك العثور على مزيد من التفاصيل حول أدوار Azure Monitor في الأدوار المضمنة في Azure ل Monitor.

    # Get the principal ID for your managed identity
    PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "principalId" --output tsv)
    
    az role assignment create --assignee $PRINCIPAL_ID --role "Monitoring Reader" --scope /subscriptions/$SUBSCRIPTION_ID
    

إضافة قاعدة مقياس باستخدام مقاييس Azure Monitor

للتوسع باستخدام مقاييس Azure Monitor، يمكنك الرجوع إلى مقياس Azure Monitor Kubernetes Event-driven Autoscaling (KEDA) لتعريف قاعدة مقياس تطبيقات الحاويات الخاصة بك.

فيما يلي قائمة ببيانات التعريف الأساسية لإعداد قاعدة المقياس.

مفتاح بيانات التعريف ‏‏الوصف
tenantId معرف المستأجر الذي يحتوي على مورد Azure.
subscriptionId معرف اشتراك Azure الذي يحتوي على مورد Azure.
resourceGroupName اسم مجموعة الموارد لمورد Azure.
مورد عنوان URI URI مختصر إلى مورد Azure بالتنسيق <resourceProviderNamespace>/<resourceType>/<resourceName>.
metricName اسم المقياس للاستعلام.
نوع تجميع المقاييس أسلوب التجميع لمقياس Azure Monitor. تتضمن الخيارات المتوسط والإجمالي والحد الأقصى.
metricFilter اسم عامل التصفية ليكون أكثر تحديدا باستخدام الأبعاد المدرجة في الوثائق الرسمية. (اختياري)
metricAggregationInterval وقت جمع المقياس في الصيغة hh:mm:ss (الافتراضي: 0:5:0، اختياري)
قيمة الهدف القيمة المستهدفة لتشغيل إجراءات التحجيم. (يمكن أن تكون هذه القيمة عائمة)

أضف قاعدة مقياس باستخدام مقاييس Azure Monitor لتطبيقك في Azure Container Apps .

az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --min-replicas 1 \
        --max-replicas 10 \
        --scale-rule-name scale-with-azure-monitor-metrics \
        --scale-rule-type azure-monitor \
        --scale-rule-metadata "tenantId=${TENANT_ID}" \
                            "subscriptionId=${SUBSCRIPTION_ID}" \
                            "resourceGroupName=${RESOURCE_GROUP}" \
                            "resourceURI=Microsoft.App/containerapps/${APP_NAME}" \
                            "metricName=JvmGcCount" \
                            "metricAggregationType=Total" \
                            "metricAggregationInterval=0:1:0" \
                            "targetValue=30" \
        --scale-rule-identity $USER_ASSIGNED_IDENTITY_ID

يضيف هذا الأمر قاعدة مقياس إلى تطبيق الحاوية الخاص بك بالاسم scale-with-azure-monitor-metrics

  • يتم تعيين نوع المقياس إلى azure-monitor.
  • يستخدم KEDA الهوية المدارة مع معرف USER_ASSIGNED_IDENTITY_ID المورد للمصادقة مع Azure Monitor ومقاييس الاستعلام لتطبيق الحاوية.
  • يستعلم KEDA عن المقياس JvmGcCount، ويجمع قيم القياس في غضون دقيقة واحدة مع نوع Totalالتجميع .
  • يتم تعيين القيمة الهدف إلى 30، ما يعني أن KEDA تحسب desiredReplicas باستخدام ceil(AggregatedMetricValue(JvmGcCount)/30).

إشعار

يتم استخدام المقياس JvmGcCount فقط كمثال. يمكنك استخدام أي مقياس من Azure Monitor. قبل إعداد قاعدة المقياس، اعرض المقاييس في مدخل Microsoft Azure لتحديد المقياس المناسب، والفاصل الزمني للتجميع، والقيمة الهدف بناء على متطلبات التطبيق الخاص بك. بالإضافة إلى ذلك، ضع في اعتبارك استخدام قواعد مقياس HTTP/TCP المضمنة، والتي يمكن أن تفي بسيناريوهات التحجيم الأكثر شيوعا، قبل اختيار مقياس مخصص.

عرض التحجيم في مدخل Microsoft Azure (اختياري)

بمجرد أن تصبح المراجعة الجديدة جاهزة، أرسل طلبات إلى تطبيق الحاوية لتشغيل المقياس التلقائي باستخدام مقاييس Java.

  1. انتقل إلى الجزء Metrics في مدخل Microsoft Azure لتطبيقات حاوية Azure.
  2. أضف مخططا، واستخدم المقياس jvm.gc.count، مع عامل التصفية Revision=<your-revision>، والتجميع باستخدام Sum، وتقسيم حسب Replica. يمكنك مشاهدة قيمة القياس لكل نسخة JvmGcCount متماثلة في هذه الدردشة.
  3. أضف مخططا، واستخدم المقياس jvm.gc.count، مع عامل التصفية Revision=<your-revision> والتجميع باستخدام Sum. يمكنك مشاهدة إجمالي قيمة القياس المجمعة JvmGcCount للمراجعة في هذه الدردشة.
  4. أضف مخططا، واستخدم المقياس Replica Count، مع عامل التصفية Revision=<your-revision> والتجميع باستخدام Max. يمكنك مشاهدة عدد النسخ المتماثلة للمراجعة في هذه الدردشة.

فيما يلي عينة لقطة قياس لقاعدة مقياس المثال.

لقطة شاشة لمقياس KEDA مع مقاييس JVM.

  1. في البداية، هناك نسخة متماثلة واحدة () minReplicasللتطبيق.
  2. يؤدي ارتفاع الطلب إلى تعرض تطبيق جافا لجمع نفايات متكرر من خلال الآلة الافتراضية (JVM).
  3. تلاحظ KEDA زيادة قيمة المقياس المجمعة ل jvm.gc.count إلى 256، وحساب desiredReplicas القيمة ك ceil(256/30)=9.
  4. تقوم KEDA بتوسيع عدد النسخ المتماثلة لتطبيق الحاوية إلى 9.
  5. يتم توزيع حركة مرور http عبر المزيد من النسخ المتماثلة، ما يقلل من متوسط عدد GC.
  6. ينخفض عدد GC بشكل أكبر عند عدم وجود طلبات.
  7. بعد فترة التوقف، يقوم KEDA بتحجيم عدد النسخ المتماثلة وصولا إلى minReplicas=1.

سجل المقياس

لعرض سجلات مقياس KEDA، يمكنك تشغيل الاستعلام في Logs شفرة.

ContainerAppSystemLogs
| where RevisionName == "<your-revision>"
| where EventSource == "KEDA"
| project TimeGenerated, Type, Reason, ContainerAppName, Log

لقطة شاشة لاستعلام سجل مقياس KEDA.

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

الموارد التي تم إنشاؤها في هذا البرنامج التعليمي لها تأثير على فاتورة Azure. إذا كنت لن تستخدم هذه الخدمات على المدى الطويل، فقم بتشغيل الأمر التالي لإزالة كل شيء تم إنشاؤه في هذا البرنامج التعليمي.

az group delete --resource-group $RESOURCE_GROUP