我试图了解 Temporal/Uber Cadence 子工作流程的用例。与简单地将工作流程拆分为函数相比,子工作流程有什么优势?我有一个相当复杂的工作流程,我正在考虑将其拆分为多个子工作流程,但我不确定这样做的利弊。
- 子工作流可以由不包含父工作流代码的一组单独的工作人员托管。因此,它将充当可以从多个其他工作流程调用的单独服务。
- 单个工作流程的大小是有限的。例如,它无法执行 100k 活动。子工作流程可用于将问题划分为更小的块。一位家长有 1000 个孩子,每个孩子执行 1000 个活动,相当于执行了 100 万个活动。
- 子工作流可用于管理某些资源,并使用其 ID 来保证唯一性。例如,管理主机升级的工作流可以为每个主机拥有一个子工作流(主机名是工作流 ID),并使用它们来确保主机上的所有操作都被序列化。
- 子工作流可用于执行一些周期性逻辑,而不会增加父历史记录的大小。父级启动一个子级,该子级执行周期性逻辑,根据需要多次调用 continue ,然后完成。从父级角度来看,它只是一个子工作流调用。
与将所有应用程序逻辑并置在单个工作流中相比,子工作流的主要限制是缺乏共享状态。父级和子级只能通过异步信号进行通信。但是,如果它们之间存在紧密耦合,那么使用单个工作流程并仅依赖于共享对象状态可能会更简单。
如果您的问题在执行的活动和处理的信号数量方面有限制,我个人建议从单个工作流实施开始。它只是比多个异步通信工作流更简单。
人们还经常注意到,工作流不仅仅是函数,您还可以在其中使用 OO 的全部功能。使用结构、接口和其他面向对象技术将逻辑分解为更易于管理的抽象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)