
Temporal 调研:22K stars 的持久执行 workflow 引擎,为什么 6 年老牌开源能跟 Airflow 拼刺刀
Temporal 不是 Airflow 的 ” 竞品 ”——它是 完全不同范式的 workflow 引擎。Airflow 是 ”DAG 调度器 ”(批处理数据管道),Temporal 是 ” 持久执行运行时 ”(长程应用工作流)。22,584 ⭐ / MIT / 6 年老牌 / 3 大 SDK(Python / Go / TypeScript)/ sub-second 调度 + 10,000+ workflow starts/sec —— 本文把 Temporal 跟 Airflow 的根本差异讲透。
写在前面:为什么 workflow 引擎需要 ” 范式升级 ”
2026 年 workflow 引擎市场有个根本困惑:Airflow 已经 47K stars 统治了 7 年,为什么 Temporal 还能涨到 22K stars?
答案藏在两件事的根本不同:
- Airflow 的定位:“ 调度 + 监控批处理数据管道 ”(Python DAG / scheduler / executor / metadata DB)
- Temporal 的定位:“ 持久执行应用工作流 ”(event-sourced / 确定性重放 / 自动状态恢复)
如果说 Airflow 是“Excel 宏 ”(适合运行昨天的 ETL 任务),Temporal 就是“ 数据库事务 ”(适合管理跨小时 - 跨天 - 跨周的应用状态)。
一、Temporal 是什么
基本信息
| 项 | 数据 |
|---|---|
| 仓库 | temporalio/temporal |
| Stars | 22,584 ⭐(GitHub API 实时) |
| Forks | 1,844 |
| License | MIT ✅ 干净 |
| 创建 | 2019-10-16(6 年老牌,不是新项目) |
| 最新 release | v1.31.2(2026-07-08,1-2 个月 / 版节奏) |
| 最后 push | 2026-08-28(昨天,仍活跃) |
| Open issues | 931(多但合理,enterprise 阶段) |
| 主语言 | Go(核心 server) |
| 体积 | 158 MB |
| 官网 | temporal.io / docs.temporal.io |
| Topics | 16 个:durable-execution / workflow-engine / microservices / orchestrator 等 |
核心架构 :Temporal = 服务端(Go)+ 多个语言 SDK + UI + CLI。服务端是事件溯源(event-sourced)架构,每个 workflow 执行被记录为事件序列 ,worker 崩溃后从事件历史 确定性重放 恢复状态。
5 个配套仓库
| 仓库 | Stars | 定位 |
|---|---|---|
| temporalio/sdk-python | 1,169 ⭐ | Python SDK(2026-08-28 仍 commit) |
| temporalio/sdk-go | 958 ⭐ | Go SDK(跟主 server 同语言) |
| temporalio/sdk-typescript | 900 ⭐ | TypeScript SDK |
| temporalio/ui | 430 ⭐ | Temporal Web UI(可视化调试) |
| temporalio/tctl | 50 ⭐ | Temporal CLI(命令行管理) |
所有 4 个 SDK + UI 都是 MIT ✅ + 2026 年仍活跃 commit,商用完全无风险。
二、Temporal 6 大核心能力
1️⃣ Durable Execution(持久执行)
核心卖点:Workflow 状态自动持久化 —— worker 崩溃、网络分区、Pod 重启都不会丢状态。
实现原理:
– 每个 workflow 执行被记录为
事件序列(event history)
– worker 重启后
自动从事件历史重放,恢复到崩溃前的精确状态
–
不是 ” 任务重跑 ”,是 ” 时间旅行 ” —— workflow 知道自己之前做过什么
@workflow.defn
class OrderWorkflow:
@workflow.run
async def run(self, order_id: str):
# 第 1 步:检查库存
await workflow.execute_activity(check_inventory, order_id)
# 第 2 步:扣款
await workflow.execute_activity(charge_payment, order_id)
# 第 3 步:发货
await workflow.execute_activity(ship_order, order_id)
# 如果第 2 步 worker 崩溃,重启后从第 1 步之后继续,不会重新扣款!
2️⃣ Workflow as Code(不是 DAG 不是 YAML)
Temporal workflow 用普通编程语言写(Go / Java / Python / TypeScript / .NET):
- ✅ 用
if/else、for、函数调用 —— 标准编程结构 - ❌ 不是 YAML DAG 文件
- ❌ 不是 operator 抽象(没有 BashOperator / PythonOperator)
# Temporal workflow = 普通 Python 函数
@workflow.defn
class UserOnboarding:
@workflow.run
async def run(self, user_id):
# 动态决策
if await is_premium_user(user_id):
await send_premium_welcome(user_id)
else:
await send_basic_welcome(user_id)
# 等待 7 天
await asyncio.sleep(7 * 24 * 3600) # ✅ Temporal 会持久化这个等待
# 第 7 天发邮件
await send_followup_email(user_id)
对比 Airflow:Airflow DAG 写起来 ” 像配置 ”(operator 抽象 + XCom 传递),Temporal 写起来 ” 像正常写应用 ”。
3️⃣ Time Travel Debug(时间旅行调试)
Temporal Web UI 支持 ” 时间旅行调试 ” —— 可以 replay 任意历史时刻的 workflow 状态。
- 调试第 3 天的 workflow 时,UI 显示第 1 天 / 第 2 天 / 第 3 天的完整执行历史
- 每个 activity 的输入输出 + 失败原因 + 重试次数
- Airflow DAG 失败时只能看到 ” 任务失败 ”,看不到失败前的状态
4️⃣ Activity-Level Retry(活动级重试)
每个 activity 可以独立配置重试策略(超时、重试次数、退避算法):
@activity.defn
async def charge_payment(order_id):
return await stripe.charges.create(...)
# 配置:5 次重试,每次最多 30 秒,第 1 次失败后等 5 秒再试
payment_activity = activity.defn(
name="charge_payment",
retry_policy=RetryPolicy(initial_interval=timedelta(seconds=5),
maximum_attempts=5,
maximum_interval=timedelta(seconds=30),
),
)
对比 Airflow:Airflow 是 task-level retry(任务级),Temporal 是 activity-level(活动级)—— 粒度更细,重试效率更高。
5️⃣ Multi-Language SDKs(多语言 SDK)
4 大语言 SDK 都是 MIT ✅ + 2026 年活跃 commit:
| SDK | Stars | 最新 commit |
|---|---|---|
| Python | 1,169 | 2026-08-28 |
| Go | 958 | 2026-08-28 |
| TypeScript | 900 | 2026-08-28 |
| .NET | (集成在 sdk-core) | 活跃 |
对比 Airflow:Airflow 主要用 Python(用 DAG operator 抽象调用其他语言任务)。
6️⃣ Signals & Queries(信号 + 查询)
Temporal 独有:运行时跟 workflow 通信:
- Signal:外部触发 workflow 内部状态变更(比如 ” 订单已取消 ” signal 传到 OrderWorkflow)
- Query:外部查询 workflow 当前状态(不改变状态,纯读)
对比 Airflow:Airflow 是 单向调度 (scheduler → task),Temporal 是 双向通信(外部 ↔ workflow)。
三、Temporal vs Airflow 6 维深度对比
10 维对比表
| 维度 | Temporal | Apache Airflow |
|---|---|---|
| License | MIT ✅ | Apache-2.0 ✅ |
| Stars | 22,584 ⭐ | 46,609 ⭐(2 倍 Temporal) |
| 创建年份 | 2019(6 年) | 2015(11 年) |
| 主语言 | Go(server)+ Python/TS/Go/Java/.NET SDK | Python |
| 核心抽象 | Workflow + Activity(Code) | DAG + Task(Python file) |
| 状态管理 | 内置持久化(event history) | 外部管理(metadata DB + 用户写 idempotency) |
| 失败恢复 | 确定性重放(从崩溃点继续) | 任务重跑(从 task 起点重跑) |
| 调度延迟 | sub-second dispatch | 分钟级(scheduler 周期性 parse DAG) |
| 吞吐量 | 10,000+ workflow starts/sec | 数百 DAG runs/min |
| 生态 | 4 大 SDK(跨语言) | 70+ providers(大数据集成) |
核心差异深度
1️⃣ 持久执行 vs DAG 调度(哲学根本差异)
Temporal 是事件溯源架构:
[订单 workflow 启动]
↓
事件 #1: WorkflowStarted{order_id: 123}
事件 #2: ActivityScheduled{check_inventory}
事件 #3: ActivityCompleted{success: true}
事件 #4: ActivityScheduled{charge_payment} ← 假设 worker 此时崩溃
↓
[新 worker 重启]
↓
事件 #4 重放 → 从 "charge_payment" 开始恢复,不会重做 check_inventory
Airflow 是 scheduler 架构:
[scheduler 每分钟扫描 DAG 文件]
↓
发现 task "charge_payment" 未完成 → 启动 worker 跑
↓
如果之前 "check_inventory" 跑过 30 分钟失败 → retry 从头跑 30 分钟
结论:Temporal 处理长运行 / 长重试场景效率显著更高。
2️⃣ Workflow as Code vs DAG as Config
Temporal:写应用代码
@workflow.defn
class SubscriptionWorkflow:
@workflow.run
async def run(self, user_id):
await workflow.execute_activity(trial_period, user_id)
await asyncio.sleep(30 * 24 * 3600) # 30 天 trial
await workflow.execute_activity(charge_subscription, user_id)
# 持续循环扣费
while await workflow.execute_activity(check_active, user_id):
await asyncio.sleep(30 * 24 * 3600)
await workflow.execute_activity(charge_subscription, user_id)
Airflow:写 DAG 文件
@dag(schedule='@daily', start_date=days_ago(1))
def subscription_pipeline():
trial = PythonOperator(task_id='trial_period', ...)
wait = TimeDeltaSensor(task_id='wait_30_days', delta=timedelta(days=30))
charge = PythonOperator(task_id='charge', ...)
trial >> wait >> charge # DAG 依赖图
结论:Temporal 写复杂业务逻辑更自然,Airflow 写数据管道更直观。
3️⃣ 内置状态管理 vs 外部状态管理
Temporal 自动持久化 workflow 状态 —— 不需要写 idempotency 代码。
Airflow 需要用户自己保证:
– 每个 task 写 idempotent code(重跑不会出问题)
– 用 XCom 或外部 DB 存中间状态
– 任务失败后正确恢复
结论:Temporal 对长程应用工作流友好,Airflow 对批处理数据管道友好。
4️⃣ sub-second 调度 vs 分钟级调度
Temporal:sub-second dispatch + 10,000+ workflow starts/sec
Airflow:scheduler 每分钟扫描一次 DAG 文件,最快分钟级 dispatch
结论:Temporal 适合延迟敏感场景(订单处理 / 用户 onboarding),Airflow 适合延迟不敏感场景(昨天 ETL)。
四、Temporal 5 大场景决策矩阵
| 场景 | 推荐 | 理由 |
|---|---|---|
| 📊 批处理数据管道(每日 ETL / 数据湖入仓) | Airflow | 70+ providers + 成熟的 DAG 模型 + backfill + 数据间隔感知 |
| ⏱️ 长程应用工作流(订单处理 / 订阅管理) | Temporal | 持久执行 + 状态自动恢复 + sub-second dispatch |
| 🔄 跨服务 saga pattern(分布式事务 / 跨微服务补偿) | Temporal | Saga 是 Temporal 的标杆用例,自动处理补偿逻辑 |
| 👤 用户 onboarding workflow(多步 + 长等待 + 状态保存) | Temporal | Signal/Query + 30+ 天等待 + 自动恢复 |
| 🤖 AI Agent 长程任务(agent 跑小时到天) | Temporal | 比 LoopX 更成熟,但缺 AI Agent 专用的 evidence/quota 概念 |
核心判断 : 如果你 workflow 是 ” 数据管道 ” 用 Airflow,如果是 ” 应用逻辑 ” 用 Temporal。
五、Temporal vs Cadence(前世今生)
Cadence 是 Uber 2017 年开源的 workflow 引擎,Temporal 的两位创始人 Maxim Fateev + Samar Abbas 当时在 Uber 主导 Cadence 项目。
- 2017:Uber 开源 Cadence(最初的实现)
- 2019:创始人离开 Uber 创立 Temporal Technologies,从头重写服务端(用 Go 而非 Java)
- 至今:Temporal 是新一代,Cadence 是旧版(仍在维护但增长停滞)
对比:
– Temporal 22,584 ⭐ / MIT / Go
– Cadence 几千 stars / Apache-2.0 / Java
结论 : 新项目直接用 Temporal,不要选 Cadence。
六、35 分钟 5 步实战:跑通一个 Order Workflow
Step 1:启动 Temporal Server(10 分钟)
# 用 Docker Compose 启动 Temporal + Postgres + UI
git clone https://github.com/temporalio/temporal.git
cd temporal
docker compose up -d # 启动 temporal + postgresql + temporal-ui
UI 在 http://localhost:8080,server gRPC 在 7233。
Step 2:装 Python SDK(3 分钟)
pip install temporalio
Step 3:写 Workflow(10 分钟)
# order_workflow.py
from temporalio import workflow, activity
from datetime import timedelta
@activity.defn
async def check_inventory(order_id: str) -> bool:
# 模拟调用库存 API
return True
@activity.defn
async def charge_payment(order_id: str) -> str:
# 模拟调用 Stripe
return f"payment_{order_id}"
@activity.defn
async def ship_order(order_id: str) -> str:
# 模拟调用物流 API
return f"shipped_{order_id}"
@workflow.defn
class OrderWorkflow:
@workflow.run
async def run(self, order_id: str):
# 第 1 步:检查库存
has_stock = await workflow.execute_activity(
check_inventory, order_id,
start_to_close_timeout=timedelta(seconds=30),
)
if not has_stock:
return "out_of_stock"
# 第 2 步:扣款
payment_id = await workflow.execute_activity(
charge_payment, order_id,
start_to_close_timeout=timedelta(minutes=5),
)
# 第 3 步:发货
shipping_id = await workflow.execute_activity(
ship_order, order_id,
start_to_close_timeout=timedelta(hours=2),
)
return f"completed: {payment_id} + {shipping_id}"
Step 4:跑 Worker + 启动 Workflow(5 分钟)
# worker.py
import asyncio
from temporalio.client import Client
from temporalio.worker import Worker
from order_workflow import OrderWorkflow, check_inventory, charge_payment, ship_order
async def main():
client = await Client.connect("localhost:7233")
worker = Worker(
client,
task_queue="order-task-queue",
workflows=[OrderWorkflow],
activities=[check_inventory, charge_payment, ship_order],
)
await worker.run()
if __name__ == "__main__":
asyncio.run(main())
# start_workflow.py
import asyncio
from temporalio.client import Client
from order_workflow import OrderWorkflow
async def main():
client = await Client.connect("localhost:7233")
result = await client.execute_workflow(
OrderWorkflow.run,
"order-123",
id="order-123-workflow",
task_queue="order-task-queue",
)
print(f"Result: {result}")
asyncio.run(main())
Step 5:故意杀掉 Worker 测自动恢复(7 分钟)
# 跑 worker
python worker.py
# 在另一个 terminal 启动 workflow(10 秒后杀 worker)python start_workflow.py &
sleep 10
kill -9 %1 # 杀掉 worker
# 重启 worker
python worker.py
# Temporal 会自动从断点继续,不会重新跑已完成的步骤!
七、6 条风险清单
⚠️ 风险 1:931 open issues 偏多
22,584 stars + 931 open issues(issue/stars 比 = 4.1%,行业平均 0.5-1%)。社区响应可能滞后,企业生产环境锁定前先观察。
⚠️ 风险 2:自托管复杂
Temporal 自托管需要 server + database + UI + 自定义 worker,至少 4 个组件(比 Airflow 的 5+ 服务略少但仍复杂)。
⚠️ 风险 3:determinism 约束学习曲线
Temporal workflow 代码必须 确定性(不能直接用 random / I/O),所有副作用必须通过 activity。这对很多开发者是反直觉的。
⚠️ 风险 4:生态成熟度不如 Airflow
Airflow 有 70+ providers(Snowflake / BigQuery / dbt / Spark / Kubernetes 等),Temporal 只有 4 个 SDK + 第三方 connector 还在补。
⚠️ 风险 5:商业版 Temporal Cloud 锁定风险
Temporal Technologies 提供 Temporal Cloud(托管服务),部分企业级功能(Multi-region replication / Advanced Observability)可能仅在 Cloud 版可用。
⚠️ 风险 6:worker 重启期间 activity 可能被重复跑
Activity 的 idempotency 需要 用户自己保证(不能完全靠 Temporal 自动防重)。
八、跟已有调研的关系
| 项目 | WP ID | 定位 | 与 Temporal 关系 |
|---|---|---|---|
| Apache Airflow | 306 | DAG-based 批处理调度 | 范式不同(DAG vs 持久执行) |
| Dagster | 390 | Asset-centric 编排 | 范式类似 Airflow,不是 Temporal |
| Prefect | (待调研) | 现代 orchestration | 跟 Temporal 类似,可能冲突 |
| Celery | 288 | Python task queue | 不直接冲突,定位更底层 |
| LoopX | 403 | AI Agent 长程状态控制面 | 更窄:专攻 AI Agent,Temporal 是通用 workflow |
| loop-engineering | 175 | AI Agent 循环方法论 | 互补:方法论 + 运行时 |
关键判断:
Temporal 跟 LoopX 是 ” 通用 vs 专用 ” 关系 。LoopX 是 为 AI Agent 设计的状态控制面 (8 host 集成 / 5 CLI / evidence + quota 概念),Temporal 是 通用 workflow 引擎 (5 大语言 SDK / sub-second dispatch / 持久执行)。 如果你的长程任务是 AI Agent,用 LoopX;如果是订单处理 / saga / 订阅,用 Temporal。
九、总结
3 个最值得用 Temporal 的理由
1️⃣ Durable Execution 是 ” 时间机器 ”
Workflow 状态自动持久化,worker 崩溃后从崩溃点继续 ——这不是 Airflow 的 ” 任务重跑 ”(浪费 30 分钟),是 ” 时间旅行 ”(0 浪费)。 对任何长程应用工作流都是质变。
2️⃣ Workflow as Code + 4 大 SDK
写应用代码,不是 DAG 文件 —— 复杂业务逻辑(条件、循环、状态保存)天然适配。Python / Go / TypeScript / .NET 4 大 SDK 都是 MIT ✅ + 2026 年活跃 commit。
3️⃣ 6 年老牌 + 22K stars + sub-second 调度
不是新项目 (2019-10 创建), 生产环境验证充分。sub-second dispatch + 10,000+ workflow starts/sec 性能远超 Airflow 的分钟级调度。
不适合用 Temporal 的场景
- ❌ 批处理 ETL / 数据管道 → 用 Airflow
- ❌ 简单定时任务 → 用 cron
- ❌ 5 分钟内完成的短任务 → 用任何 worker queue(Celery)
- ❌ AI Agent 专用长程任务 → 用 LoopX
先试一周
| Day | 任务 |
|---|---|
| 1 | Docker Compose 启动 Temporal Server + UI,访问 http://localhost:8080 |
| 2-3 | 跑通官方 hello world(Python SDK) |
| 4-5 | 写一个 3-step workflow,故意 kill worker 验证自动恢复 |
| 6-7 | 加 Signal/Query,外部触发 workflow 状态变更 |
一周后如果你觉得 ”workflow 状态不丢 ” 的感觉对了,恭喜你进入了持久执行范式。
参考
- temporalio/temporal GitHub —— 主仓 22,584 ⭐ / MIT
- Temporal 官方文档 —— 最权威的 workflow 教程
- Temporal 官网 —— 商业版 Temporal Cloud 信息
- temporalio/sdk-python —— Python SDK 1,169 ⭐
- temporalio/sdk-go —— Go SDK 958 ⭐
- temporalio/sdk-typescript —— TypeScript SDK 900 ⭐
- temporalio/ui —— Temporal Web UI 430 ⭐
- Temporal vs Airflow(CodeWords) —— 2026 最详细对比
- Temporal vs Airflow(DevJournal) —— 自托管角度
- Cadence GitHub —— Temporal 前身 / 已过时
- Apache Airflow 调研 (WP 306) —— Temporal 的 ” 互补 ” 对比对象
- Dagster 调研 (WP 390) —— 同为编排层
- LoopX 调研 (WP 403) —— AI Agent 专用长程控制面
- 循环工程 4 件套横评 (WP 428) —— AI Agent 循环层
📎 WordPress 链接
- 官方链接:《Temporal 调研:22K stars 的持久执行 workflow 引擎,为什么 6 年老牌开源能跟 Airflow 拼刺刀》
- 短链:
https://east196.cn/?p=429 - WordPress API ID:429
- 状态:published · 2026-08-29