Apache Airflow / المتقدم: المعالجة التاريخية والنشر وأدلة التعافي / الدرس 17
الأداء وزمن التحليل وتوزيع DAG
تقليل كلفة التعريف المتكرر وحفظ هوية الشفرة دون نقل آثار العمل إلى التحليل.
في هذه الصفحة
أهداف الدرس
- شرح معالجة DAG المتكررة وكلفة الاستيراد.
- مراجعة إصدارات الحزم منفصلة عن توافق تبعيات البيئة.
ينفذ التحليل تعريفات Python مراراً
تحمل معالجة DAG ملفات Python لاكتشاف تعريفات سير العمل وتسلسلها، فتسهم الاستيرادات والتعبيرات العلوية في كلفة معالجة متكررة. قد يؤخر بحث شبكي يستخدم لبناء كل مخطط الاكتشاف، ويضيف عطل تبعية قبل أن يبدأ تنفيذ أي مهمة. احصر العمل العلوي في إنشاء تعريفات حتمية من مدخلات صغيرة مراجعة. انقل المكتبات المكلفة إلى دوال المهام عندما تحتاجها وقت التنفيذ فقط، مع حفظ سلوك الاستيراد المدعوم. ليست هذه دعوة لإخفاء الاستيرادات اعتباطياً؛ حدد الكلفة المتكررة الفعلية، ثم تحقق من وضوح الشفرة وتوافق بيئتها بعد التغيير.
تقدير إجمالي عمل التعريف صراحة
يضرب النموذج المحلي كلفة تحليل اصطناعية مقدارها ثماني ميلي ثوان في مئتي ملف وثلاث دورات. ينتج 4.8 ثانية من العمل المجمع وفق الافتراضات المبسطة. ليس ذلك زمن اكتمال جداري، لأن الحساب يستبعد التوازي والتخزين المؤقت واكتشاف الملفات وكلفة الجدولة. يوضح المثال أثر التكرار: فقد تهم عملية صغيرة لكل ملف عند ضربها في ملفات ودورات كثيرة. قس النشر الفعلي بمقاييس معتمدة قبل زيادة عمليات التحليل أو المهل. قد ينقل التزامن الإضافي الضغط إلى التخزين أو الاستيراد أو مسار البيانات الوصفية بدلاً من إزالة العملية العلوية المكلفة.
parse_ms = 8
files = 200
scans = 3
aggregate_ms = parse_ms * files * scans
assert aggregate_ms == 4800
print(aggregate_ms / 1000)
4.8
تمثل 4.8 ثانية عملاً مفترضاً مجمعاً لا تأخر تحليل مقاساً.
توليد هويات مخطط ثابتة
إذا ولدت إعدادات ثابتة صغيرة مهاماً، فاجعل ترتيبها ومعرفاتها حتميين. قد ينتج ترتيب عناصر set أو قائمة خارجية متغيرة تبدلات مربكة في المخطط لا تعبر عن قصد تجاري. تدعم الهويات الثابتة مقارنة الحوادث والسجلات التاريخية ومراجعة التعريف الآمنة. يناسب التوزيع الديناميكي الحالات التي يخص فيها عدد العمل بيانات التشغيلة لا إعداد وقت التعريف. تحقق مبكراً من المعرفات المكررة والإعدادات غير الصالحة دون الوصول للخارج عند الاستيراد. يفحص مثال الفرز تمثيلاً ثابتاً لقائمة مستودعات معطاة فقط؛ ولا يستورد DAG أو يعتمد اكتشاف المجدول له.
depots = ['D2', 'D1', 'D3']
ordered = sorted(depots)
task_ids = [f'validate_{depot.lower()}' for depot in ordered]
assert task_ids == ['validate_d1', 'validate_d2', 'validate_d3']
assert len(task_ids) == len(set(task_ids))
print(task_ids)
['validate_d1', 'validate_d2', 'validate_d3']
الأسماء المعطاة ثابتة ومختلفة؛ ولا يحمل تعريف Airflow.
تحفظ الحزم بإصدار علاقة الشفرة
يمكن لحزم DAG في Airflow 3 تجميع التعريفات ومواردها المرتبطة، وربط التشغيلة بإصدار شفرة مقصود عندما يدعم تنفيذ الحزمة الإصدارات. لا يوفر LocalDagBundle هذا السلوك؛ فلا تفترض تثبيت الشفرة التاريخية لكل مصدر. ولا تثبت هوية الحزمة تلقائياً إصدارات المزودات أو مكتبات النظام أو البيانات الخارجية؛ بل تراجع هذه التبعيات مستقلة. قد يكسر حذف موارد الحزم القديمة مبكراً الإعادات المدعومة. لدى Airflow 3.1 سلوك تجريبي للإعادة بأحدث إصدار حزمة، ويجب تمييزه عن التعافي المعتاد بالإصدار نفسه.
تحسين الحد المرصود
يحتاج بطء اكتشاف DAG وبطء قبول الصف وبطء تنفيذ المهمة قياسات مختلفة. افحص مدة معالجة الملفات وأخطاء الاستيراد وحداثة التعريف المتسلسل قبل ضبط سعة العمال. لا يصلح تحسين منطق مهمة تعريفاً لا يحمل، بينما قد تحسن إزالة استعلام مكلف وقت التحليل الجدولة دون تغيير منطق التنفيذ. قارن الحمل والإصدار نفسيهما بعد تعديل محدود مراجع. لا يشغل الدرس خدمة تحليل أو يجلب حزمة أو يثبت تبعية. الأمثلة الحسابية والحتمية نماذج محلية فقط؛ وتبقى إنتاجية المعالجة الفعلية وجلب الحزم وتوافق البيئة خارج النطاق المختبر.
الأخطاء الشائعة وإصلاحها
منع انقطاع مصدر اكتشاف DAG قبل المهام.
- لماذا يحدث؟
- إجراء الشفرة العلوية بحثاً خارجياً.
- كيف تصلحه؟
- انقل الاكتشاف الخاص بالتشغيلة لمهمة وحدد مدخلات المخطط.
- كيف تتجنب تكراره؟
- راجع آثار الاستيراد ومدة التحليل.
تغير ترتيب المهام بين تحليلات متكافئة.
- لماذا يحدث؟
- اعتماد التوليد ترتيباً غير ثابت.
- كيف تصلحه؟
- طبع الإعداد الثابت واستخدم معرفات مستقرة.
- كيف تتجنب تكراره؟
- افحص حتمية التوليد.
افتراض حفظ الحزمة المحلية كل الإصدارات.
- لماذا يحدث؟
- عدم فحص قدرات تنفيذ الحزمة.
- كيف تصلحه؟
- راجع الدعم واحفظ الشفرة اللازمة للتعافي.
- كيف تتجنب تكراره؟
- سجل المصدر وسياسة الإصدار والبيئة منفصلة.
اختبر فهمك
1. هل تعني 4800 ميلي ثانية من عمل التحليل المجمع إتاحة كل DAG بعد 4.8 ثانية بالضبط؟
اعرض الحل المشروح
لا. يهمل التقدير التوازي والاكتشاف والانتظار والاستيراد وكلفة البيانات الوصفية. إنه نموذج حساسية يوضح العمل المتكرر، وليس قياس تأخر المجدول. قس الفترة المعنية في النشر وحدد اختناقها قبل استخدام النتيجة لتبرير زيادة عمليات التحليل أو إطالة المهل.
2. هل تحدد حزمة DAG ذات إصدار بيئة العامل تحديداً كاملاً؟
اعرض الحل المشروح
لا. قد تبقى المزودات وحزم Python ومكتبات النظام وإعداد التشغيل منفصلة. احفظ سجل توافق يربط إصدار الحزمة ببيئة التنفيذ وعقود المصدر. لا يفيد مرجع شفرة تاريخية إلا إذا ظلت البيئة المدعومة والآثار المطلوبة متاحة للتعافي المقصود.
أهم ما تعلمته
- قد تؤخر كلفة الاستيراد والبناء غير الثابت التنسيق.
- إصدارات الحزم وتوافق البيئة دليلان مرتبطان ومختلفان.