مشاركة عبر


مرونة اكتشاف الخدمة (معاينة)

باستخدام مرونة Azure Container Apps، يمكنك منع فشل طلب الخدمة واكتشافه واسترداده بشكل استباقي باستخدام نهج المرونة البسيطة. في هذه المقالة، ستتعلم كيفية تكوين نهج مرونة Azure Container Apps عند بدء الطلبات باستخدام اكتشاف خدمة Azure Container Apps.

إشعار

حاليا، لا يمكن تطبيق نهج المرونة على الطلبات التي تم إجراؤها باستخدام واجهة برمجة تطبيقات استدعاء خدمة Dapr.

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

  • عدد مرات إعادة المحاولة
  • إعادة المحاولة ومدة المهلة
  • إعادة محاولة التطابق
  • أخطاء متتالية في قاطع الدائرة وغيرها

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

رسم تخطيطي يوضح تطبيق الحاوية لمرونة تطبيق الحاوية باستخدام اسم خدمة تطبيق الحاوية.

نهج المرونة المدعومة

تكوين نهج المرونة

سواء قمت بتكوين نهج المرونة باستخدام Bicep أو CLI أو مدخل Microsoft Azure، يمكنك تطبيق نهج واحد فقط لكل تطبيق حاوية.

عند تطبيق نهج على تطبيق حاوية، يتم تطبيق القواعد على جميع الطلبات المقدمة إلى تطبيق الحاوية هذا، وليس على الطلبات المقدمة من تطبيق الحاوية هذا. على سبيل المثال، يتم تطبيق نهج إعادة المحاولة على تطبيق حاوية يسمى App B. تتم إعادة محاولة جميع الطلبات الواردة إلى التطبيق B تلقائيا عند الفشل. ومع ذلك، فإن الطلبات الصادرة المرسلة من قبل التطبيق B غير مضمونة لإعادة المحاولة في الفشل.

يوضح مثال المرونة التالي جميع التكوينات المتوفرة.

resource myPolicyDoc 'Microsoft.App/containerApps/resiliencyPolicies@2023-11-02-preview' = {
  name: 'my-app-resiliency-policies'
  parent: '${appName}'
  properties: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
        connectionTimeoutInSeconds: 5
    }
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                        exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-status-codes'
                '5xx'
                'reset'
                'connect-failure'
                'retriable-4xx'
            ]
        }
    } 
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
    tcpConnectionPool: {
        maxConnections: 100
    }
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
  }
}

مواصفات النهج

المهلات

يتم استخدام المهلات لإنهاء العمليات طويلة الأمد مبكرا. يتضمن نهج المهلة الخصائص التالية.

properties: {
  timeoutPolicy: {
      responseTimeoutInSeconds: 15
      connectionTimeoutInSeconds: 5
  }
}
بيانات التعريف المطلوب ‏‏الوصف مثال
responseTimeoutInSeconds ‏‏نعم‬ المهلة في انتظار استجابة من تطبيق الحاوية. 15
connectionTimeoutInSeconds ‏‏نعم‬ المهلة لإنشاء اتصال بتطبيق الحاوية. 5

إعادة المحاولات

تحديد أو tcpRetryPolicy httpRetryPolicy استراتيجية للعمليات الفاشلة. يتضمن نهج إعادة المحاولة التكوينات التالية.

httpRetryPolicy

properties: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                       exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-headers'
                'retriable-status-codes'
            ]
        }
    } 
}
بيانات التعريف المطلوب ‏‏الوصف مثال
maxRetries ‏‏نعم‬ الحد الأقصى لإعادة المحاولة التي سيتم تنفيذها لطلب http الفاشل. 5
retryBackOff ‏‏نعم‬ مراقبة الطلبات وإيقاف تشغيل كافة نسبة استخدام الشبكة إلى الخدمة المتأثرة عند استيفاء معايير المهلة وإعادة المحاولة. ‏‫غير متوفر‬
retryBackOff.initialDelayInMilliseconds ‏‏نعم‬ التأخير بين الخطأ الأول وإعادة المحاولة الأولى. 1000
retryBackOff.maxIntervalInMilliseconds ‏‏نعم‬ الحد الأقصى للتأخير بين عمليات إعادة المحاولة. 10000
matches ‏‏نعم‬ قم بتعيين قيم المطابقة للحد من الوقت الذي يجب أن يحاول فيه التطبيق إعادة المحاولة. headers، ، httpStatusCodeserrors
matches.headers Y* أعد المحاولة عندما تتضمن استجابة الخطأ عنوانا معينا. *الرؤوس هي الخصائص المطلوبة فقط إذا قمت بتحديد retriable-headers خاصية الخطأ. تعرف على المزيد حول تطابقات العنوان المتوفرة. X-Content-Type
matches.httpStatusCodes Y* أعد المحاولة عندما تقوم الاستجابة بإرجاع رمز حالة معين. *رموز الحالة هي خصائص مطلوبة فقط إذا قمت بتحديد retriable-status-codes خاصية الخطأ. 502, 503
matches.errors ‏‏نعم‬ إعادة المحاولة فقط عندما يقوم التطبيق بإرجاع خطأ معين. تعرف على المزيد حول الأخطاء المتوفرة. connect-failure, reset
تطابقات الرأس

إذا حددت retriable-headers الخطأ، يمكنك استخدام خصائص مطابقة العنوان التالية لإعادة المحاولة عندما تتضمن الاستجابة عنوانا معينا.

matches: {
  headers: [
    { 
      header: 'x-ms-retriable'
      match: {
        exactMatch: 'true'
      }
    }
  ]
}
بيانات التعريف ‏‏الوصف
prefixMatch يتم تنفيذ عمليات إعادة المحاولة استنادا إلى بادئة قيمة العنوان.
exactMatch يتم تنفيذ عمليات إعادة المحاولة استنادا إلى تطابق تام لقيمة العنوان.
suffixMatch يتم تنفيذ عمليات إعادة المحاولة استنادا إلى لاحقة قيمة العنوان.
regexMatch يتم تنفيذ عمليات إعادة المحاولة استنادا إلى قاعدة تعبير عادية حيث يجب أن تتطابق قيمة العنوان مع نمط regex.
Errors

يمكنك إجراء عمليات إعادة المحاولة على أي من الأخطاء التالية:

matches: {
  errors: [
    'retriable-headers'
    'retriable-status-codes'
    '5xx'
    'reset'
    'connect-failure'
    'retriable-4xx'
  ]
}
بيانات التعريف ‏‏الوصف
retriable-headers عناوين استجابة HTTP التي تؤدي إلى إعادة المحاولة. يتم تنفيذ إعادة المحاولة إذا تطابق أي من تطابقات الرأس مع رؤوس الاستجابة. مطلوب إذا كنت ترغب في إعادة المحاولة على أي رؤوس مطابقة.
retriable-status-codes رموز حالة HTTP التي يجب أن تؤدي إلى إعادة المحاولة. مطلوب إذا كنت ترغب في إعادة المحاولة على أي رموز حالة مطابقة.
5xx أعد المحاولة إذا استجاب الخادم بأي رموز استجابة 5xx.
reset أعد المحاولة إذا لم يستجب الخادم.
connect-failure أعد المحاولة إذا فشل طلب بسبب اتصال خاطئ بتطبيق الحاوية.
retriable-4xx أعد المحاولة إذا استجاب تطبيق الحاوية برمز استجابة من 400 سلسلة، مثل 409.

tcpRetryPolicy

properties: {
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
}
بيانات التعريف المطلوب ‏‏الوصف مثال
maxConnectAttempts ‏‏نعم‬ تعيين الحد الأقصى لمحاولات الاتصال (maxConnectionAttempts) لإعادة المحاولة على الاتصالات الفاشلة. 3

قاطعات الدوائر

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

properties: {
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
}
بيانات التعريف المطلوب ‏‏الوصف مثال
consecutiveErrors ‏‏نعم‬ عدد الأخطاء المتتالية قبل إزالة النسخة المتماثلة لتطبيق الحاوية مؤقتا من موازنة التحميل. 5
intervalInSeconds ‏‏نعم‬ مقدار الوقت المحدد لتحديد ما إذا كانت النسخة المتماثلة قد تمت إزالتها أو استعادتها من تجمع موازنة التحميل. 10
maxEjectionPercent ‏‏نعم‬ الحد الأقصى لالنسبة المئوية للنسخ المتماثلة لتطبيق الحاوية الفاشلة التي يجب إخراجها من موازنة التحميل. إزالة مضيف واحد على الأقل بغض النظر عن القيمة. 50

تجمعات الاتصال

يحتفظ تجميع اتصال Azure Container App بمجموعة من الاتصالات المنشأة والقابلة لإعادة الاستخدام لتطبيقات الحاوية. يقلل تجمع الاتصال هذا من النفقات العامة لإنشاء اتصالات فردية وتفكيلها لكل طلب.

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

httpConnectionPool

properties: {
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
}
بيانات التعريف المطلوب ‏‏الوصف مثال
http1MaxPendingRequests ‏‏نعم‬ يستخدم للطلبات http1 . الحد الأقصى لعدد الاتصالات المفتوحة بتطبيق حاوية. 1024
http2MaxRequests ‏‏نعم‬ يستخدم للطلبات http2 . الحد الأقصى لعدد الطلبات المتزامنة لتطبيق حاوية. 1024

tcpConnectionPool

properties: {
    tcpConnectionPool: {
        maxConnections: 100
    }
}
بيانات التعريف المطلوب ‏‏الوصف مثال
maxConnections ‏‏نعم‬ الحد الأقصى لعدد الاتصالات المتزامنة بتطبيق حاوية. 100

إمكانية مراقبة المرونة

يمكنك تنفيذ إمكانية مراقبة المرونة عبر مقاييس تطبيق الحاوية وسجلات النظام.

سجلات المرونة

من قسم Monitoring في تطبيق الحاوية، حدد Logs.

لقطة شاشة توضح مكان العثور على سجلات تطبيق الحاوية.

في جزء Logs، اكتب استعلاما وقم بتشغيله للعثور على المرونة عبر سجلات نظام تطبيق الحاوية. على سبيل المثال، قم بتشغيل استعلام مشابه لما يلي للبحث عن أحداث المرونة وإظهار:

  • طابع زمني
  • اسم البيئة
  • اسم تَطبيق الحاوية
  • نوع المرونة والسبب
  • تسجيل الرسائل
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s

انقر فوق تشغيل لتشغيل الاستعلام وعرض النتائج.

لقطة شاشة تعرض نتائج استعلام المرونة استنادا إلى مثال الاستعلام المقدم.

مقاييس المرونة

من قائمة Monitoring لتطبيق الحاوية، حدد Metrics. في جزء Metrics، حدد عوامل التصفية التالية:

  • نطاق اسم تطبيق الحاوية.
  • مساحة اسم مقاييس القياسات القياسية.
  • مقاييس المرونة من القائمة المنسدلة.
  • كيف تريد البيانات المجمعة في النتائج (حسب المتوسط، حسب الحد الأقصى، وما إلى ذلك).
  • المدة الزمنية (آخر 30 دقيقة، آخر 24 ساعة، وما إلى ذلك).

لقطة شاشة توضح كيفية الوصول إلى عوامل تصفية مقاييس المرونة لتطبيق الحاوية.

على سبيل المثال، إذا قمت بتعيين مقياس Resiliency Request Retries في نطاق تطبيق الاختبار مع متوسط التجميع للبحث ضمن إطار زمني مدته 30 دقيقة، فستبدو النتائج كما يلي:

لقطة شاشة تعرض النتائج من أمثلة عوامل تصفية المقاييس للمرونة.

راجع كيفية عمل المرونة لمكونات Dapr في Azure Container Apps.