البرمجة وتطوير البرمجيات

متى يستحق التنفيذ المتين التعقيد الإضافي؟ خمسة سيناريوهات عملية مع Durable Task

تشرح مدونة .NET خمسة سيناريوهات لاستخدام Durable Task في سير العمل الطويل والمتقطع، من الموافقات والمدفوعات إلى تهيئة بيئات Azure ووكلاء الذكاء الاصطناعي. وتوضح المادة أن الأداة تنسق مراحل التنفيذ وتستعيدها، لكنها لا تضمن وحدها سلامة الآثار الخارجية أو التنفيذ مرة واحدة.

12 أكتوبر 2026
5 دقائق قراءة
5 قراءة
certi.news Editorial Team
متى يستحق التنفيذ المتين التعقيد الإضافي؟ خمسة سيناريوهات عملية مع Durable Task

لا تكمن قيمة Durable Task في استبدال كل عامل خلفي أو طابور رسائل أو قاعدة بيانات، بل في تنظيم العمليات التي تمتد طويلاً، وتتوقف بانتظار حدث خارجي، أو قد تنقطع بعد تنفيذ جزء من خطواتها. وتعرض مدونة .NET خمسة أمثلة عملية باستخدام حزمة Durable Task .NET SDK الإصدار 1.26.0 مع Durable Task Scheduler، مع التشديد على أن الأداة تحفظ تاريخ التنسيق ولا تستعيد مكدس تنفيذ CLR المعلّق.

الفكرة المركزية هي الفصل بين ما ينسقه محرك سير العمل وما يبقى مسؤولية التطبيق. فـDurable Task يستطيع حفظ نقاط التقدم، الانتظار دون إبقاء خيط تنفيذ مشغولاً، وإعادة تشغيل كود المنسق اعتماداً على النتائج المسجلة. لكنه لا يقرر صلاحيات المستخدمين، ولا يضمن تنفيذ الآثار الخارجية مرة واحدة، ولا يحدد وحده الموارد الآمنة للحذف أو ما إذا كانت دفعة مالية قد وصلت فعلاً.

الموافقة البشرية لا تعني إيقاف العامل

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

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

تهيئة بيئة Azure: أين ينتهي دور ARM؟

توضح المادة أن ARM وBicep قد يكونان كافيين لنشر موارد محددة، إذ يقدمان ترتيب الاعتماديات، والتنفيذ المتوازي، وإعادة تطبيق الحالة المطلوبة بهويات ثابتة. لذلك لا تستحق إضافة Durable Task إعادة بناء مخطط نشر توفره ARM أصلاً.

تظهر الفائدة عندما يتجاوز المسار نشر الموارد إلى قبول طلب المستأجر، وإبلاغه بالتقدم، وانتظار الجاهزية، ثم تفعيل المستأجر. يقترح المثال حفظ طلب التهيئة ومعرّفاته في قاعدة التطبيق مع outbox، ثم استخدام تنسيق يربط مراحل الشبكة وقاعدة البيانات والتخزين والتطبيق وDNS وفحص الجاهزية. أما عمليات Azure نفسها فتظل بحاجة إلى سجلات عمليات وهويات ثابتة ومصالحة عند فقدان الردود.

وتحذر المادة من اعتبار التعويض زر تراجع. فقد يكون Azure ما زال ينشئ قاعدة بيانات بعد فشل التخزين. لذلك يجب منع المحاولة القديمة من بدء عمليات جديدة، وفحص العمليات المرسلة سابقاً، وحذف الموارد المملوكة حصراً للمحاولة بعد التأكد من عدم وجود عمليات متأخرة قد تعيد إنشاءها. وإذا تعذر إثبات الحالة أو الملكية، فالنتيجة الآمنة هي NeedsIntervention لا الحذف التخمني.

انتهاء مهلة الدفع ليس رفضاً

في دورة الاشتراك، قد يختفي رد مزود الدفع بعد قبول العملية. إعادة المحاولة فوراً قد تفرض رسماً مزدوجاً، بينما اعتبارها مرفوضة قد يرسل تنبيهاً مضللاً. يقترح المثال ربط كل دورة دفع بمعرّف دورة ومفتاح دفع ثابت، ثم استخدام مؤقتات durable، واستدعاءات رجعية، وفحوص دورية، ومهلة سماح محددة.

يبقى دفتر المدفوعات هو المرجع authoritative للحالات Unknown وPending وDeclined وPaid وNotCharged. ولا تنتقل الدورة إلى التالية إلا بعد تأكيد الإيصال وإغلاق الدورة الحالية. وإذا انتهت المهلة مع بقاء الحالة غير محسومة، تكون النتيجة NeedsReconciliation بدلاً من افتراض نجاح الدفع أو فشله.

الأحداث المتأخرة تحتاج حماية في الوجهة

في تحديث فهرس بحث لمقالات إخبارية، قد يصل الإصدار 12 بعد الإصدار 13 أو تنتهي عمليات الفهرسة بترتيب معاكس. يستطيع الكيان durable حفظ أعلى إصدار تمت رؤيته وتسلسل تحديث عداداته، لكنه لا يقفل الفهرس الخارجي ولا يمنع طلبين من الكتابة بالتوازي.

لذلك يجب أن تفرض الوجهة نفسها حاجز إصدار ذرياً يرفض كتابة إصدار أقدم بعد تثبيت إصدار أحدث. كما تحتاج المنظومة إلى inbox موثوق، وموزع للمتابعة، ومصالحة دورية مع المصدر. وحتى نمط المنسق ذي المعرّف الواحد لا يقدم ضمان التنفيذ مرة واحدة للآثار الخارجية.

ما الذي يعنيه ذلك لوكلاء الذكاء الاصطناعي؟

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

الاستنتاج العملي من الأمثلة الخمسة هو أن Durable Task مناسب عندما يصبح حفظ «ما الذي سيحدث تالياً» نظاماً بحد ذاته. أما إذا كان التطبيق يملك بالفعل طوابير ومؤقتات وسجلات مصالحة واضحة، أو إذا كان النظام الخارجي يوفر تنسيقاً موثوقاً مثل ARM، فقد يضيف الإطار طبقة تعقيد أكثر من قيمة. كما أن جميع الأمثلة تعتمد على حدود خارجية صريحة: سجل سلطوي، مفتاح idempotency، حاجز إصدار، outbox، أو بروتوكول مصالحة.

مصدر الخبر
كيف أعددنا هذا الخبر؟

اعتمد الخبر على المصدر الأصلي الموضح أعلاه. قد نستخدم أدوات آلية للمساعدة في الاستخراج والتصنيف والصياغة، لكن النشر يخضع لقواعد تمنع المحتوى المكرر والقصير أو الروتيني منخفض القيمة. اقرأ سياستنا التحريرية.

c
كاتب المقال

certi.news Editorial Team

certi.news Editorial Team

The certi.news editorial team monitors technical sources and reconstructs news, verifying facts and context prior to publication.

ما الذي تحتاج معرفته

توضح المادة أن Durable Task مناسب لسير العمل الطويل أو المتقطع الذي يحتاج إلى حفظ التقدم والانتظار واستعادة التنسيق، مثل الموافقات والمدفوعات وتهيئة بيئات Azure ووكلاء الذكاء الاصطناعي. لكنه لا يضمن وحده التنفيذ مرة واحدة أو سلامة الآثار الخارجية، ولذلك يحتاج إلى سجلات سلطوية ومفاتيح idempotency وحواجز إصدار ومصالحة.

  • يحفظ Durable Task تاريخ التنسيق ونقاط التقدم، ويمكنه استعادة المنسق بعد انقطاع العامل دون إبقاء خيط تنفيذ مشغولاً.
  • في الموافقات والمدفوعات، يجب أن يسجل التطبيق القرار أو الحالة في مخزن سلطوي قبل إرسال الإشارة، وألا يعتبر انتهاء المهلة رفضاً تلقائياً.
  • قد تكون ARM وBicep كافيتين لنشر موارد Azure؛ تظهر قيمة Durable Task عندما يتضمن المسار قبول الطلب، وإبلاغ التقدم، وانتظار الجاهزية، ثم التفعيل.
  • التعويض ليس دائماً تراجعاً آمناً؛ يجب فحص العمليات المتأخرة والملكية قبل حذف الموارد، وإحالة الحالات غير المثبتة إلى NeedsIntervention.
  • يجب أن تفرض الوجهات الخارجية حماية من الأحداث المتأخرة، مثل حاجز إصدار ذري يرفض كتابة إصدار أقدم بعد تثبيت إصدار أحدث.
  • في وكلاء الذكاء الاصطناعي، ينبغي حفظ اقتراح النموذج والموافقة عليه، بينما تبقى صلاحية الأداة ومنع الطلبات القديمة أو المكررة مسؤولية التطبيق.

أسئلة شائعة

متى يستحق Durable Task التعقيد الإضافي؟

عندما يصبح حفظ ما سيحدث تالياً جزءاً أساسياً من النظام، خصوصاً في العمليات الطويلة أو التي تنتظر أحداثاً خارجية أو قد تنقطع بعد تنفيذ بعض الخطوات.

هل يضمن Durable Task تنفيذ الآثار الخارجية مرة واحدة؟

لا. لا يمنع وحده التكرار أو الكتابة المتوازية في الأنظمة الخارجية، ولذلك يلزم استخدام حدود خارجية مثل مفاتيح idempotency أو حواجز الإصدار أو بروتوكولات المصالحة.

هل يمكن استخدام Durable Task بدلاً من ARM وBicep؟

ليس بالضرورة. توضح المادة أن ARM وBicep قد يكونان كافيين لنشر موارد محددة، بينما يضيف Durable Task قيمة عندما يتجاوز المسار النشر إلى إدارة طلب المستأجر والتقدم والجاهزية والتفعيل.

ماذا تعني حالة NeedsReconciliation في الدفع؟

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

من نفس التصنيف

مقالات قد تهمك

عرض كل الأخبار