ASP.NET Core / المتقدم: التحقق والتشغيل الموثوق / الدرس 17
الموثوقية والآثار وإعادة المحاولة
حدد المهل ومنع تكرار الأثر وحدود الالتزام والعمل الدائم والاستعادة قبل اعتبار الإعادات ميزة موثوقية.
في هذه الصفحة
أهداف الدرس
- افصل الفشل المؤقت من النتيجة الملتزم بها غير المؤكدة.
- صمم سياسة محدودة للإعادة ومنع تكرار الأثر.
- اربط عقود الطلب والحفظ والمراسلة والإيقاف.
لا تثبت المهلة أن الأثر فشل
قد يفقد العميل أو الخادم الرد بعد التزام العملية. يمكن أن يكرر إنشاء أو تحديث غير آمن الأثر التجاري حتى عندما يبلغ النقل عن فشل. حدد هوية العملية والإعادات المسموحة وكيف يكتشف العملاء الحالة أو يصالحون نتيجة مجهولة. حالة HTTP والتزام القاعدة حدان مختلفان.
ليس كل فشل مؤقتا. تحتاج المدخلات غير الصالحة والوصول الممنوع وتعارض التزامن وفرط الحمل ومهلة نظام لاحق وعيب التنفيذ إلى معاملات مختلفة. قد يكرر غلاف إعادة شامل حول المعالج كله آثار التحقق أو الاستدعاءات الخارجية ويزيد الأزمة سوءا. اختر الوحدة المعادة عن قصد.
يحتاج مفتاح منع تكرار الأثر إلى نطاق ومعنى للحمولة
ينمذج البرنامج الكامل الأول آثارا اصطناعية متسلسلة بمفتاح يجمع الممثل ومفتاح العملية. يعيد استخدام المفتاح والحمولة نفسيهما نتيجة إعادة تشغيل محفوظة؛ ويعيد المفتاح نفسه مع مبلغ مختلف تعارضا. يفحص قاعدة مجال صغيرة فقط. ليس القاموس داخل العملية تخزينا معاملاتيا دائما أو موزعا أو آمنا للخيوط، ولا تنفيذا إنتاجيا يضمن الأثر مرة واحدة تماما.
يحتاج التصميم الحقيقي إلى إنشاء وتسجيل أثر ذريين واحتفاظ وانتهاء ونطاق مستدع وهوية حمولة ورد إعادة محفوظ واستعادة من الفشل. يجب أن يظل التفويض مطبقا؛ فليست ترويسة منع التكرار دليلا على الملكية. احفظ نتيجة عملية التزمت بالفعل بدلا من التظاهر بأن الإلغاء أعادها إلى ما قبل التنفيذ.
using System;
using System.Collections.Generic;
var ledger = new Dictionary<(string Actor, string Key), int>();
int total = 0;
int first = Apply("actor-a", "operation-7", 10);
int replay = Apply("actor-a", "operation-7", 10);
int conflict = Apply("actor-a", "operation-7", 15);
Console.WriteLine($"first={first} replay={replay} conflict={conflict} total={total}");
int Apply(string actor, string key, int amount)
{
if (ledger.TryGetValue((actor, key), out int existing)) return existing == amount ? 200 : 409;
ledger[(actor, key)] = amount;
total += amount;
return 201;
}
first=201 replay=200 conflict=409 total=10
يضيف الأثر الأول عشرة، ولا تضيف الإعادة شيئا، وتتعارض الحمولة المعدلة؛ ولا يختبر ضمان حفظ أو تزامن.
تستهلك الإعادات ميزانية المهلة والسعة نفسها
اختر عددا محدودا للمحاولات وتأخيرا متدرجا مع عشوائية ومهلة لكل محاولة وموعدا نهائيا كليا وسلوك إلغاء ملائما للعملية. قد تضخم الإعادة الحمل على اعتماد غير سليم. لقاطع الدائرة وحدود التزامن والبديل أغراض مختلفة تحتاج عقد صحة صريحا. قد يكون بديل يعيد نجاحا مضللا أسوأ من فشل صادق.
يحسب البرنامج الثاني ميزانية أسوأ حالة لمحاولات اصطناعية متسلسلة. لا يهيئ حزمة مرونة HTTP ولا يقيس زمن طلب فعلي. لتكاملات مرونة الإطار ومكتبات العميل حزم وسياسات مرتبطة بالإصدار؛ ولا يجوز وصف مقاطع تسجيل لم تختبر بأنها سلوك تشغيل متحقق منه.
using System;
int attempts = 3, attemptMilliseconds = 1000, backoffMilliseconds = 500, budgetMilliseconds = 3000;
int modeled = checked(attempts * attemptMilliseconds + (attempts - 1) * backoffMilliseconds);
Console.WriteLine($"worstMs={modeled} budgetMs={budgetMilliseconds} fits={modeled <= budgetMilliseconds}");
worstMs=4000 budgetMs=3000 fits=False
تحتاج ثلاث محاولات مع تأخيرين إلى 4000ms في النموذج، فتتجاوز 3000ms؛ ولا تنتظر عملية أو تعاد فعليا.
لا يتشارك الطلب والرسالة معاملة واحدة تلقائيا
إذا حدثت البيانات ونشرت رسالة ضمن عملية، فقد يترك فشل بينهما حالة غير متسقة. يستطيع بروتوكول outbox/inbox أو بروتوكول آخر مبرر ربط سجلات دائمة بتسليم لاحق واستهلاك لا يكرر الأثر. يجب أن تدعم دلالات القاعدة والمزوّد والوسيط الحدود المقصودة؛ ولا توفر تسمية صنف Outbox تلك الدلالات.
يمكن أن تنسق BackgroundService وقناة في الذاكرة عمل العملية، لكنهما لا تنجوان جوهريا من إعادة التشغيل. حدد حالات المقبول والمحفوظ والجاري والمكتمل والفاشل ومعنى 202. يحتاج ادعاء دوام المهمة إلى نظام التخزين والطابور المقصودين واختبارات استعادة، وهي خارج أمثلة المقرر المحلية.
تشمل الموثوقية الإيقاف واستعادة البيانات
خطط لإيقاف القبول والإلغاء وانتظار المهام وتصريف العمل والتخلص من الاعتماديات والإبلاغ عن الفشل وفق سياسة إيقاف محدودة. قد يقطع الإنهاء القسري العمل، فلا ينبغي أن تعتمد الصحة على تنفيذ كل finally قبل اختفاء الآلة. احفظ الحالة المطلوبة أو صالحها عند حد التزامها المناسب.
حدد أهداف الاستعادة ودليل نجاح الاسترجاع وتوافق المخطط والأثر والتحقق مما يواجهه المستخدم. لا تثبت نقطة صحة أو وحدة معالج ناجحة استعادة نسخة أو تعافيا إقليميا. سجل الافتراضات والنطاق المختبر. يستخدم الدرس نماذج محلية منتهية فقط، ولا يبدأ خادما أو طابورا دائما أو قاعدة أو اعتمادية خارجية.
الأخطاء الشائعة وإصلاحها
تطلق المهلة إعادة غير مشروطة لفعل التزم بالفعل.
- لماذا يحدث؟
- عوملت النتيجة المجهولة كفشل معلوم.
- كيف تصلحه؟
- استخدم هوية العملية وسياسة مصالحة ومنع تكرار أثر موثقة.
- كيف تتجنب تكراره؟
- اختبر فقد الرد ومحاولات التنفيذ المكررة.
تتجاوز الإعادات مهلة الطلب وتفرط في تحميل الاعتماد.
- لماذا يحدث؟
- صممت ميزانيات المحاولة والتأخير والإجمالي مستقلة.
- كيف تصلحه؟
- حد العملية كاملة وقبول العمل مع الإلغاء.
- كيف تتجنب تكراره؟
- احسب واختبر غلاف السياسة في أسوأ حالة.
يوصف عامل في الذاكرة بأنه تسليم دائم.
- لماذا يحدث؟
- اختلط عمر العملية بالعمل المحفوظ.
- كيف تصلحه؟
- استخدم البروتوكول الدائم المطلوب واختبر الاستعادة منفصلة.
- كيف تتجنب تكراره؟
- صف معنى 202 وسلوك إعادة التشغيل بصدق.
اختبر فهمك
1. يغير POST البيانات لكن تنتهي مهلة المستدعي قبل تسلم النتيجة. لماذا لا تكون الإعادة آمنة إلا بعقد صريح؟
اعرض الحل المشروح
ربما التزمت المحاولة الأولى. تحتاج الإعادة إلى مفتاح عملية محدد النطاق وهوية حمولة ونتيجة وتسجيل دائم ذري وتفويض وسياسة احتفاظ وإعادة محفوظة تلائم المجال. لا يثبت فشل النقل وحده تراجع القاعدة. عند التحقق من تنفيذ حقيقي، اختبر الأعطال والردود المفقودة حول حد الالتزام والرد بالمزوّد والطابور المقصودين.
2. ما الذي يغيب عن نموذج حساب إعادات يبلغ fits=True؟
اعرض الحل المشروح
لا يقيس توزيع الكمون الفعلي أو تعاون الإلغاء أو تزامن الأنظمة اللاحقة أو عشوائية التأخير أو استنفاد الموارد أو صحة الأثر الجانبي. يقارن النموذج مددًا معلنة فقط. استخدمه لكشف ميزانيات متناقضة ثم تحقق من سياسة التشغيل المدعومة ودلالات العملية في إعداد معزول ومأذون. ليس حساب التوقيت ضمان مرونة.
أهم ما تعلمته
- تحتاج النتائج المجهولة والإعادات والآثار الملتزم بها إلى بروتوكول صريح.
- حد المحاولات والزمن الكلي والطوابير والاعتماديات معا.
- تحتاج الديمومة والاستعادة إلى دليل يتجاوز المهام المحلية للعملية وإشارات الصحة.