Dagu مقابل Temporal
يحل Dagu وTemporal مشكلتين مختلفتين.
Temporal هو محرك durable execution لـ workflows تطبيقات ذات حالة مكتوبة بالـ code. وDagu هو Binary واحد يجدول ويرتب الأوامر التي تشغّلها أصلاً. تشرح هذه الصفحة أين يناسب كل منهما.
name: nightly-ops
schedule: "0 2 * * *"
steps:
- id: extract
run: python scripts/extract.py
- id: transform
run: ./bin/transform
retry_policy:
limit: 3
depends: [extract]
- id: notify
run: ./scripts/slack-success.sh
depends: [transform]ملف ثنائي واحد مكتفٍ ذاتياً، من دون database أو message broker
الـ workflows هي YAML تصريحي يستدعي أوامر موجودة
Executors لـ shell وDocker وHTTP وSSH وSQL وsub-workflows ووكلاء الذكاء الاصطناعي
يعمل محلياً أو عبر queue أو موزعاً على workers
لماذا صُمّمت كل أداة
يُبقي Temporal منطق التطبيق الطويل حياً عبر الأعطال وإعادة التشغيل. تكتب الـ workflows بالـ code عبر SDK، وتقوم الخدمة بـ replay لـ event history، فيستأنف الـ worker من حيث توقف. أما Dagu فيجدول المهام ويربط الأوامر في graph. يتتبع التشغيلات والـ retries والـ logs والتاريخ من دون أن يطلب منك إعادة كتابة المهام كـ code داخل framework.
- يستهدف Temporal الـ workflows الموزعة والميكروسيرفِس التي يجب أن تنجو من الأعطال.
- يستهدف Dagu مهام cron وpipelines الدفعية وأتمتة ops المبنية من الأوامر.
- يمكن لخطوة في Dagu أن تشغّل script أو container أو طلب HTTP أو workflow آخر.
ماذا تشغّل وكيف تكتب
يحتاج Temporal خدمة قيد التشغيل تعتمد على Cassandra أو PostgreSQL أو MySQL، وغالباً تُنشر بـ Helm على Kubernetes أو تُستخدم عبر Temporal Cloud. تعيش الـ workflows في code بلغة Go أو Java أو TypeScript أو Python. أما Dagu فهو Binary يخزّن الحالة في ملفات على القرص. والـ workflows هي YAML تُقرأ في diff وتُحفظ commit بجانب الـ code الذي يرتّبه.
- لا حاجة إلى database أو broker أو cluster لتشغيل Dagu.
- تقوم خطوات YAML بـ shell out إلى أدواتك الحالية بدل استدعاءات SDK.
- يمكن البدء على حاسوب محمول وإضافة workers لاحقاً عندما لا يكفي مضيف واحد.
متى تختار Temporal بدلاً منه
إذا كانت مشكلتك هي durable execution، فإن Temporal هو الأداة الصحيحة وDagu ليس بديلاً عنه. الـ workflows التي تحتفظ بالحالة لساعات أو أيام، وتنتظر signals خارجية، وتضبط timers عبر عمليات طويلة العمر، ويجب أن تُعيد replay بشكل حتمي بعد عطل، هي بالضبط ما صُمّم له Temporal. ولا يملك Dagu مكافئاً لنموذج البرمجة هذا.
- تحتاج workflows مُعرّفة بالـ code تنجو من تعطل العملية وتستأنف من منتصف التنفيذ.
- تعتمد على signals أو timers دائمة أو child workflows داخل منطق التطبيق.
- يريد فريقك SDK بلغة Go أو Java أو TypeScript أو Python بدل YAML تصريحي.
Dagu مقابل Temporal بإيجاز
FAQ
Practical questions before adopting Dagu
هل يحل Dagu محل Temporal؟
في معظم الحالات، لا. Temporal محرك durable execution لـ workflows ذات حالة مكتوبة بالـ code، وDagu لا يقدّم هذا النموذج. يحل Dagu محل Temporal فقط إذا كنت تستخدمه لمهام مجدولة بسيطة أو command pipelines، حيث يناسب الإعداد الأخف.
هل يستطيع Dagu تشغيل workflows طويلة؟
يستطيع Dagu تشغيل مهام طويلة وترتيب pipelines متعددة الخطوات، لكنه لا يحفظ حالة workflow مُعرّفة بالـ code عبر تعطل العملية ولا يُعيد replay لـ event history. إذا كانت خطوة يجب أن تتوقف أياماً وتستأنف بشكل حتمي بعد عطل، فإن Temporal هو الخيار الصحيح.
لماذا تختار Dagu بدل Temporal للمهام المجدولة؟
لمهام cron وpipelines المبنية من أوامر موجودة، لا يحتاج Dagu إلى database أو broker أو SDK. تثبّت Binary واحداً وتكتب YAML فتحصل على الجدولة والـ retries والـ logs والتاريخ وWeb UI، وهو أخف تشغيلاً من خدمة Temporal.
Start with one workflow.
Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.