首页 > 解决方案 > 时间工作流程与节奏工作流程

问题描述

temporal.io 与 cadenceworkflow.io 有什么关系?如果根据 cadence 工作流服务启动一个新项目,应该使用什么?

标签: cadence-workflowtemporal-workflow

解决方案


免责声明:我是 Cadence 项目的原始联合创始人和技术负责人,目前是 Temporal Technologies 的联合创始人/首席执行官。

temporal.io是 Cadence 项目的分支,由 Cadence 项目Maxim FateevSamar Abbas的原始创始人和技术负责人组成。该分支在与 Cadence 相同的 MIT(一些 SDK 在 Apache 2.0 下)许可下是完全开源的。我们创办了 Temporal Technologies 并获得了 VC 资金,因为我们相信我们通过AWS Simple WorkflowDurable Task Framework和 Cadence 项目开创的编程模型具有远远超出单个公司的潜力。拥有一个商业实体来推动项目的发展对于项目的寿命至关重要。

temporal.io 分支具有 Cadence 的所有功能,因为它不断地从中融合。它还实现了多个新功能。

以下是 Cadence 和 Temporal 在 Temporal 分叉初始发布时的一些技术差异(预计在 05/2020 达到生产状态)

所有 thrift 结构都被 protobuf 取代

Cadence 的所有公共 API 都依赖于 Thrift。Thrift 对象也以序列化的形式存储在 DB 中。

Temporal 将所有这些结构转换为Protocol Buffers。这包括存储在数据库中的对象。

通信协议从 TChannel 切换到 gRPC

Cadence 依赖于TChannel,这是 Uber 开发的基于 TCP 的多路复用协议。TChannel 有很多限制,例如不支持任何安全性以及语言绑定数量非常有限。即使在优步,它也基本上被弃用了。

Temporal 使用gRPC进行所有进程间通信。

TLS 支持

Cadence 不支持任何通信安全,因为它是 TChannel 的限制。

Temporal 支持双向 TLS,未来将支持更高级的身份验证和授权功能。

简化配置

Temporal 重新设计了服务配置。其中一些最令人困惑的部分已被删除。例如,无需配置成员种子。在时间上,每个主机在启动时都会向数据库注册自己,并使用数据库中的列表作为种子列表。

发布管道

Cadence 不测试任何公开发布的工件,包括 docker 镜像,因为其内部发布管道仅确保内部构建工件的质量。它也不会对 Uber 内部未使用的依赖项执行任何发布测试。例如,除了不完整的单元测试之外,不会对 MySQL 集成进行测试。这同样适用于 CLI 和其他组件。

Temporal 正在对发布过程进行大量投资。包括完整支持的依赖矩阵在内的所有工件都将通过完整的发布管道进行处理,该管道将包括多天的压力运行。

发布过程的另一个重要部分是为生产问题生成补丁的能力。确保此类补丁的质量并及时生成所有必要工件的能力对于在生产中运行 Temporal 的任何人都很重要。

有效载荷元数据

Cadence 将活动输入和输出以及其他有效负载存储为二进制 blob,而没有任何关联的元数据。

时间允许将元数据与每个有效负载相关联。它支持动态可插入序列化机制、无缝压缩和加密等功能。

故障传播

在 Cadence 中,活动和工作流故障被建模为单个二进制有效负载和字符串原因字段。只有 Java 客户端支持跨工作流和活动边界链接异常。但是这种链接依赖于脆弱的 GSON 序列化,并且不适用于其他语言。

临时活动和工作流故障被建模为 protobuf,并且可以在不同 SDK 中实现的组件之间链接。例如,单个故障跟踪可以包含由异常引起的链,该异常源自用 Python 编写的活动,通过 Go 子工作流传播到 Java 工作流,然后传播到客户端。

去 SDK

Temporal 对 Cadence Go 客户端进行了以下改进:

  • Protobuf 和 gRPC
  • 没有活动和工作流类型的全局注册
  • 能够向工作人员注册活动结构实例。它极大地简化了将外部依赖项传递给活动的过程。
  • 允许通过外部配置文件配置超时等功能的工作流和活动拦截器。
  • 活动和工作流类型名称不包括包名称。这使得在不破坏更改的情况下进行代码重构变得更加简单。
  • Cadence 要求的大多数超时现在都是可选的。
  • 工作流.Await 方法

Java SDK

Temporal 对 Cadence Java 客户端进行了以下改进:

  • 工作流和活动注释允许活动和工作流实现对象实现非工作流和活动接口。这对于使用像 Spring 这样的 AOP 框架很重要。
  • 多态工作流和活动接口。这允许在多个活动和工作流类型之间拥有一个通用接口。
  • 信号和查询处理程序的动态注册。
  • 允许通过外部配置文件配置超时等功能的工作流和活动拦截器。
  • 改进了活动和工作流类型名称生成

PHP SDK Cadence 不支持 PHP。Temporal 最近发布了PHP SDK

Typescript SDK Temporal 发布了Typescript SDK的 alpha 版本。

我们计划了许多其他语言的其他功能和客户端 SDK。您可以在Temporal Community Forum找到我们。


推荐阅读