我们如何为Cloudflare工作流程构建SAGA回滚

Cloudflare Workflows是我们用于多步骤应用程序的持久执行引擎,现在支持传奇风格的回滚,允许开发人员为每个step.do ()指定补偿操作。

Cloudflare Workflows允许您通过内置的重试和跨长期运行的流程的状态持久性来构建耐用的多步骤应用程序。当工作流执行时,每个步骤都可以调用外部系统,重试失败,并在重启后保持状态。但是,如果一个步骤失败,它可能会使已完成步骤的早期工作处于不一致或部分状态。

今天,我们将为工作流程提供SAGA回滚,允许您在失败的情况下在步骤本身中声明回滚逻辑。例如,考虑在两家不同银行的账户之间转账的工作流程:向两位账户所有者发送确认电子邮件如果第2步(银行B账户的贷方)失败,会发生什么情况?一旦在银行A成功扣款,交易即被提交,资金已离开其系统。

作为交易的协调者,您不能简单地“撤消”银行A系统中的操作。相反,这笔钱必须通过语义上颠倒第一个银行账户的新操作返还给银行A的账户。这种操作及其补偿逻辑的配对称为SAGA模式。

在今天之前,开发人员必须实施自己的补偿逻辑,以跟踪在步骤的直接定义之外的成功、失败以及失败时应采取的操作。现在,您可以将每个step.do ()的补偿逻辑定义为步骤本身中的参数,从而保持工作流对回滚的持久性。

要使用回滚,只需将包含回滚函数的options对象作为最后一个参数传递给step.do ()即可。回滚函数应该是幂等的,就像常规工作流步骤一样。如果您退款,请使用支付提供商的幂等密钥。如果您发布库存,请让发布安全地调用多次。如果任何步骤失败,回滚处理程序将按相反的步骤启动顺序执行。