工作流引擎是平台工程的核心组件之一,负责编排 CI/CD Pipeline、数据处理任务、基础设施变更等复杂流程。本文对比几款主流云原生工作流引擎,给出选型建议。

候选引擎

引擎定位语言架构社区
Argo WorkflowsK8S 原生工作流引擎GoCRD + Controller,每个步骤一个 PodCNCF 孵化项目
Temporal通用工作流引擎Go/Java/Python/TS SDKClient-Server,独立部署企业级开源
Apache Airflow数据管道调度PythonScheduler + Worker + WebApache 顶级项目
Prefect现代数据工作流PythonServer + Agent开源 + 商业版
TektonK8S CI/CD PipelineGoCRD + ControllerCDF (CD Foundation)
Temporal (Cadence 分支)长时间运行工作流多语言 SDKClient-ServerUber → Temporal Inc

核心对比

1. 部署与运维

引擎部署复杂度依赖
Argo Workflows低(K8S 内一条 kubectl apply仅 Kubernetes
Temporal中(需数据库 + Temporal Server)MySQL/PostgreSQL + Elasticsearch
Airflow中-高(Scheduler、Worker、Web、DB、Redis/Celery)PostgreSQL + Redis
Prefect低(Prefect Server 或 Prefect Cloud)PostgreSQL(Server 模式)
Tekton低(同 Argo)仅 Kubernetes

如果团队已全面运行在 Kubernetes 上,Argo Workflows 和 Tekton 的部署成本最低——无需额外维护数据库和独立服务。

2. 编程模型

引擎工作流定义方式SDK / DSL
Argo WorkflowsYAML(或 Python/Java SDK 生成 YAML)声明式 YAML
Temporal编程语言 SDK(编写代码)Go/Java/Python/TypeScript/.NET
AirflowPython DAG 定义Python
PrefectPython 函数 + 装饰器Python
TektonYAML(类似 Argo)声明式 YAML

Temporal 的编程模型最灵活——工作流就是代码,支持 ifforsleepawait 等编程语言原生结构。

3. 核心能力

能力ArgoTemporalAirflowTekton
DAG 编排
条件分支
循环✅(原生)
重试/超时
Artifact 传递✅ S3/GCS✅ Payload✅ XCom✅ PipelineResource
Cron 调度✅ Schedule❌(需外部触发)
长时间运行(天/周)⚠️ Pod 存活限制✅ 原生支持⚠️
并行任务
UI Dashboard
SSO 集成✅(oauth2-proxy)✅(企业版)

Temporal 的一大优势是真正支持长时间运行的工作流——工作流状态持久化在数据库中,Worker 可以随时重启而不影响正在进行的工作流。

4. 适用场景

引擎最佳场景
Argo WorkflowsCI/CD Pipeline、数据处理 Job、基础设施变更编排——K8S 原生场景
Temporal微服务编排、长时间运行的事务性工作流(订单、支付、审批)、需要补偿(Saga)的流程
Airflow数据工程 Pipeline、ETL、BI 报表调度
PrefectPython 生态的现代化数据工作流(Airflow 的爱尔兰对手)
TektonK8S 内 CI/CD——如果您需要比 Jenkins X 更灵活的 CI 框架

我们的选型:Argo Workflows

经过评估,我们选择了 Argo Workflows,核心考量:

  1. 全 K8S 基础设施:团队所有服务都在 K8S 中,不需要引入额外的数据库和服务器。
  2. Platform Engineering 友好:通过 CRD 管理,团队已熟悉 K8S YAML 模型。
  3. Argo CD 生态协同:Argo CD + Argo Workflows + Argo Events + Argo Rollouts 构成完整的 GitOps 工作流平台。
  4. 模板复用:通过 WorkflowTemplate 将通用流程抽象为可复用的模板,各团队按需组合使用。

Argo Workflows 实践要点

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: deploy-and-test
spec:
  entrypoint: main
  templates:
    - name: main
      steps:
        - - name: deploy
            templateRef:
              name: deploy-to-k8s
              template: deploy
        - - name: smoke-test
            templateRef:
              name: run-smoke-tests
              template: test
        - - name: notify
            template: slack-notify

    - name: slack-notify
      script:
        image: curlimages/curl:latest
        command: [sh]
        source: |
          curl -X POST -H 'Content-type: application/json' \
            --data '{"text":"Deployment completed"}' \
            $SLACK_WEBHOOK

关键实践:

  • 用 WorkflowTemplate 封装通用流程供团队复用,类似编程语言中的"函数"。
  • 配合 Argo Events 实现事件驱动的工作流触发(Git Push、S3 事件、消息队列)。
  • 为 Workflow 设置合理的 activeDeadlineSecondsttlStrategy 避免僵尸 Pod。

总结

  • K8S 原生、CI/CD 和基础设施变更编排 → Argo Workflows
  • 微服务编排、长时间运行事务、复杂补偿逻辑 → Temporal
  • 数据管道、ETL、BI 调度 → AirflowPrefect