Skip to main content
Docsاركضعطر السيارات

Unexpected Interruptions and Auto-Resume

ماذا يحدث لو تم قطع سير العمل في منتصف الطريق؟ استعادة الثقة والخطوات المتفائلة لاستئناف مرحلة الانقطاع دون تكرار الآثار الجانبية الخارجية.

"ماذا تفعل إذا لم يكتمل التشغيل في وقت واحد" هو سؤال يجب أن يجيب عليه سير العمل على مستوى الإنتاج. يوفر Braidrun حلين للمعالجة:

  • الافتراضي: استراحة آمنة — قم بتمييز التنفيذ على أنه متقطع وانتظر حتى تراه بوضوح قبل "إعادة المحاولة" يدويًا من خطوة معينة في المنتصف.
  • اختياري: متابعة التشغيل تلقائيًا — بعد أن تعلن صراحةً أن "سير العمل هذا يمكن أن يستمر + الخطوات غير الفعالة"، ستستمر المنصة تلقائيًا من نقطة الانقطاع.
ماذا يعني المقاطعة؟

فئتان:

  • جانب النظام الأساسي - إعادة تشغيل الخدمة، واستبدال المثيلات، وفشل المضيف. نحاول تجنب هذه الأشياء ولكن ليس بنسبة 100٪ من الوقت.
  • من جانبك - أنت تقوم "بإلغاء" التنفيذ بشكل نشط (توقف عند "تم الإلغاء"، وليس "المقاطعة").

ستدخل الفئة السابقة فقط في عملية "الاستمرار التلقائي"، ولن يتم تشغيل تنفيذ CANCELLED تلقائيًا.

السلوك الافتراضي: استراحة آمنة

عند حدوث مقاطعة من جانب النظام الأساسي، فإن النظام الأساسي:

  1. وضع علامة على حالة التنفيذ على أنها متقطعة؛
  2. الاحتفاظ بالنتائج والمنتجات والسجلات الخاصة بجميع الخطوات المكتملة؛
  3. تتلقى إشعارًا في الموقع (سيتم أيضًا تكوين البريد الإلكتروني/Slack وفقًا لإشعارك)؛
  4. عندما تنتقل إلى صفحة تفاصيل التنفيذ، يمكنك "إعادة المحاولة من الخطوة الفاشلة" - تقوم المنصة بإعادة استخدام نتائج الخطوة السابقة.

يتوفر هذا الإعداد الافتراضي لجميع مهام سير العمل ولا يتطلب أي تكوين. مناسبة ل:

  • يحتوي سير العمل على تأثيرات جانبية خارجية (إرسال رسائل بريد إلكتروني/خصم أموال/تعديل قاعدة البيانات)
  • عندما لا يكون الإنتاج متأكدًا بعد "ما إذا كان من الآمن إعادة التشغيل ومواصلة التشغيل"

اختياري: متابعة التشغيل تلقائيًا

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

تم تمكين الاشتراك على مستويين

لكي تصبح الاستمرارية التلقائية نافذة المفعول، يجب عليك الإعلان عن كلا الطبقتين في YAML:

  1. مستوى سير العمل: إفادة recovery.autoResumeOnRestart: true
  2. مستوى الخطوة: تعليمات خطوة بخطوة لإعادة التشغيل الآمن idempotent: true

مثال كامل

yaml
name: daily-asa-digest
version: "1.0.0"

recovery:
  autoResumeOnRestart: true
  policy: RESUME_FROM_LAST_INCOMPLETE
  maxAutoResumeAttempts: 3

steps:
  - id: fetch_asa_data
    type: sub_workflow
    module: dingyue-module-asa-fetch
    idempotent: true           # 只读拉取,可重跑

  - id: build_excel
    type: sub_workflow
    module: dingyue-module-excel-report
    idempotent: true           # 生成文件到产物目录,可重跑

  - id: notify_team
    type: sub_workflow
    module: dingyue-module-slack-deliver
    # 不写 idempotent —— 默认 false,发消息不可重跑

ثلاثة سياسة الاسترداد

policyالمعنىمناسبة للمشهد
ABORTعدم الاستعادة تلقائيًا يعادل العودة إلى السلوك الافتراضي.مرحلة الاختبار
RESUME_FROM_LAST_INCOMPLETEتقصير. أعد التشغيل من الخطوة الأولى غير المكتملة.خطوط أنابيب البيانات، ومجموعات واجهة برمجة التطبيقات (API) للقراءة فقط، والحسابات النقية
RESUME_FROM_STARTأعد تشغيل سير العمل بأكمله من البدايةالسيناريوهات التي قد تتغير فيها مصادر البيانات أثناء انقطاع الخدمة وتحتاج إلى التحديث

idempotent كيفية وضع علامة

المعيار الذهبي لتحديد ما إذا كانت الخطوة غير فعالة:

"إذا تم تشغيل نفس الإدخال مرتين، فهل سيكون هناك أي آثار جانبية؟"

إذا كنت تستطيع (إرسال رسائل خارجية، تحصيل أموال، كتابة أوامر)، فلا تضف شخصًا عاجزًا.

خصائص الخطوةidempotent
استعلام واجهة برمجة التطبيقات للقراءة فقط (تقرير السحب، تطبيق القائمة)✓ true
حساب نقي/تحويل البيانات✓ true
إنشاء تخفيض السعر/Excel إلى دليل المنتج✓ true(سيتم مسح المنتجات القديمة قبل إعادة تشغيلها)
استدلال LLM (أداة خالية من الآثار الجانبية)✓ true(ستتم إعادة حساب الرموز المميزة، ولكنها آمنة لغويًا)
أرسل بريدًا إلكترونيًا / Telegram / Slack / Feishu✗ false
الكتابة إلى قاعدة البيانات الخارجية/تغيير عرض الإعلان/تقديم الطلب/الخصم✗ false
Webhook للمكالمات الصادرة✗ false(ما لم تقم نقطة النهاية الأخرى بإزالة التكرارات بشكل صريح)
manual_approval✗ false(مواصلة التشغيل ستؤدي إلى اختبار اتصال الجهة المعتمدة مرة أخرى، وهي تجربة سيئة)
القيمة الافتراضية خاطئة - السلامة أولاً

إذا لم يتم كتابة Idempotent، يكون الإعداد الافتراضي خطأ. سيتم الرجوع إلى RESUME_FROM_LAST_INCOMPLETE إلى ABORT عندما يواجه خطوة غير فعالة - لن يتم تشغيله تلقائيًا، ويترك لك القيام بذلك يدويًا.

العديد من المواقف التي لن تحدث أثناء الاستمرار التلقائي

حتى إذا قمت بتكوين الاسترداد، فلن تستمر عمليات التنفيذ التالية تلقائيًا:

  • مصدر التشغيل هو Webhook - يمكن أن تكون حمولة Webhook مرة واحدة على الأكثر، ولا يعرف النظام الأساسي ما إذا كان المنبع سيعيد المحاولة أم لا.
  • مصدر التشغيل هو المجدول - سيعيد المجدول تشغيل نفسه في الجولة التالية من cron.
  • متوقف حاليًا عند manual_approval - انتظار الموافقة يعني أنه محظور في الأصل.
  • تم تعديل ملف تعريف سير العمل أثناء الانقطاع - اكتشف النظام الأساسي عدم تطابق التجزئة وهو غير متأكد من توافق الإصدار الجديد.

دليل "إعادة المحاولة من خطوة" (متاح في أي وقت)

بغض النظر عما إذا كان سير العمل قد تم تكوينه مع الاسترداد أم لا، فإن صفحة تفاصيل التنفيذ توفر دائمًا زر "إعادة المحاولة من الخطوة الفاشلة":

  1. فتح عملية تنفيذ متقطعة/فاشلة؛
  2. انقر فوق "إعادة المحاولة من هذه الخطوة" بجوار الخطوة الفاشلة/المنقطعة؛
  3. سيتم إعادة استخدام نتيجة الخطوة المكتملة مسبقًا؛ تبدأ هذه الخطوة في التشغيل مرة أخرى.

حتى لو لم تكن الخطوة غير فعالة، يمكنك إعادة المحاولة يدويًا - لأنه عندها تقرر كإنسان بوعي أن الأمر "يستحق إعادة التشغيل".

مواصلة تشغيل الحد

منع النظام من إعادة تشغيل نفس التنفيذ في "حلقة لا نهائية": سيستمر كل تنفيذ تلقائيًا في التشغيل حتى 3 مرات. إذا استمر الفشل، توقف وانتظر حتى تتعامل معه. يمكنك تجاوز (1-20) في Recovery.maxAutoResumeAttempts.

مراجعة

سيتم تسجيل أحداث التدقيق في كل مرة يتم فيها إجراء المتابعة التلقائية:

  • execution.auto_resume — واصل التشغيل بنجاح
  • execution.auto_resume.skipped — وفقًا للقواعد، لا يجب الاستمرار في الجري لسبب وجيه

يمكن للمسؤول تصفية سجلات التدقيق وعرضها حسب هذين النوعين من الأحداث.

اقتراحات عملية

  • خط أنابيب البيانات النقي (ASA يوميًا، ملخص RSS): استرداد كامل + غير فعال، كن مطمئنًا أنه سيستمر في العمل تلقائيًا.
  • إذا كانت هناك آثار جانبية خارجية (خصومات، إرسال رسائل، تقديم طلبات): لا تفتح السيرة الذاتية التلقائية. - تعطيل اتخاذ القرار البشري.
  • أضف موافقة يدوية قبل خطوات التأثير الجانبي الرئيسية - الموافقة في حد ذاتها هي "نقطة حظر طبيعية" للتشغيل المتقطع.

الخطوة التالية