Uber Cadence 中的子工作流有什么好的用例?
What is a good use case for a child workflow in Uber Cadence?
我正在尝试了解使用 Uber Cadence 的子工作流的用例。子工作流与简单地将您的工作流拆分为功能相比有什么优势?我有一个相当复杂的工作流程,我正在考虑拆分成多个子工作流程,但我不确定这样做 pros/cons。
- child 工作流可以由不包含 parent 工作流代码的一组单独的工作人员托管。因此它将充当一个单独的服务,可以从多个其他工作流中调用。
- 单个工作流的大小有限。例如,它不能执行 100k 活动。 Child 工作流可用于将问题分成更小的块。一个 parent 有 1000 children 每个执行 1000 个活动给出 100 万个活动执行。
- child 工作流可用于管理某些资源,使用其 ID 来保证唯一性。例如,一个管理主机升级的工作流可以有一个 child 每个主机的工作流(主机名是一个工作流 ID)并使用它们来确保主机上的所有操作都是序列化的。
- child 工作流可用于执行一些周期性逻辑,而不会增加 parent 历史大小。 Parent 启动一个 child 执行周期性逻辑调用 continue as new 根据需要多次,然后完成。从 parent 的角度来看,它只是一个 child 工作流调用。
child 工作流与在单个工作流中并置所有应用程序逻辑相比的主要限制是缺少共享状态。 Parent 和 child 只能通过异步信号进行通信。但是,如果它们之间存在紧密耦合,则使用单个工作流并仅依赖共享 object 状态可能会更简单。
如果您的问题在执行的活动和处理的信号数量方面有限制,我个人建议从单个工作流实施开始。它只是比多个异步通信工作流简单。
此外,工作流不仅仅是功能,您还可以在其中充分利用 OO 的全部功能,这一点也经常受到监督。使用结构、接口和其他 OO 技术将逻辑分解为更易于管理的抽象。
我正在尝试了解使用 Uber Cadence 的子工作流的用例。子工作流与简单地将您的工作流拆分为功能相比有什么优势?我有一个相当复杂的工作流程,我正在考虑拆分成多个子工作流程,但我不确定这样做 pros/cons。
- child 工作流可以由不包含 parent 工作流代码的一组单独的工作人员托管。因此它将充当一个单独的服务,可以从多个其他工作流中调用。
- 单个工作流的大小有限。例如,它不能执行 100k 活动。 Child 工作流可用于将问题分成更小的块。一个 parent 有 1000 children 每个执行 1000 个活动给出 100 万个活动执行。
- child 工作流可用于管理某些资源,使用其 ID 来保证唯一性。例如,一个管理主机升级的工作流可以有一个 child 每个主机的工作流(主机名是一个工作流 ID)并使用它们来确保主机上的所有操作都是序列化的。
- child 工作流可用于执行一些周期性逻辑,而不会增加 parent 历史大小。 Parent 启动一个 child 执行周期性逻辑调用 continue as new 根据需要多次,然后完成。从 parent 的角度来看,它只是一个 child 工作流调用。
child 工作流与在单个工作流中并置所有应用程序逻辑相比的主要限制是缺少共享状态。 Parent 和 child 只能通过异步信号进行通信。但是,如果它们之间存在紧密耦合,则使用单个工作流并仅依赖共享 object 状态可能会更简单。
如果您的问题在执行的活动和处理的信号数量方面有限制,我个人建议从单个工作流实施开始。它只是比多个异步通信工作流简单。
此外,工作流不仅仅是功能,您还可以在其中充分利用 OO 的全部功能,这一点也经常受到监督。使用结构、接口和其他 OO 技术将逻辑分解为更易于管理的抽象。