Dagu vs Prefect

如果你想要编排但不想写 Python,可以看看 Dagu。

Prefect 是面向用代码编写 flow 的数据团队的 Python framework。Dagu 是一个单一二进制,用声明式 YAML 调用你已有的命令,没有需要运维的数据库。本页诚实地看看两者各自适合什么。

一个调用命令、无需 decorator 的工作流
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]

工作流是声明式 YAML,而非 Python 代码

基于文件状态的单一二进制

无需外部数据库或消息代理

面向 shell、Docker、HTTP、SSH、SQL、子工作流和 AI Agent 步骤的 executor

At a glance

Dagu vs Prefect 一览

编写方式
Dagu

调用命令的声明式 YAML。

Prefect

带 @flow 和 @task decorator 的 Python 函数。

运行时
Dagu

基于文件状态的单一二进制。

Prefect

Prefect server 加数据库,外加独立的 workers。

更适合谁
Dagu

想要小型自托管运行时的脚本、容器和运维自动化。

Prefect

想要动态 flow 和可选托管云的、以 Python 为中心的数据团队。

In depth

Where each tool fits

01

用声明式 YAML 而非 Python framework

Prefect 把任务建模为用 @flow 和 @task decorator 包装的 Python 函数,工作流因此存在于你的代码库里。Dagu 让每个步骤保持为命令,并在外面用 YAML 包上调度、重试和依赖关系。

  • 定义运行 shell、Docker、HTTP、SSH、SQL 或子工作流的步骤
  • 让不写 Python 的运维人员也能读懂工作流
  • 把 YAML 与它调用的脚本一起放进 git 管理
02

基于文件状态的单一二进制

生产环境的 Prefect 会运行一个由 Postgres 等数据库支撑的 Prefect server,以及执行 flow 的 workers。Dagu 以单一二进制发布,把运行历史、日志和队列状态保存在本地文件系统上。

  • 下载一个文件即可开始,无需准备数据库
  • 通过处理文件和一个二进制来备份和升级
  • 需要时从本地运行扩展到队列或分布式 workers
03

何时应改选 Prefect

当你的工作流属于 Python,且团队也乐于运维它的各项服务时,Prefect 更合适。有些需求比起 Dagu 更自然地落在 Prefect 上。

  • 你想要在运行时由 Python 决定形状的动态 DAG
  • 你的流水线在任务间传递 Python 对象,而不是调用命令
  • 你想要托管选项,Prefect 通过 Prefect Cloud 提供

FAQ

Practical questions before adopting Dagu

Dagu 能替代 Prefect 吗?

并非对每个团队都是。如果你的工作流是 Python,并依赖动态 flow 或在任务间传递 Python 对象,Prefect 更合适。当工作以命令、容器或服务调用存在,且你想要 YAML 和无数据库时,Dagu 更合适。

不写任何 Python 也能用 Dagu 吗?

可以。Dagu 工作流是调用命令的 YAML。某个步骤可以运行你已有的 Python 脚本,但编排层本身不需要 Python,也不需要 framework import。

与 Prefect 相比,Dagu 需要什么基础设施?

Dagu 的状态基于文件,所以只需一个二进制和文件系统。典型的 Prefect 部署会运行带数据库的 server 和一个或多个 workers。Dagu 没有托管云,需要你自托管。

Next step

Start with one workflow.

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