Dagu vs Temporal

Dagu と Temporal は解く課題が違います。

Temporal はコードで書くステートフルなアプリケーションワークフローのための耐久実行エンジンです。Dagu は既存のコマンドをスケジュールしてオーケストレーションする単一バイナリです。このページではそれぞれの用途を整理します。

素の 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]

自己完結した 1 バイナリ。DB も message broker も不要

ワークフローは既存コマンドを呼ぶ宣言的 YAML

shell、Docker、HTTP、SSH、SQL、SubDAG、AI エージェント向け executor

local、queue ベース、worker への分散実行に対応

それぞれが想定する用途

Temporal はクラッシュや再起動を越えて長時間のアプリケーションロジックを生かし続けます。SDK でコードとしてワークフローを書き、サービスが event history を replay するため、worker は停止地点から再開します。Dagu はジョブをスケジュールし、コマンドをグラフに組みます。タスクを framework 内のコードに書き換えさせることなく、実行、リトライ、ログ、履歴を追跡します。

  • Temporal は障害を越えて生き残るべき分散・マイクロサービスワークフロー向け。
  • Dagu は cron ジョブ、バッチパイプライン、コマンドで組む運用自動化向け。
  • Dagu の 1 ステップはスクリプト、コンテナ、HTTP 呼び出し、別ワークフローを実行できる。

運用する対象と記述方法

Temporal は Cassandra、PostgreSQL、MySQL のいずれかを背後に持つサービスの稼働が必要で、多くは Helm で Kubernetes に展開するか Temporal Cloud を使います。ワークフローは Go、Java、TypeScript、Python のコードに存在します。Dagu は状態をディスク上のファイルに保存する 1 バイナリです。ワークフローは diff で読め、オーケストレーション対象のコードの隣に commit できる YAML です。

  • Dagu の実行に database、broker、cluster は不要。
  • YAML ステップは SDK 呼び出しではなく既存ツールを shell out する。
  • ノートPCで始め、1 台で足りなくなったら後から worker を追加できる。

代わりに Temporal を選ぶべき場合

課題が耐久実行なら Temporal が適切で、Dagu は代替になりません。数時間から数日にわたり状態を保持し、外部 signal を待ち、長寿命プロセスをまたいで timer を設定し、障害後に決定論的に replay すべきワークフローは、まさに Temporal の設計対象です。Dagu にこのプログラミングモデルの相当物はありません。

  • プロセスのクラッシュを越えて生き残り、実行途中から再開するコード定義ワークフローが必要。
  • アプリケーションロジック内の signal、耐久 timer、child workflow に依存している。
  • 宣言的 YAML より Go、Java、TypeScript、Python の SDK を使いたい。

Dagu vs Temporal の概要

観点
Dagu
一般的な代替手段
記述方法
コマンドを呼ぶ宣言的 YAML。
SDK によるコードでのワークフロー(Go、Java、TypeScript、Python)。
ランタイム
ファイルベースの状態を持つ単一バイナリ。
Cassandra、PostgreSQL、MySQL を背後に持つサービス。
向いている用途
スケジュールジョブ、パイプライン、運用自動化。
耐久でステートフルなアプリ・マイクロサービスワークフロー。

FAQ

Dagu を導入する前によくある質問

Dagu は Temporal を置き換えますか?

多くの用途では置き換えません。Temporal はコードで書くステートフルワークフローのための耐久実行エンジンで、Dagu はそのモデルを提供しません。単なるスケジュールジョブやコマンドパイプラインに使っていた場合だけ、より軽い構成の Dagu が代替になります。

Dagu は長時間ワークフローを動かせますか?

Dagu は長いタスクを動かし多段パイプラインをオーケストレーションできますが、コード定義のワークフロー状態をプロセスのクラッシュを越えて保持したり event history を replay したりはしません。ステップを数日止めて障害後に決定論的に再開する必要があるなら Temporal が適切です。

スケジュールジョブで Temporal より Dagu を選ぶ理由は?

既存コマンドで組む cron ジョブやパイプラインなら、Dagu は database も broker も SDK も不要です。1 バイナリを入れ、YAML を書けば、スケジュール、リトライ、ログ、履歴、Web UI が手に入り、Temporal のサービスより運用が軽くなります。

まず 1 つのワークフローから。

Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。

Dagu をインストール