cadence-workflow - Uber Cadence 中的子工作流程有什么好的用例?

标签 cadence-workflow temporal-workflow

我正在尝试使用 Uber Cadence 了解子工作流程的用例。与简单地将工作流程拆分为函数相比,子工作流程的优势是什么?我有一个相当复杂的工作流程,我正在考虑将其拆分为多个子工作流程,但我不确定这样做的利弊。

最佳答案

  • 子工作流可以由不包含父工作流代码的单独一组工作人员托管。因此,它将充当一个单独的服务,可以从多个其他工作流中调用。
  • 单个工作流的大小有限。例如,它不能执行 100k 事件。子工作流可用于将问题划分为更小的 block 。一个 parent 有 1000 个 child ,每个 child 执行 1000 项事件,就会执行 100 万项事件。
  • 子工作流可用于使用其 ID 管理某些资源以保证唯一性。例如,管理主机升级的工作流可以有每个主机的子工作流(主机名是工作流 ID),并使用它们来确保主机上的所有操作都是序列化的。
  • 子工作流可用于执行一些周期性逻辑,而不会破坏父历史大小。父级启动一个子级,该子级执行周期性逻辑调用 continue as new 根据需要多次,然后完成。从父级的角度来看,它只是一个子工作流调用。

  • 子工作流与将所有应用程序逻辑并置在单个工作流中的主要限制是缺乏共享状态。父子只能通过异步信号进行通信。但是,如果它们之间存在紧密耦合,则使用单个工作流并仅依赖共享对象状态可能会更简单。

    如果您的问题在执行事件的数量和处理的信号方面具有一定的规模,我个人建议从单个工作流实现开始。它只是比多个异步通信工作流更简单。

    此外,人们经常注意到工作流不仅仅是函数,您可以在其中使用 OO 的全部功能。使用结构、接口(interface)和其他 OO 技术将逻辑分解为更易于管理的抽象。

    关于cadence-workflow - Uber Cadence 中的子工作流程有什么好的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840458/

    相关文章:

    go - 根据外部(例如用户)输入更改 Uber Cadence sleep 时间

    go - 有没有一种方法可以将字段添加到将提供给工作流中所有事件的工作流上下文中?

    go - Cadence 长时间运行的子工作流程

    go - 如何创建自定义工作流定义?

    java - 如何使 ActivityOptions 在工作流程中具有生命周期动态性

    go - 在 Cadence 工作流程中的循环内调用相同的事件

    cadence-workflow - 在 Cadence/Temporal/iWF 中使用工作流程重置功能的最佳方法是什么?

    python - 如何使用一个事件的返回值(str)作为时间python sdk中第二个事件的输入?

    java - 在java客户端的uber cadence工作流程中取消和重新安排 sleep 时间