Temporal 是一个开源的分布式工作流编排平台,用于构建可靠、可扩展的后台业务逻辑。

核心思想:让你像写普通代码一样写长时间运行、需要容错的业务流程,不用自己处理失败重试、状态持久化等复杂问题。


🎯 解决什么问题?

传统异步任务的痛点:

❌ 任务执行到一半,服务器崩了 → 状态丢失
❌ 跨多个服务的流程 → 难以追踪
❌ 失败重试逻辑 → 自己写很麻烦
❌ 长时间运行的任务(几小时/几天)→ 难以维护

Temporal 的解决方式:

✅ 自动持久化状态 → 崩了继续跑
✅ 工作流可视化 → 清晰追踪
✅ 内置重试/超时机制 → 开箱即用
✅ 支持运行数天/数月的工作流 → 无压力

🏗️ 核心概念

🔷 Workflow(工作流)

业务流程的主体逻辑,可以运行很长时间,状态自动持久化。

@workflow.defn
class OrderWorkflow:
    @workflow.run
    async def run(self, order_id: str):
        # 即使这里运行几天,中间重启也没问题
        await workflow.execute_activity(process_payment, order_id)
        await workflow.execute_activity(ship_order, order_id)
        await workflow.execute_activity(send_notification, order_id)

🔷 Activity(活动)

具体执行的单个任务单元,比如调用 API、写数据库等。

@activity.defn
async def process_payment(order_id: str):
    # 实际执行的业务逻辑
    result = await payment_service.charge(order_id)
    return result

🔷 Worker(工作者)

执行 Workflow 和 Activity 的进程,可以水平扩展。

🔷 Temporal Server

负责调度、持久化状态、管理任务队列的核心服务。


🏛️ 整体架构

你的代码 (Workflow + Activity)
         ↓
    [ Worker 进程 ]  ←──── 可水平扩展
         ↓ ↑
  [ Temporal Server ]  ←── 调度 + 状态管理
         ↓
    [ 数据库 ]  ←────────── 持久化 (PostgreSQL/Cassandra)
         
  [ Web UI ]  ←──────────── 可视化监控

⚡ 核心特性

特性

说明

🔁 自动重试

Activity 失败自动重试,支持退避策略

💾 状态持久化

工作流状态全程持久化,崩溃后自动恢复

⏱️ 定时器支持

await sleep(days=30) 等待30天继续执行

🔀 并行执行

轻松编排并行任务

🌐 多语言 SDK

Go、Java、Python、TypeScript、.NET

📊 可视化 UI

查看工作流执行历史和状态

🔒 事务保证

工作流步骤不会重复执行或丢失


💡 典型使用场景

场景

示例

🛒 电商订单流程

支付 → 备货 → 发货 → 通知

🤖 AI Agent 编排

多步骤 LLM 调用、工具调用流程

📧 用户生命周期

注册后第1天发邮件、第7天发优惠券

💳 金融对账

复杂的多步骤财务处理

🔄 数据 ETL 流程

大规模数据处理管道

🚀 CI/CD 流水线

构建、测试、部署编排


🆚 与同类工具对比

Temporal

Celery

Airflow

AWS Step Functions

定位

通用工作流

任务队列

数据管道

云原生工作流

长时运行

✅ 原生支持

❌ 弱

⚠️ 有限

✅ 支持

代码方式

纯代码

纯代码

DAG配置

JSON/配置

状态持久化

✅ 自动

❌ 需自己实现

⚠️ 有限

✅ 自动

私有化部署

❌ 仅云端


🚀 快速感受一下

# 一个等待30天后发送邮件的工作流
@workflow.defn
class OnboardingWorkflow:
    @workflow.run
    async def run(self, user_id: str):
        # 发送欢迎邮件
        await workflow.execute_activity(send_welcome_email, user_id)
        
        # 等待7天(服务重启也不影响!)
        await asyncio.sleep(timedelta(days=7))
        
        # 发送使用技巧
        await workflow.execute_activity(send_tips_email, user_id)
        
        # 再等23天
        await asyncio.sleep(timedelta(days=23))
        
        # 发送付费转化邮件
        await workflow.execute_activity(send_upgrade_email, user_id)

💬 总结

Temporal 的核心价值:"让复杂的分布式业务流程,像写本地代码一样简单可靠"

  • 适合业务逻辑复杂、步骤多、需要容错的场景

  • AI Agent、微服务编排领域越来越流行

  • 学习曲线稍陡,但一旦掌握,能解决大量工程难题

官网temporal.io | GitHubtemporalio/temporal