NestJS / المتقدم: العمر وأدلة العمل الموزع / الدرس 15
الطوابير والمهام المتحملة للإعادة والعمل المجدول
حدد هوية مهمة دائمة ونتائج الإعادة ومسؤول الموارد مستقلاً عن المزخرف والمؤقت الداخلي.
في هذه الصفحة
أهداف الدرس
- افصل قبول الصف والمعالجة والإكمال والآثار الخارجية.
- اشرح لماذا لا يمنع الجدول ومعرف المهمة تكرار العمل تلقائياً.
إضافة المهمة انتقال له نتيجته الخاصة
يفصل الطابور زمن الطلب عن المعالجة ولا يعني قبول الصف اكتمال العمل. أعد هوية مهمة أو عملية ثابتة وعرف متابعة النجاح والفشل والإلغاء. اجعل الحمولة صغيرة وذات نسخة وخالية من الاعتماد. يطبق العامل السياسة الحالية المناسبة لسلطة خدمته ولا يحتفظ بهوية HTTP قديمة كاملة للأبد. يقدم Nest تكاملاً ويقدم المحرك والمخزن الاستمرار والقفل والتوصيل بمراجعة إصدارات مستقلة. ينبغي أن يعرف العميل هل تلقى قبولاً قابلاً للمتابعة أو نتيجة نهائية حتى لا يعلن نجاح تصدير لم يبدأ بعد.
سم الهوية والنطاق والاحتفاظ صراحة
تصف JSON تصديراً اصطناعياً، وتعرف operationId العمل المنطقي بينما محاولة التوصيل تفصيل آخر. تسمي الحمولة المستأجر والمقرر ونسخة الإخراج دون مسار أو سر. يتحقق العامل من الأهلية ويحل مكاناً يتحكم به الخادم. عرف الاحتفاظ والتكرار قبل خيارات معرف المهمة؛ فقد يزول منع التكرار بعد حذف القديمة. لا ينشئ السجل طابوراً أو مخزنه. يجب أن يبقى ارتباط نتيجة العمل بهويته واضحاً حتى بعد تنظيف سجل التسليم، إذا كانت مدة متابعة المستخدم أطول من مدة بقاء سجل المحرك.
{"payloadVersion":1,"operationId":"export-17","tenantId":"lab-a","courseId":"c1","outputSchema":1,"attemptIdentity":"managed-separately","credentials":"not-in-payload"}
يفصل السجل عملية العمل ومحاولة التوصيل ولا يضيف مهمة إلى طابور أو يعالجها.
اجعل الأثر آمناً عند فقد الإقرار
قد يحفظ العامل الأثر ويفشل قبل إعلان الإكمال فتتكرر المعالجة. اربط الهوية بالمستأجر والفعل وبصمة المدخل وسجل النتيجة ببروتوكول ذري. لا تكفي مجموعة محلية بعد إعادة البدء أو بين العمال. يحتاج التوصيل الخارجي تكراراً أو تسوية مستقلة. قيد المحاولات والتأخير ومسار الفشل ولا تستهلك المخالفة إعادات غير نهائية. احترم الإيقاف والإلغاء دون ادعاء التراجع عن أثر اكتمل. مسؤولية تحمل التكرار داخل المجال أوسع من خيار عدد المحاولات في المحرك، لأنه لا يعرف ماذا حدث في النظام الخارجي.
تحقق من أثر منطقي واحد بنموذج محلي
تسجل الخريطة نتيجة عملية وتعيدها للتكرار وترفض اختلاف المدخل تحت الهوية نفسها. هي متزامنة بالذاكرة فلا تثبت الاستمرار أو تجديد القفل أو سلامة مستهلكين متزامنين. توضح المعنى قبل واجهة الطابور. يحتاج التنفيذ النطاق والاحتفاظ وتعافي الجزئي. لا تخزن حمولة حساسة كاملة لتبسيط المقارنة بل طبق التطبيع والخصوصية المراجعين. وعند انتقال العملية إلى مخزن حقيقي يجب اختبار سباق حجز الهوية؛ فقد تنجح خريطة تعليمية ويكتب عاملان في الإنتاج إذا فصل الفحص عن الأثر دون ذرية.
const done=new Map(); let count=0;
function job(id,fingerprint) {
if (done.has(id)) {
const old=done.get(id); if (old.fingerprint !== fingerprint) throw new Error("OPERATION_CONFLICT");
return old.result;
}
const result={sequence:++count}; done.set(id,{fingerprint,result}); return result;
}
console.assert(job("export-17","lab-a:c1:v1").sequence === 1);
console.assert(job("export-17","lab-a:c1:v1").sequence === 1);
console.assert(count === 1);
ينتج التكرار المطابق أثراً محلياً واحداً دون طابور أو قفل أو مخزن دائم أو عامل متزامن.
افصل المؤقت والجدولة وإطلاق العامل
قد يعمل المؤقت أو مزخرف cron في كل مثيل ولا ينشئ جدولاً دائماً فريداً عالمياً. حدد مالك الجدولة أو التنسيق أو محفزاً مشتركاً عند التكرار. عالج التداخل والمنطقة والفترات المفقودة والمواعيد بقصد. قيد تزامن العامل والتراكم بسعة المصدر. اختبر الفشل والإعادة والتصريف بمهام اصطناعية مأذونة. يحلل المقرر السجل ويشغل الخريطة فقط دون جدول أو محرك أو مخزن أو مهمة حقيقية. لا تجعل انتظام التوقيت في اختبار واحد دليلاً على أن الإطلاق المتدرج لن يشغل نسختين من الفعل في الوقت نفسه.
الأخطاء الشائعة وإصلاحها
ينفذ كل مثيل الأثر المجدول نفسه
- لماذا يحدث؟
- افترض أن جدولاً محلياً لعملية واحدة فريد عبر جميع المثيلات.
- كيف تصلحه؟
- حدد محفزاً مشتركاً أو آلية تنسيق وفق بروتوكول مراجع.
- كيف تتجنب تكراره؟
- اختبر المثيلات المتداخلة وهوية عملية العمل المحفوظة.
تكرر مهمة معادة أثراً خارجياً
- لماذا يحدث؟
- اختلط إقرار إكمال المهمة بضمان ذرية أثرها العملي.
- كيف تصلحه؟
- نفذ تحمل إعادة دائمًا في المجال وتسوية للآثار الخارجية.
- كيف تتجنب تكراره؟
- اختبر نجاح الأثر ثم فقد إقرار الإكمال.
تتوقف المعرفات القديمة عن منع التكرار بعد التنظيف
- لماذا يحدث؟
- أهمل التصميم دلالات مدة الاحتفاظ بسجل المهمة.
- كيف تصلحه؟
- وافق مدة إعادة عملية العمل مع حذف سجلات الطابور.
- كيف تتجنب تكراره؟
- اختبر إعادة العملية بعد نافذة الاحتفاظ الموثقة.
اختبر فهمك
1. هل يعني نجاح إضافة المهمة للطابور أن ملف التصدير أصبح جاهزاً للتنزيل؟
اعرض الحل المشروح
لا. يؤكد النجاح نتيجة القبول التي يوثقها عقد الطابور فقط. قد يفشل العامل لاحقاً أو يعيد المحاولة أو يلغى. أعد هوية للعملية ومساراً آمناً لمتابعة حالتها، وتحقق من أهلية الوصول إلى الناتج المكتمل قبل تنزيله. لا تجعل رد HTTP يوحي بإكمال لم يسجله العامل.
2. لماذا لا تمثل مجموعة seen محلية آلية إنتاجية لإزالة التكرار؟
اعرض الحل المشروح
تختفي المجموعة عند إعادة بدء العملية، وليست مشتركة أو ذرية بين العمال. كما تفتقد مدة احتفاظ ونطاق هوية وتعافياً من الانهيار. استعملها نموذجاً تعليمياً فقط، ثم نفذ وتحقق من بروتوكول العملية الدائم بصورة مستقلة عن آلية توصيل الطابور.
أهم ما تعلمته
- قبول المهمة ومعالجتها واكتمال العمل حالات مختلفة.
- يجب أن تصمد الإعادة الدائمة ومسؤولية الجدولة أمام النسخ وإعادة البدء.