Dagu مقابل Temporal

يحل Dagu وTemporal مشكلتين مختلفتين.

Temporal هو محرك durable execution لـ workflows تطبيقات ذات حالة مكتوبة بالـ code. وDagu هو Binary واحد يجدول ويرتب الأوامر التي تشغّلها أصلاً. تشرح هذه الصفحة أين يناسب كل منهما.

Pipeline مجدول بـ YAML بسيط
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

At a glance

Dagu مقابل Temporal بإيجاز

الكتابة
Dagu

YAML تصريحي يستدعي الأوامر.

Typical alternative

Workflow بالـ code عبر SDK (Go وJava وTypeScript وPython).

Runtime
Dagu

Binary واحد بحالة قائمة على الملفات.

Typical alternative

خدمة تعتمد على Cassandra أو PostgreSQL أو MySQL.

الأنسب لـ
Dagu

المهام المجدولة وpipelines وأتمتة ops.

Typical alternative

workflows تطبيقات وميكروسيرفِس دائمة وذات حالة.

In depth

Where each tool fits

01

لماذا صُمّمت كل أداة

يُبقي 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 آخر.
02

ماذا تشغّل وكيف تكتب

يحتاج 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 لاحقاً عندما لا يكفي مضيف واحد.
03

متى تختار Temporal بدلاً منه

إذا كانت مشكلتك هي durable execution، فإن Temporal هو الأداة الصحيحة وDagu ليس بديلاً عنه. الـ workflows التي تحتفظ بالحالة لساعات أو أيام، وتنتظر signals خارجية، وتضبط timers عبر عمليات طويلة العمر، ويجب أن تُعيد replay بشكل حتمي بعد عطل، هي بالضبط ما صُمّم له Temporal. ولا يملك Dagu مكافئاً لنموذج البرمجة هذا.

  • تحتاج workflows مُعرّفة بالـ code تنجو من تعطل العملية وتستأنف من منتصف التنفيذ.
  • تعتمد على signals أو timers دائمة أو child workflows داخل منطق التطبيق.
  • يريد فريقك SDK بلغة Go أو Java أو TypeScript أو Python بدل YAML تصريحي.

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.

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.