Apache Airflow / الأساسي: التعريفات والفترات وتنفيذ المهام الآمن / الدرس 5
XCom وحدود بيانات المهام
تمرير مؤشرات صغيرة تخص التنفيذ مع عقود تخزين واضحة للآثار الكبيرة والأدلة الدائمة.
في هذه الصفحة
أهداف الدرس
- شرح نطاق XCom وقيم TaskFlow المعادة تلقائياً.
- تصميم بيان آثار صغير والتحقق من حقول سلامته.
اتصال المهام ليس ذاكرة مشتركة
المهام وحدات تنفيذ معزولة وقد تعمل على عمال مختلفين. يحمل XCom رسائل صغيرة قابلة للتسلسل مرتبطة بتنفيذ المهمة، ولا يصبح متغير Python في عامل مرئياً لآخر تلقائياً. تتحول قيمة TaskFlow المعادة غالباً إلى XCom باسم return_value، وينشئ تمرير مؤشرها اعتماد البيانات المقصود. ليس XCom ناقل بيانات ضخمة عاماً أو بديلاً لقاعدة عمل دائمة. وضح متطلبات الحجم والتسلسل. قد تغير خلفية مخصصة التخزين، لكنها لا تلغي تحليل دورة الحياة والصلاحيات وحجم القيم التي يحملها المستهلكون.
تمرير بيان بدلاً من مجموعة البيانات كلها
قد يحمل بيان تسليم مفيد URI للأثر، وفترة عمل، وعدد صفوف، وتجزئة محتوى. تعيش المجموعة في مخزن مشترك مراجع تصل إليه المهام المعنية، ويخبر البيان الصغير القارئ بما يجلبه ويتحقق منه. يستخدم JSON نطاق invalid ولا ينشئ كائناً بعيداً. المسار وحده دليل ضعيف لأن المحتوى قد يتغير بعد النشر. تساعد هوية أثر ثابتة أو ذات إصدار وتجزئة على تمييز المتوقع من بديل لاحق. اختر عمراً يغطي المحاولات والتعافي المدعومين، لا وقت بدء المهمة التالية المعتاد فقط.
{"uri":"https://artifacts.training.invalid/reports/2026-10-01/v1.csv","interval":"2026-10-01","row_count":2,"format":"csv-utf8"}
العنوان المحجوز وصفي فقط؛ ويضيف العقد الحقيقي دليل سلامة بإصدار.
توقع تغير الاتصال مع المحاولات
قد تمحى XComs لمهمة لم تنجح عند إعادة المحاولة وفق السلوك الموثق. لا تعتمد رسالة جزئية لمحاولة فاشلة كنقطة تحقق مرجعية لأثر خارجي. انشر البيان بعد استيفاء الأثر عقد اكتماله، واحفظ دليل اكتمال دائم في نظام التخزين عند الحاجة. يختلف XCom عن Variables التي تمثل إعداداً مشتركاً لا نقلاً ضمن تشغيلة. قد يجعل متغير عام يستخدم كمؤشر ناتج لكل تشغيلة التشغيلات المتداخلة تستبدل بعضها. احفظ هوية الفترة والتشغيلة في العقد، ولا تفترض وجود تشغيلة نشطة واحدة فقط.
التحقق من أثر حتمي صغير محلياً
يجزئ Python بايتات UTF-8 الدقيقة لبيانات من صفين ويبني بياناً صغيراً. يفحص عدد الصفوف وطول التجزئة دون الكتابة في نظام ملفات مشترك أو الاتصال بتخزين كائنات. تتحقق التجزئة من هوية البايتات عند مقارنتها بدليل متوقع موثوق، لكنها لا تثبت صدق الصفوف أو اكتمالها. ثبت الأسطر والترميز والتسلسل كي يجزئ الطرفان البايتات نفسها. إذا غير الضغط أو التشفير التمثيل المخزن، فحدد هل يصف البيان البايتات المخزنة أم المحتوى المفكوك أم كليهما، ووضح الفرق صراحة.
import hashlib
content = 'parcel_id,weight_g\nP1,200\nP2,300\n'.encode('utf-8')
manifest = {'row_count': 2, 'sha256': hashlib.sha256(content).hexdigest()}
assert manifest['row_count'] == 2
assert len(manifest['sha256']) == 64
print(manifest['row_count'], len(manifest['sha256']))
2 64
تصف التجزئة البايتات المعطاة ولا تثبت اكتمال المصدر أو الدوام البعيد.
مراجعة الخلفية ضمن النشر
قد تختلف الكلفة ومسارات الاحتفاظ بين XCom الافتراضي وخلفية مبنية على تخزين كائنات. تثبيت خلفية أو تعديل عتبتها قرار نشر يحتاج مراجعة توافق وصلاحيات، ولا يبرر تمرير أطر كبيرة اعتباطياً. تجنب الوصول المباشر لنماذج قاعدة XCom من المهام في Airflow 3، واستخدم آليات السياق وTask SDK العامة. عند التشخيص حدد نسخة المهمة المنتجة والمفتاح والتشغيلة، لا اسماً عاماً واحداً. يتحقق المحتوى من JSON والتجزئة محلياً فقط؛ ولا ينشئ رسائل أو يضبط خلفية أو يتصل بنسخة Airflow.
الأخطاء الشائعة وإصلاحها
إرهاق اتصال المهام بإطار بيانات ضخم.
- لماذا يحدث؟
- اعتبار XCom ناقل مجموعات غير محدود.
- كيف تصلحه؟
- احفظ الأثر بعقد مراجع ومرر مؤشراً صغيراً.
- كيف تتجنب تكراره؟
- حدد توقعات الحجم والتسلسل.
استهلاك تشغيلات متداخلة مؤشر ناتج عام خاطئاً.
- لماذا يحدث؟
- استبدال اتصال التنفيذ بمتغير مشترك.
- كيف تصلحه؟
- استخدم قيماً تخص التشغيلة وهويات آثار ثابتة.
- كيف تتجنب تكراره؟
- اختبر فترات متزامنة وسلوك المحاولة.
غياب رسالة جزئية لمحاولة فاشلة عند الإعادة.
- لماذا يحدث؟
- اعتبار دورة XCom دليلاً دائماً للاكتمال الخارجي.
- كيف تصلحه؟
- سجل الاكتمال الدائم عند الأثر وانشر بيانات صحيحة فقط.
- كيف تتجنب تكراره؟
- راجع تنظيف المحاولات غير الناجحة.
اختبر فهمك
1. هل تثبت تجزئة SHA-256 احتواء تقرير على كل طرد متوقع؟
اعرض الحل المشروح
لا. تعرف التجزئة البايتات المعطاة عند مقارنتها بدليل موثوق. يحتاج الاكتمال تغطية مصدر وفحوص عمل مستقلة، مثل الأقسام المتوقعة والأعداد المصالحة. احفظ دليل السلامة والاكتمال معاً؛ فقد تكون لملف ناقص لم يتغير تجزئة صحيحة تماماً.
2. لماذا قد يكون اسم ملف محلي مؤقت نقلاً غير آمن للمهمة اللاحقة؟
اعرض الحل المشروح
قد تعمل المهمة التالية على عامل آخر أو بعد حذف الملف. وقد ترى إعادة المحاولة بايتات مختلفة في المسار نفسه. استخدم مخزناً مشتركاً مصرحاً به وإصدار أثر ثابتاً واحتفاظاً صريحاً، ثم مرر الهوية الصغيرة وحقول التحقق عبر عقد اتصال المهام.
أهم ما تعلمته
- يحمل XCom رسائل تنفيذ صغيرة لا حالة عمل دائمة اعتباطية.
- هوية الأثر وسلامته واكتماله أدلة منفصلة.