Apache Airflow / المتوسط: عمل التشغيل والتحكم وميزانيات الموارد / الدرس 9
الحساسات والتأجيل والمهل
انتظار شروط خارجية صريحة دون خلط سعة الانتظار باكتمال العمل.
في هذه الصفحة
أهداف الدرس
- مقارنة poke وإعادة الجدولة والانتظار المؤجل.
- تمييز مهلة التنفيذ من ميزانية الانتظار الكلية.
انتظار شرط جاهزية دقيق
يفحص الحساس تحقق شرط مثل وصول بيان مكتمل للفترة. يجب أن يكون الشرط أقوى من وجود ملف إذا كان منتجه قد يواصل الكتابة فيه. حدد إشارة الاكتمال والفترة المتوقعة ومعنى انتهاء المهلة للعمل. لا يثبت نجاح الانتظار صحة كل صف ولا بقاء الكائن متاحاً إلى الأبد. افصل فحوص الجاهزية والسلامة والمعالجة. وتجنب حلقة نوم دائمة داخل مهمة Python عادية إذا كان مشغل انتظار موثق يعبر عن الشرط بسلوك موارد ومهلة محدودين.
تعتمد ملكية الموارد على نمط الانتظار
يحتفظ حساس poke عادة بخانة العامل أثناء الفحوص المتكررة. يحرر reschedule العامل بين الفحوص ويعود لاحقاً عبر المجدول. وقد يعلق مشغل مؤجل التنفيذ ليراقب triggerer شرطاً غير متزامن قبل استئناف المهمة. ليست الآليات أعلاماً قابلة للتبديل في كل مشغل؛ يلزم دعم المزود والمكون المطلوب في النشر. لا ينقل التأجيل الحساب الثقيل إلى triggerer. يجب أن تلائم المحفزات التنفيذ غير المتزامن المشترك، لا أن تحجبه بعمل متزامن طويل أو تحمل حالة عمل ضخمة قابلة للتغير.
تسمية كل ساعة وعلاقتها بالمحاولة
تحد execution_timeout محاولة تنفيذ مهمة واحدة وفق عقد مشغلها. وقد تحد timeout للحساس الانتظار الكلي وفق سلوك نمطه الموثق؛ فلا تعيد محاولة فحص فاشل بالضرورة ضبط تلك الميزانية. وللتأجيل معالجة مهلة ومسار استئناف مدعومان خاصان به. راجع المشغل المعين ولا تعتبر الحقول مترادفة. يقدم Airflow 3.1 تنبيهات Deadline Alerts التجريبية بعد إزالة SLA القديمة، لكن موعد التنبيه ليس إنهاء تنفيذ المهمة. افصل متطلب الإشعار عن مهلة المحاولة وعن الموعد النهائي لجاهزية البيانات.
مقارنة إشغال الخانات بالانتظار المنقضي
يفترض النموذج المحلي ستة فحوص جاهزية بفواصل عشر ثوان، وكلفة ثانية فعلية لكل فحص. تختلف ميزانية خانة محجوزة طوال دقيقة عن ست ثوان من الفحص. هذا توضيح حسابي لا محاكاة مجدول؛ إذ يستبعد توقيت إعادة الجدولة وكلفة البدء وسلوك triggerer. قدر كلاً من الانتظار المنقضي وسعة التنفيذ المشغولة. لا يجعل تحرير العامل المصدر يصل أسرع، وقد تظل آلاف الفحوص القصيرة المعاد جدولتها ضغطاً على المجدول. اختر فاصل الفحص من متطلب الجاهزية وأدلة المنصة.
checks = 6
check_cost_s = 1
elapsed_wait_s = 60
active_check_s = checks * check_cost_s
assert active_check_s == 6
assert elapsed_wait_s > active_check_s
print(elapsed_wait_s, active_check_s)
60 6
تختلف ستون ثانية منقضية عن ست للفحص؛ ولا تحاكى كلفة المجدول.
تأكيد الدعم قبل اختيار التأجيل
يسجل رسم الإعداد سياسة انتظار مقصودة، دون الادعاء بأن أي صنف يقبل هذه الحقول. قارنه بتوقيع مشغل المزود الموثق ودعم النشر. قد يشير عدم استئناف مهمة deferred إلى مشكلة triggerer أو محفز فاشل أو شرط لا يتحقق؛ بينما تشير queued إلى حد مختلف. احفظ الحالات والأزمنة الدقيقة قبل تغيير الإعدادات. لا يشغل الدرس حساساً أو triggerer أو فحص جاهزية خارجياً. يحسب المثال المنفذ إشغالاً اصطناعياً فقط، وتبقى دلالات المشغل لاختبار مستقل في بيئة Airflow متوافقة مصرح بها.
{"condition":"complete-manifest-for-declared-interval","overall_wait_seconds":3600,"check_interval_seconds":30,"preferred_mode":"provider-supported-deferral"}
ليس مخطط إعداد مشغل Airflow؛ يترجم فقط وفق واجهة المزود الموثقة.
الأخطاء الشائعة وإصلاحها
استهلاك مهام الانتظار كل خانات العمال.
- لماذا يحدث؟
- إغفال إشغال poke من السعة.
- كيف تصلحه؟
- راجع إعادة الجدولة أو التأجيل المدعوم ومتطلباته.
- كيف تتجنب تكراره؟
- راقب مدة الانتظار والسعة المشغولة منفصلتين.
بقاء مهمة مؤجلة معلقة بلا نهاية.
- لماذا يحدث؟
- احتمال خلل triggerer أو الشرط أو غياب المهلة.
- كيف تصلحه؟
- افحص أدلة الحالة وعقد الاستئناف.
- كيف تتجنب تكراره؟
- اختبر فشل المحفز وحدود الانتظار.
نجاح فحص الجاهزية لملف غير مكتمل.
- لماذا يحدث؟
- اعتبار الوجود اكتمالاً.
- كيف تصلحه؟
- استخدم علامة اكتمال أو بياناً متحققاً.
- كيف تتجنب تكراره؟
- افصل الإتاحة والسلامة والتحقق التجاري.
اختبر فهمك
1. هل يضمن تحرير خانة العامل أثناء الانتظار وصول المدخل أسرع؟
اعرض الحل المشروح
لا. يغير ذلك إشغال موارد المنصة، لا جاهزية المصدر. ما زال التدفق يحتاج شرطاً صريحاً وموعد انتظار كلياً. اختر الاستقصاء أو التأجيل وفق دعم المشغل وكلفة الجدولة والسعة، ثم تحقق من أن مساري الفشل وانتهاء المهلة ينتجان حالة العمل المقصودة.
2. لماذا لا ينبغي وصف Deadline Alert بأنه execution_timeout؟
اعرض الحل المشروح
يرتبط التنبيه بتوقع زمني معلن وسلوك إشعار، بينما تقيد execution_timeout مدة تشغيل محاولة المهمة. قد تختلف الساعة المستخدمة والنتائج المترتبة عليهما. راجع توثيق ميزة Airflow 3.1 ودلالات المشغل، ثم اضبط واختبر كل متطلب مستقلاً في نشر مصرح به.
أهم ما تعلمته
- يغير نمط الانتظار الموارد لا تعريف الجاهزية.
- حدود المحاولة والانتظار الكلي ومواعيد التنبيه عقود مختلفة.