التنفيذ الموزّع

مخطط سير عمل واحد. عمّال على كل منصة.

الوضع الموزّع في Dagu هو الملف الثنائي الوحيد نفسه في دورين: منسّق يوزّع العمل وعمّال يستطلعونه. شغّل dagu worker على Linux أو macOS أو Windows، وصِف الجهاز بوسوم، ووجّه مخططات DAG كاملة أو خطوات مفردة عبر worker_selector. يتصل العمّال نحو الخارج عبر gRPC مؤمَّن بـ TLS متبادل، فلا وسيط رسائل ولا قاعدة بيانات مشتركة ولا منفذ وارد على العامل.

ثلاث منصات في مخطط ليلي واحد
# nightly-close.yaml
schedule: "0 2 * * *"
max_active_runs: 1

steps:
  # Windows box exports from the line-of-business system
  - id: export_sales
    action: dag.run
    with: { dag: export-sales }
    worker_selector:
      os: windows

  # Linux worker near the data transforms it
  - id: transform
    action: dag.run
    with: { dag: transform-sales }
    worker_selector:
      os: linux
      region: us-east-1
    depends: [export_sales]

  # GPU worker scores the result
  - id: score
    action: dag.run
    with: { dag: score-models }
    worker_selector:
      gpu: "true"
    depends: [transform]

ملف ثنائي واحد هو الخادم والمنسّق وكل عامل

يعمل العمّال على Linux وmacOS وWindows، على amd64 وarm64

worker_selector يوجّه مخطط DAG كاملًا أو خطوة واحدة حسب الوسوم

يتصل العمّال نحو الخارج عبر gRPC مؤمَّن بـ mTLS، فلا مشكلة مع NAT أو الشبكات الخاصة

At a glance

Dagu الموزّع مقابل حزمة عمّال قائمة على وسيط

الأجزاء المتحركة
Dagu

منسّق وعمّال من ملف ثنائي واحد؛ لا وسيط ولا مخزن نتائج.

الحزم القائمة على وسيط

مجدول ووسيط ومخزن نتائج وعمّال تُنشر وتُحدَّث كل على حدة.

أسطول متعدد الأنظمة
Dagu

عمّال أصليون على Linux وmacOS وWindows.

الحزم القائمة على وسيط

العمّال غالبًا على Linux فقط؛ وWindows عبر WSL أو الحاويات.

التوجيه
Dagu

وسوم worker_selector تصريحية لكل DAG أو خطوة.

الحزم القائمة على وسيط

طوابير مسماة تُربط في إعدادات العمّال وفي كود المهام معًا.

شبكة العمّال
Dagu

يتصل العمّال نحو الخارج على منفذ واحد مؤمَّن بـ mTLS.

الحزم القائمة على وسيط

يحتاج العمّال إلى نقاط وصول للوسيط وبيانات اعتماد مشتركة.

In depth

Where each tool fits

01

توسّع أفقيًا دون تبنّي منصة

التنفيذ الموزّع خيار نشر، لا إعادة كتابة. ملف YAML الذي يعمل على جهاز واحد يعمل كما هو على أسطول كامل، ويظل الطابور يضبط التزامن قبل التوزيع، أما مخطط DAG الذي يجب أن يبقى على الخادم الرئيسي فيثبّت نفسه هناك عبر worker_selector: local.

  • العامل أمر واحد فقط: dagu worker --worker.coordinators=<host>:50055 --worker.labels gpu=true
  • تنتقل تعريفات DAG إلى العمّال عبر gRPC لحظة التوزيع، فلا يحتفظ العمّال بنسخة من المستودع
  • default_execution_mode: distributed يرسل كل تشغيل إلى الأسطول؛ وبدونه لا يُوزَّع إلا مخططات DAG التي تحمل worker_selector
02

الوسوم توجّه العمل، والأجهزة تبقى قابلة للاستبدال

يعلن العامل عن ماهيته بوسوم مفتاح-قيمة. ويعلن مخطط DAG عن حاجته عبر worker_selector. يطابق المنسّق بين الاثنين، فتصبح زيادة السعة تشغيل عامل آخر بالوسوم نفسها، لا تعديل سير العمل.

  • المحدِّد الفارغ يطابق أي عامل؛ والمحدِّد ذو الوسوم يتطلب تطابقًا تامًا لكل مفتاح
  • العمّال ذوو الوسوم الإضافية يطابقون أيضًا، فيمكن لجهاز واحد خدمة عدة مجموعات في آن واحد
  • worker_selector على خطوة dag.run يرسل ذلك المخطط الفرعي إلى عامل مختلف عن عامل الأصل
03

أسطول يمزج أنظمة التشغيل والمعماريات

العمّال هم الملف الثنائي Go نفسه، يصدر لأنظمة Linux وmacOS وWindows على amd64 وarm64. في المخطط نفسه ينفّذ عامل Windows خطوات PowerShell بجوار عامل Linux ينفّذ bash، مع مكان واحد لرؤية الحالة والسجلات والتاريخ.

  • ضع الوسوم حسب اصطلاح، مثل os=windows أو arch=arm64، ووجّه بالمحدِّدات نفسها
  • وضع shared-nothing يبث السجلات والحالة إلى المنسّق عبر gRPC، فلا حاجة إلى NFS أو وحدة تخزين مشتركة
  • لا يفتح العمّال إلا اتصالات صادرة، فتستطيع الأجهزة خلف NAT أو على VPN أو في سحابة أخرى الانضمام إلى الأسطول
04

جاهز للسحابة وKubernetes

ينشر مخطط Helm الرسمي واجهة المستخدم والمجدول والمنسّق ومجموعات عمّال اختيارية على Kubernetes. ويمكن للعمّال الانضمام من خارج العنقود تمامًا: أجهزة افتراضية أو خوادم فعلية أو جهاز Windows مكتبي، مع TLS متبادل يوثّق الطرفين حين يعبر المرور أي حدود.

  • helm repo add dagu https://dagucloud.github.io/dagu ثم helm install مع قيمك
  • لا يحتاج المنسّق إلا إلى host:port واحد يمكن الوصول إليه؛ ويكفي Kubernetes Service أو موازن حمل داخلي
  • يتحقق المنسّق من شهادات العمّال ويتحقق العمّال من المنسّق عبر mTLS

FAQ

Practical questions before adopting Dagu

هل أحتاج إلى وسيط رسائل أو قاعدة بيانات خارجية؟

لا. يوزّع المنسّق المهام عبر gRPC ويستطلعه العمّال، فيعيدون نبضات القلب والحالة والسجلات على الاتصال نفسه. في وضع shared-nothing لا يوجد تخزين مشترك إطلاقًا؛ وفي وضع shared-filesystem يكتب العمّال على وحدة التخزين نفسها التي يقرأها الخادم.

هل يمكن للعمّال الجلوس خلف NAT أو في شبكة خاصة؟

نعم. المسار الوحيد المطلوب من العامل إلى المنسّق عبر منفذ TCP واحد، ولا يفتح المنسّق أبدًا اتصالًا عائدًا نحو العامل. تنضم الأجهزة خلف NAT أو على VPN أو في سحابة أخرى بمجرد الاتصال بعنوان المنسّق.

كيف تندمج عمّال Windows؟

ثبّت الملف الثنائي نفسه، وشغّل dagu worker بوسوم مثل os=windows، وأعطِ مخططات DAG الخاصة بـ Windows محدِّد worker_selector مطابقًا. تعمل الخطوات على ذلك الجهاز في الصدفة التي تحددها، مثل shell: powershell -NoProfile، بينما يعمل باقي المخطط في أماكن أخرى.

هل يمكن تشغيل Dagu كاملًا على Kubernetes؟

نعم. يولّد مخطط Helm الرسمي عمليات نشر لواجهة المستخدم والمجدول والمنسّق ومجموعات العمّال التي تحددها، مع خدمة ClusterIP أمام المنسّق. أما العمّال خارج العنقود فيتوجهون إلى تلك الخدمة عبر ingress أو موازن الحمل الذي تكشفها به.

ماذا يحدث إذا انقطع عامل في منتصف التشغيل؟

يرسل العمّال نبضة قلب كل ثانية. وحين تنقطع نبضة عامل لأكثر من 30 ثانية، يعلّم المنسّق مهامه الجارية بالفشل، فتنطلق معالجات الفشل والإشعارات بدل أن يظل التشغيل معلقًا إلى الأبد.

Next step

Start with one workflow.

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