跳转到内容

云原生工作流引擎技术选型

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

引擎 定位 语言 架构 社区
Argo Workflows K8S 原生工作流引擎 Go CRD + Controller,每个步骤一个 Pod CNCF 孵化项目
Temporal 通用工作流引擎 Go/Java/Python/TS SDK Client-Server,独立部署 企业级开源
Apache Airflow 数据管道调度 Python Scheduler + Worker + Web Apache 顶级项目
Prefect 现代数据工作流 Python Server + Agent 开源 + 商业版
Tekton K8S CI/CD Pipeline Go CRD + Controller CDF (CD Foundation)
Temporal (Cadence 分支) 长时间运行工作流 多语言 SDK Client-Server Uber → Temporal Inc
引擎 部署复杂度 依赖
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 的部署成本最低——无需额外维护数据库和独立服务。

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

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

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

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

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

经过评估,我们选择了 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 将通用流程抽象为可复用的模板,各团队按需组合使用。
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 设置合理的 activeDeadlineSeconds 和 ttlStrategy 避免僵尸 Pod。
  • K8S 原生、CI/CD 和基础设施变更编排 → Argo Workflows
  • 微服务编排、长时间运行事务、复杂补偿逻辑 → Temporal
  • 数据管道、ETL、BI 调度 → Airflow 或 Prefect