Apache Airflow / الأساسي: التعريفات والفترات وتنفيذ المهام الآمن / الدرس 6
المحاولات وتحمل التكرار وحالات الفشل
تصميم مهام تكرر بأمان وتفسير الحالات دون خلطها بالنتائج الخارجية.
في هذه الصفحة
أهداف الدرس
- تمييز محاولة الإعادة من أثر تجاري جديد.
- شرح success وskipped وupstream_failed وحالات المحاولة.
تعيد المحاولة تنفيذ المهمة
قد ينفذ Airflow منطق المهمة ثانية بعد فشل أو مهلة أو انقطاع عامل. لذلك تكشف سياسة الإعادة أي أثر داخل المنطق لا يتحمل التكرار. قد تكرر إضافة صفوف الفترة تقريراً رغم اخضرار المهمة أخيراً. فضل عملية تستبدل القسم المعلن أو تنفذ قاعدة تفرد ثابتة تناسب الوجهة. رقم المحاولة دليل تنفيذ، لا معرف عمل جديد. ثبت المدخلات عبر المحاولات كي تحسب الإعادة النتيجة المقصودة نفسها، بدلاً من التحول بصمت إلى مجموعة أحدث باسم latest.
قد تترك المهلة نتيجة خارجية غير مؤكدة
إذا قبل نظام بعيد عملية وفقد ردها، فقد تفشل المهمة رغم وجود أثر العمل. قد تطبق الإعادة بمعرف جديد الأثر مرتين. يحتاج هذا الحد مفتاح منع تكرار أو استبدالاً ذرياً أو بروتوكول مصالحة تدعمه الوجهة. لا تجعل معاملة قاعدة تنسيق Airflow واجهة خارجية اعتباطية ذرية مع نجاح المهمة. وبالمثل لا ينشئ تعليم مهمة ناجحة يدوياً تقريراً مفقوداً. ارسم التسلسل من قراءة المدخل إلى إقرار الوجهة ثم تسجيل الحالة، وضع تعطلًا بين الخطوات لتعرف الأدلة المتبقية.
قراءة الحالات بوصفها حقائق تنسيق
تعني success انتهاء التنفيذ دون فشل مبلغ عنه وفق عقد المشغل. وتشير skipped إلى قرار تحكم، لا حساب ناجح، بينما تعني upstream_failed منع فشل سابق الأهلية العادية وفق القاعدة. تسجل up_for_retry فشلاً بقيت له محاولات، وتصف deferred وup_for_reschedule آليتي انتظار محددتين. تهم الفروق عند اتخاذ الضم أو الإشعار قراره. قد تعتمد حالة DAG على المهام الطرفية وقواعدها؛ لذا افحص هل تخفي مهمة نهائية متساهلة مرحلة تجارية فاشلة، ولا تعتبر اللون العام تحققاً كاملاً.
نمذجة الاستبدال بدلاً من الإضافة المكررة
يكتب القاموس المحلي القسم التجاري نفسه مرتين بالنتيجة الكاملة نفسها، فيحتفظ بمدخل واحد، موضحاً عقد استبدال لا تنفيذ قاعدة بيانات. تنتج مقارنة الإضافة أربعة صفوف من تكرارين لمدخل صفين. لا يثبت النموذجان الدوام الذري أو أمان التزامن أو ضمان تخزين بعيد. يجب أن توفر الوجهة العملية المدعومة فعلاً، وقد تستلزم إعادات متعارضة فحص إصدار أو قفلاً مناسباً. ومع ذلك يكشف الفرق آلية التكرار قبل أن يلام المجدول على آثار سببها منطق المهمة.
rows = [('P1', 200), ('P2', 300)]
partitions = {}
for _ in range(2):
partitions['2026-10-01'] = list(rows)
assert len(partitions) == 1
assert len(partitions['2026-10-01']) == 2
print(len(partitions['2026-10-01']))
2
يحتفظ قسم في الذاكرة بصفين؛ ولا تحاكى الذرية الدائمة.
rows = [('P1', 200), ('P2', 300)]
appended = []
for _ in range(2):
appended.extend(rows)
assert len(appended) == 4
print(len(appended))
4
تكرر الإضافة الصفوف وفق العقد رغم نجاح كل إضافة.
إعادة ما يحتمل تعافيه فقط
تسمي السياسة المحدودة عدد المحاولات والتأخير ومهلة التنفيذ، وتصنف المدخل الدائم غير الصالح منفصلاً عن عطل تبعية مؤقت. لا تصلح زيادة المحاولات مخططاً غير مدعوم أو صلاحية مفقودة. يوفر Airflow استثناءات موثقة للتجاوز المقصود أو الفشل دون محاولات إضافية؛ فاستخدمها فقط بمعنى تجاري صريح. تجنب ابتلاع كل استثناء وإرجاع نجاح فارغ، لأنه يمحو دليل الفشل. ينفذ الدرس نماذج حالة واستبدال محلية فقط؛ ولا يمسح مهمة أو يغير حالة تشغيل أو يرسل طلباً أو إشعاراً خارجياً.
الأخطاء الشائعة وإصلاحها
إنشاء صفوف مكررة عند المحاولة.
- لماذا يحدث؟
- الإضافة دون قسم ثابت أو قاعدة تفرد.
- كيف تصلحه؟
- استخدم استبدالاً أو تطبيقاً متحملاً للتكرار تدعمه الوجهة.
- كيف تتجنب تكراره؟
- اختبر الفترة مرتين وافحص الحالة النهائية.
افتراض عدم وقوع مكالمة خارجية فاشلة مطلقاً.
- لماذا يحدث؟
- اعتبار غياب الإقرار دليلاً على عدم التنفيذ.
- كيف تصلحه؟
- صالح النتيجة بالهوية الأصلية قبل إنشاء أثر جديد.
- كيف تتجنب تكراره؟
- وثق معالجة النتيجة غير المؤكدة لكل أثر.
ابتلاع استثناء وتعليم تقرير فارغ ناجحاً.
- لماذا يحدث؟
- استبدال الفشل بقيمة افتراضية تبدو صحيحة.
- كيف تصلحه؟
- انقل الفشل أو صنفه واحفظ سياق التشخيص.
- كيف تتجنب تكراره؟
- ميز المدخل الفارغ الصالح عن غير المتاح.
اختبر فهمك
1. لماذا ينبغي عادة أن يبقى مفتاح العملية ثابتاً عبر محاولات الفترة الواحدة؟
اعرض الحل المشروح
يعرف نتيجة تجارية مقصودة واحدة، فيسمح للوجهة بالتعرف على الإعادة بدلاً من اعتبار كل محاولة عملاً جديداً. تظل هوية المحاولة مفيدة للسجلات، لكن ينبغي ألا تهزم إزالة التكرار. أدرج نوع العملية ونطاق المستأجر أو القسم حيث يلزم، واكشف الحمولات المتعارضة تحت المفتاح نفسه.
2. هل تعني skipped أن تقريراً حسب بصورة صحيحة وتبين أنه فارغ؟
اعرض الحل المشروح
لا بالضرورة. إنها حالة تنسيق تنتج من التحكم أو منطق تجاوز صريح. يحتاج التقرير الفارغ الصالح عقد مدخلات ومخرجات خاصاً. على المهام اللاحقة اختيار قاعدة وتفسير يميزان التجاوز المقصود وفشل المتطلبات والحساب الناجح الذي ينتج صفر صف.
أهم ما تعلمته
- تقع سلامة المحاولة عند حدود الأثر التجاري.
- تصف الحالات التنفيذ والتحكم لا كل حقيقة خارجية.