brainax

المهام الخلفية والجدولة

الدرس 17 من 26 في دورة «البرمجة بالإحساس». مجاني، مع رسوم متحركة واختبار.

المستخدم لا ينتظر

مثال هذا الدرس: تدير موقع إعلام مدرستك مع نشرة بريدية. بعض الأعمال طويلة: إرسال رسالة إلى ألف مشترك، ضغط فيديو، إعداد تقرير. إن نفّذتها والشخص ينتظر بعد النقر، سيحدّق في دائرة التحميل دقائق. الحل: مهمة خلفية. يرد الخادم فورًا «تم الاستلام» وينجز العمل لاحقًا. تصطف المهام في طابور، مثل البطاقات في الرسم، ويأخذها العامل (worker)، أي برنامج التنفيذ، واحدة تلو الأخرى.

Cron: عمل على المنبّه

الـ Cron هو تشغيل مهمة حسب جدول، مثل المنبّه. «كل يوم 9:00» في الرسم: يستيقظ الخادم بنفسه ويرسل تذكير «موعد تسليم المقال اليوم». يُكتب الجدول برمز قصير مثل 0 9 * * *: الدقيقة 0، الساعة 9، والنجوم تعني «أي يوم، أي شهر، أي يوم من الأسبوع». الفخ: الوقت يُحسب غالبًا بتوقيت UTC العالمي، لا بتوقيتك. تحقق في التوثيق.

أين تشغّل ذلك

Cloudflare: الـ Cron Triggers تشغّل Worker حسب جدول. Vercel: الـ Cron Jobs تستدعي عنوان الـ API الخاص بك في الوقت المحدد. GitHub Actions (أتمتة داخل GitHub) تشغّل سكربتًا حسب جدول، لكنها لا تَعِد بالدقيقة الدقيقة. Inngest: خدمة لسلاسل الخطوات، مثل «سجّل، ذكّره بعد ثلاثة أيام». اختر المكان الذي يعيش فيه مشروعك أصلًا. الحدود في موقع الخدمة.

فشلت؟ أعد المحاولة

قد تفشل المهمة: توقفت خدمة البريد دقيقة، أو انقطع الإنترنت لحظة. النظام الجيد لا يستسلم، بل يعيد المحاولة (retry) بعد فاصل: هذا سهم «إعادة» في الرسم. في Inngest تُعاد كل خطوة تلقائيًا، والخطوات المنجزة لا تُشغَّل من جديد. اطلب من الوكيل: «أضف إعادة محاولة مع فاصل واكتب في السجل إن ظلت المهمة تفشل». السجل (log) دفتر يكتب فيه الخادم ما حدث.

لا تخصم مرتين

إعادة المحاولة خطيرة إن كانت الخطوة قد نجحت فعلًا. مثال: خُصم مبلغ الاشتراك، لكن الرد ضاع في الطريق. الإعادة العمياء ستخصم مرة ثانية. تحتاج إلى «عدم التكرار» (idempotency): تكرار الخطوة نفسها يعطي النتيجة نفسها كتشغيلها مرة واحدة. الطريقة: لكل عملية رقم فريد، ويتحقق الخادم أولًا «هل نُفّذ هذا من قبل؟». والويب هوك في الرسم قد يصل مرتين أيضًا، والقاعدة نفسها.

اختبر نفسك

  1. لماذا يكون إرسال ألف رسالة مهمة خلفية؟
    الإجابة الصحيحة: حتى لا ينتظر الشخص إرسال كل شيء. يرد الخادم فورًا «تم الاستلام» وتُرسل الرسائل لاحقًا من الطابور. الخادم هو من ينجز العمل في كل الأحوال.
  2. ما هو الـ Cron؟
    الإجابة الصحيحة: تشغيل مهمة حسب جدول زمني. الـ Cron يعمل كمنبّه: «كل يوم الساعة 9:00». إعادة المحاولة بعد خطأ اسمها retry، ودفتر الأحداث اسمه log.
  3. ماذا تعني عدم التكرار (idempotency) في خطوة الدفع؟
    الإجابة الصحيحة: تكرار الخطوة لن يخصم المال مرة ثانية. الأخطاء تحدث دائمًا. عدم التكرار يعني أن الإعادة آمنة: يرى الخادم رقم العملية فلا ينفذها مرتين.

← API: ربط خدمات الآخرين أمان التطبيق →