工作流从无状态切换到有状态的好处

banq


在这篇文章中,描述了工作流应用程序从无状态到有状态设计的演变。

初始无状态设计

  • 最初建立在 Heroku 的免费 dynos(容器)上,它会在传入请求时启动。
  • 由于 Heroku 不提供免费存储,因此使用内存 H2 数据库。
  • 由于缺乏持久存储,工作流必须在一次运行中执行并完成。
  • 转换仅限于从“积压”到“放弃”、“拒绝”或“接受”状态。

迁移到有状态

  • Heroku 取消免费计划后,从 Heroku 迁移到 Scaleway 的免费无服务器容器。
  • 从 H2 移至 Cockroach Cloud 的免费计划以实现持久存储。

重构为新的状态设计,受益于持久存储时释放其真正威力。

借助持久存储,我们可以在任务完成后暂停流程实例,稍后恢复流程。
为此,我们依赖BPMN 术语中的消息:

  • 任务可以流向消息事件。
  • 任务完成后,流程将等待,直到收到消息。
  • 当消息发生时,流程将恢复。
  • 如果您可以发送不同类型的消息,基于事件的网关有助于将流程转发到正确的下一步。

然而,魔鬼潜伏在细节中:任何实例都可以接收消息,我们可以随消息发送业务key。

好处:

  • 通过持久存储,增加了更多状态
  • 引入“reopen”等新状态来处理更复杂的工作流程。
  • 利用状态机来建模和验证不同的转换。