Uber Cadence 中子工作流的良好用例是什么?

Max*_*eev 4 cadence-workflow temporal-workflow

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

Max*_*eev 5

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

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

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

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