Dagu vs Temporal
Dagu 和 Temporal 解决的是不同的问题。
Temporal 是面向用代码编写的有状态应用工作流的持久执行引擎。Dagu 是一个单一二进制,用来调度和编排你已经在运行的命令。本页说明两者各自的适用场景。
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]自包含的单一二进制,无需数据库或 message broker
工作流是调用现有命令的声明式 YAML
面向 shell、Docker、HTTP、SSH、SQL、子工作流和 AI Agent 的 executor
支持 local、基于队列以及跨 workers 的分布式执行
两者各自的定位
Temporal 让长时间运行的应用逻辑跨越崩溃和重启继续存活。你用 SDK 以代码方式编写工作流,服务会 replay event history,让 worker 从停止处恢复。Dagu 调度任务并把命令组织成图。它跟踪运行、重试、日志和历史,而不要求你把任务改写成 framework 里的代码。
- Temporal 面向必须在故障后存活的分布式与微服务工作流。
- Dagu 面向 cron 任务、批处理流水线和用命令搭建的运维自动化。
- Dagu 中的一个步骤可以运行脚本、容器、HTTP 调用或另一个工作流。
你要运维什么以及如何编写
Temporal 需要一个由 Cassandra、PostgreSQL 或 MySQL 支撑的运行服务,通常用 Helm 部署到 Kubernetes,或者使用 Temporal Cloud。工作流存在于 Go、Java、TypeScript 或 Python 代码中。Dagu 是把状态存到磁盘文件的单一二进制。工作流是可以在 diff 里阅读、并提交在被编排代码旁边的 YAML。
- 运行 Dagu 无需 database、broker 或集群。
- YAML 步骤直接 shell out 到你已有的工具,而不是 SDK 调用。
- 可以先在笔记本上开始,等单机不够时再加 workers。
何时应改用 Temporal
如果你的问题是持久执行,那么 Temporal 才是合适的工具,Dagu 不能替代。需要把状态保持数小时甚至数天、等待外部 signal、在长寿命进程之间设置 timer,并在故障后确定性 replay 的工作流,正是 Temporal 的设计目标。Dagu 没有与这种编程模型对应的东西。
- 你需要能在进程崩溃后存活、并从执行中途恢复的代码定义工作流。
- 你依赖应用逻辑里的 signal、持久 timer 或 child workflow。
- 你的团队想要 Go、Java、TypeScript 或 Python 的 SDK,而不是声明式 YAML。
Dagu vs Temporal 速览
FAQ
Practical questions before adopting Dagu
Dagu 能替代 Temporal 吗?
大多数场景下不能。Temporal 是面向用代码编写的有状态工作流的持久执行引擎,Dagu 没有这种模型。只有当你把它用于纯定时任务或命令流水线时,更轻量的 Dagu 才是替代。
Dagu 能运行长时间工作流吗?
Dagu 能运行长任务并编排多步流水线,但它不会跨进程崩溃保持代码定义的工作流状态,也不 replay event history。如果你需要一个步骤暂停数天并在故障后确定性恢复,Temporal 才合适。
定时任务为何选 Dagu 而非 Temporal?
对于用现有命令搭建的 cron 任务和流水线,Dagu 不需要 database、broker 或 SDK。装一个二进制、写 YAML,就能得到调度、重试、日志、历史和 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.