temporal.io如何与cadenceworkflow.io?如果根据节奏工作流服务启动一个新项目,应该使用什么?
我来自优步的Cadence团队,我想让您知道,Cadence将继续由我们的团队积极开发。下面是我们最近与Cadence社区分享的更新的一部分:
我们想强调优步的Cadence团队致力于Cadence项目的增长和开源开发。今天,Cadence为优步内部100个不同的用例提供支持,而且这个数字增长迅速。总的来说,平均任何时候都有50M正在进行的执行,我们的客户每月完成3B次执行。在优步之外,我们还知道许多公司的许多工程团队已经在他们的关键业务工作流程中采用了Cadence。我们很高兴继续以向后兼容的方式将Cadence发展为一个开源项目,并在短期内更加关注可靠性、可扩展性和可运维性。
现在比较节奏和时间可能还为时过早。尽管如此,我对如何系统地阐明Cadence的路线图有一些想法,以确保所有必要的信息都在那里,以便将来进行这样的比较。当我们创建包含有关路线图信息的页面时,我将使用链接更新此帖子。
同时,如果您需要更多关于Cadence的信息,请告诉我。
事实是两者都在积极开发中。如果看他们的路线图,你可以看到他们有一些不同的侧重点。这两个项目有着相同的愿景,让每个人都重新思考长期运行业务的编程模型。
Cadence作为一个开源项目更加成熟。开发涉及来自世界各地的许多贡献者。
如果您有多个Cadence集群,这允许跨不同集群和域启动子WF。
gRPC 支持完全在服务器端完成。内部流量都使用 gRPC,我们正在努力让用户从节俭迁移到 gRPC。
权限基于域,但可以扩展。与 Temporal 不同,权限策略可以存储在 Cadence 域数据存储中,这样您就不必构建其他服务/存储来管理它们。请注意,整个提案由社区成员开发。
工作流阴影是建立在工作流播放器之上,以解决这个问题。隐藏的基本思想是:基于您定义的过滤器扫描工作流,从Cadence服务器的扫描结果中获取每个工作流的历史记录,并运行重放测试。它既可以作为测试运行以服务于本地开发目的,也可以作为工作流在您的worker中运行以连续重放生产工作流。
这允许XDC(多集群)模式减少故障切换期间重新运行某些任务的痛苦。
这允许以最小的方式实现不同的NoSQL持久性。在写这篇文章的时候,Temporal还没有开始研究它。
在非关系型数据库接口之上,MongoDB支持正在进展中。
这允许用户拥有一个规模更大的Cadence集群。(然后使用 XDC 添加更多数据库实例)
这使我们能够在不进行任何部署的情况下更改动态配置(如速率限制)。仅仅一个CLI命令就可以控制系统的行为。
它正在实验中,生产准备工作仍在进展中。
一个WIP生态系统项目,允许从卡登斯获得通知。这就是凯德使用Kafka传递可见性消息的好处。时态不使用Kafka,这将非常难以支持此功能。
免责声明:我是Cadence项目的原始联合创始人和技术负责人,目前是Temporal Technologies的联合创始人/首席执行官。
temporal.io 是Cadence项目的原始创始人和技术负责人马克西姆·法捷耶夫和萨马尔·阿巴斯的Cadence项目的分叉。该分叉是完全开源的,与Cadence相同的MIT(在Apache 2.0下有一些SDK)许可证。我们创办了时域科技并获得了风险投资资助,因为我们相信,我们通过 AWS 简单工作流程、持久任务框架和 Cadence 项目开创的编程模型具有远远超出单一公司的潜力。拥有一个商业实体来推动项目向前发展对于项目的寿命至关重要。
暂时的。io fork具有Cadence的所有特征,因为它不断地从中融合。它还实现了多个新功能。
以下是Cadence和Temporal在时间分叉初始发布时的一些技术差异。
所有节俭的结构都被原型结构所取代
Cadence的所有公共API都依赖于Thrift。Thrift对象也以序列化的形式存储在DB中。
时态将所有这些结构转换为协议缓冲区。这包括存储在数据库中的对象。
通信协议从TChannel切换到gRPC
Cadence依赖于优步开发的基于TCP的多路复用协议TChannel。TChannel有很多限制,比如不支持任何安全性,语言绑定数量非常有限。即使在优步,它也基本上被弃用了。
Temporal使用gRPC进行所有进程间通信。
TLS支持
Cadence不支持任何通信安全,因为它是TChannel的一个限制。
Temporal 支持双向 TLS,并将在将来支持更高级的身份验证和授权功能。
简化配置
时态重新设计了服务配置。其中一些最令人困惑的部分被删除了。例如,无需配置成员资格种子。在临时模式下,每个主机在启动时向数据库注册自身,并将数据库中的列表用作种子列表。
释放管道
Cadence不会测试任何公开发布的工件,包括 Docker 映像,因为其内部发布管道仅确保内部构建工件的质量。它也不会对Uber中未使用的依赖项执行任何发布测试。例如,MySQL集成除了相当不完整的单元测试之外没有进行测试。这同样适用于 CLI 和其他组件。
Temporal在发行过程中投入了大量资金。所有的工件,包括一个完全支持的依赖矩阵,都将通过一个完整的发布管道,其中将包括多天的压力运行。
发布过程的另一个重要部分是为生产问题生成补丁的能力。对于任何在生产环境中运行Temporal的人来说,能够确保这些补丁的质量并及时生成所有必要的工件是非常重要的。
有效负载元数据
Cadence 将活动输入和输出以及其他有效负载存储为二进制 Blob,而无需任何关联的元数据。
Temporal允许将元数据与每个有效负载相关联。它支持动态可插拔序列化机制、无缝压缩和加密等功能。
故障传播
在 Cadence 中,活动和工作流故障建模为单个二进制负载和字符串原因字段。只有 Java 客户机支持跨工作流和活动边界链接异常。但这种链接依赖于脆弱的GSON序列化,不适用于其他语言。
时态活动和工作流失败被建模为protobufs,并且可以跨在不同SDK中实现的组件进行链接。例如,单个失败跟踪可以包含由异常引起的链,该异常源于用Python编写的活动,通过Go子工作流传播到Java工作流,然后传播到客户端。
转到开发工具包
时态对踏频Go客户端实现了以下改进:
JavaSDK
Temporal对Cadence Java客户端进行了以下改进:
踏频不支持的软件开发工具包
PHP SDK,Typescript SDK,
正在积极开发的软件开发工具包
Python SDK,。NET SDK
时间云
时态科技通过提供托管版本的时态服务,通过项目获利。有几十家公司(包括SNAP)已经在生产中使用它。
其他的
我们已经计划了很多其他语言的特性和客户端SDK。你可以在临时社区论坛找到我们。
可以运行不需要连接到cadence服务器的本地活动。是否有适当的方式在本地运行工作流,以防发生cadence中断?我正在使用Go客户端。
这可以被认为是在节奏工作流的循环中调用相同活动的后续问题:在活动迭代的情况下,工作流如何恢复?是继续调用第i个活动(跳过已经调用的活动)还是从0重新开始?如果是这样,如何编写工作流以跳过调用的活动(0-'k')?
每个工作流都应在单独的工作流类中实现? 是否建议实现一个通用工作流类,在该类中,我们将使用传递给工作流的参数调用活动和触发计时器? 在我们的用例中,我们将从UI创建工作流,它将由最终用户创建。所以我们不能一开始就定义我们的工作流程。 这是推荐的方法吗?
我有一个包含多个活动的工作流1,2,3…6,如果我的工作流在活动3之后因某个特定异常而失败,我计划启动一个子工作流,最终修复该异常。之后,我想重试父工作流以完成完整的流程。 我可以在子工作流中使用什么来实现上述场景? 我尝试查看具有< code>ContinueAsNew的工作流界面,该界面将创建一个新的工作流,并再次执行所有活动。
假设我们需要在用户完成购物车后生成订单。 这是我们生成订单的步骤: 生成一个处于挂起状态的订单(订单微服务) 授权用户信用(会计微服务) 将购物车的状态设置为关闭(购物车微服务) 批准订单(订单微服务) 为此,我们只需创建一个节奏工作流,为每个步骤调用一个活动。 问题1:如果用户再次打开购物车或刷新页面,客户端如何检测到购物车正在创建订单?(注意:假设我们的工作流还没有被工人执行) 我的问题1解决
在https://cadenceworkflow.io/docs/03_concepts/02_activities#activity-task-routing-through-task-lists的留档中,它提到通过每个优先级有一个任务列表和每个优先级有一个工作池来支持多个优先级。在这种实现下,可能仍然有低优先级的工作流在高优先级工作流之前执行。 是否可以实现一个优先级系统,以便在流向高优先级工