Lon*_*eng 2 cadence-workflow temporal-workflow uber-cadence
在关于工作流程重置的设计中我应该考虑什么?
工作流程重置可能是 Cadence/Temporal 中最强大和最独特的功能。它允许您将任何工作流程执行重置到历史记录的任何先前点,并保留所有信号(默认情况下,但如果指定则可以跳过)以重新应用。
\n以下是将工作流程设计为可重置的最佳实践:
\nActivity(或iWF中的State API)应该是幂等的,并且在重新执行时没有副作用。尽管无论重置,活动都应该是幂等的,但在结果记录到历史记录后,活动将不会重新执行。但是,通过重置,您应该期望活动即使在执行并记录到历史记录之后也可以重新执行,因为工作流程可以随时重置。
\n工作流应该能够处理信号重新应用——这是默认的重置行为,但在某些罕见的情况下您也可以跳过信号重新应用。默认情况下应首选信号重新应用,因为信号通常用作外部数据输入,并且可能很难重新获取。
\n如果1.无法实现,请考虑向self发送信号,以避免重新执行一些非幂等或重新执行时有副作用的逻辑(例如activity)。信号经过专门处理以进行复位。默认情况下保留所有信号。例如,如果您有一个工作流程读取一些数据然后写入一些数据,则重置后,工作流程可能会读取不同的数据以写入数据库,这可能会导致一些副作用。要解决此问题,您可以向自身发送带有读取结果的信号,并在工作流程中处理该信号。
\n或者,考虑使用不同的工作流程对某些未安全重置的逻辑执行操作 \xe2\x80\x94 例如,发出某些指标可能无法安全重置。以便可以在可重置安全的工作流程上执行重置。
\n不要使用 childWorkflow 功能。使用活动来启动其他工作流程作为“子工作流程”。有关更多信息,请参阅我应该使用子工作流程还是使用活动来启动新工作流程。(iWF 不允许您使用 childWF)
\n期望将工作流程重置为最开始(firstDecisionTask/firstWorkflowTask)。尽管允许将工作流程重置到历史记录的任何点,但通常很难找到重置点(eventId),因为很难用工作流程代码解释历史事件。重置为开始可以让您的生活更轻松地重置数千个工作流程。不过,重置到开始时预计会付出一些性能损失。\n(使用iWF查找重置点会容易得多因为 iWF 将使用 stateId 直接将您的业务逻辑与历史 eventId 关联起来)
\n| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |