مرونة اكتشاف الخدمة (معاينة)
باستخدام مرونة 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 ، ، httpStatusCodes errors |
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.