Cadence 是一个开源的分布式工作流编排平台(现已被 Uber 开源并演进为 Temporal) Cadence 是一个开源的分布式工作流编排平台现已被 Uber 开源并演进为 Temporal用于构建高可靠、可伸缩、可观察的长期运行业务流程如订单履约、支付对账、数据管道等。其核心思想是将业务逻辑与底层基础设施解耦通过“工作流Workflow”和“活动Activity”抽象来实现容错、重试、超时、补偿、版本兼容等能力。Cadence 客户端Cadence Client是开发者与 Cadence 服务交互的 SDK支持多种语言Go、Java、Python、PHP 等主要功能包括启动/查询/终止工作流实例实现工作流逻辑声明式、确定性执行实现活动函数执行实际业务操作支持重试、超时、心跳处理信号Signal、等待条件Wait for Event、定时器Timer等集成可观测性日志、指标、追踪支持工作流版本升级通过WorkflowVersion或变更历史事件实现向后兼容。⚠️ 注意Cadence 已于 2020 年正式演进为Temporal由原团队主导Cadence 项目已归档GitHub 标记为archived官方推荐新项目使用 TemporalAPI 兼容性强但有增强和改进。因此“Cadence 工作流客户端”在当前实践中通常指 Temporal 的对应 SDK如temporalio/sdk-go。示例Go 客户端启动工作流client,err:client.NewClient(client.Options{HostPort:localhost:7233,Namespace:default,})iferr!nil{log.Fatal(err)}workflowOptions:client.StartWorkflowOptions{ID:example-workflow-id,TaskQueue:hello-world,}we,err:client.ExecuteWorkflow(context.Background(),workflowOptions,YourWorkflow,World)iferr!nil{log.Fatal(err)}log.Println(Started workflow,we.GetID(),we.GetRunID())Cadence 与 Temporal 的关系是演进继承关系Temporal 是由 Cadence 原核心团队来自 Uber在 2019 年 fork 并重构的下一代工作流引擎于 2020 年正式发布。Cadence 项目已于 2021 年在 GitHub 上标记为archived归档不再接受新功能开发仅维持极有限的安全补丁截至 2024 年已完全停止维护。Temporal 不是简单“重命名”而是从架构、API、可观测性、运维体验到社区生态的全面升级。✅ 主要区别对比维度CadenceTemporal项目状态已归档Archived不再维护活跃开源Apache 2.0持续迭代v1.x 稳定版v2.x 开发中核心架构基于 Cassandra/MySQL 自研服务层支持多后端Cassandra、PostgreSQL、MySQL、SQLite、Memory默认推荐 PostgreSQL引入更健壮的历史事件分片History Sharding和可插拔的可见性存储Visibility Store客户端 SDK各语言 SDK 功能完整但 API 设计较早期如 Go 中workflow.ExecuteActivity需手动传 contextSDK 更现代化Go 中支持workflow.Context封装、Java 支持注解驱动WorkflowMethod、Python 提供异步/同步双模式API 兼容 Cadence90% 接口可平移但有语义增强如ContinueAsNew行为更安全版本管理与升级依赖开发者手动管理WorkflowVersion和GetVersion()引入更细粒度的变更检测机制Change History和workflow.GetInfo().GetVersion()增强版支持零停机灰度升级可观测性与运维基础指标Prometheus、日志、Web UICadence Web功能有限内置丰富指标OpenTelemetry 兼容、分布式追踪Jaeger/Zipkin、增强 Web UITemporal Web、CLI 工具更强大tctl→temporalCLI支持多租户 Namespace 级配额与策略高可用与伸缩性需手动配置服务分片集群扩缩容复杂原生支持水平扩展Frontend/Matching/History/Worker 服务解耦自动负载均衡与故障转移更成熟社区与生态社区活跃度下降文档陈旧第三方集成少CNCF 毕业项目2023拥有庞大活跃社区、丰富教程、商业支持Temporal Cloud / Self-Hosted Enterprise、大量云厂商集成AWS/Azure/GCP 迁移路径Cadence → Temporal评估与准备检查当前 Cadence 版本建议 ≥ v0.18.0确认后端存储类型Cassandra/MySQL是否被 Temporal 支持均支持但需适配 schema使用 Temporal Migration Tool官方提供校验兼容性并生成迁移报告。环境替换部署 Temporal ServerDocker/K8s/Helm初始化数据库运行temporal-sql-tool或temporal-cassandra-tool不建议直接复用 Cadence 数据库虽结构相似但 Temporal 对历史事件格式、索引、元数据有增强官方推荐新建集群 数据迁移仅必要历史或冷启动。代码适配最小改动替换依赖如 Go 中go.uber.org/cadence→go.temporal.io/sdkJava 中com.uber.cadence→io.temporal更新 import 路径、客户端初始化client.NewClient()参数略有调整如Namespace必填检查并更新workflow.RegisterWorkflow/activity.RegisterActivity注册方式Temporal 更强调类型安全ContinueAsNew、信号处理、定时器等行为保持一致但建议启用EnableLoggingInReplay调试确定性问题。验证与上线利用 Temporal Web UI 查看工作流执行历史、重放Replay调试非确定性错误启用 OpenTelemetry 追踪比对 Cadence 日志采用蓝绿/金丝雀发布先将新工作流流量切至 Temporal旧 Cadence 实例只读保留一段时间用于审计。 官方迁移指南https://docs.temporal.io/dev-guide/go/migrate-from-cadence⚠️ 注意Temporal不兼容 Cadence 的 gRPC 接口 wire 协议因此服务端必须整体切换客户端 SDK 升级即生效。