事件驱动架构中的流程建模与模式选择
1. 工作流回滚的复杂性
在对工作流进行建模时,回滚过程的复杂程度不一。例如,如果欺诈验证是第一步,那么可能无需进行任何补偿操作,也不需要回滚过程。在设计 Saga 时,关键是要考虑如何尽量减少回滚的可能性以及所需的补偿操作数量。
导致步骤失败的原因可分为两类:
- 领域验证或业务规则问题 :这种情况下,补偿操作通常足以使系统恢复到可靠状态。
- 技术问题 :如服务离线、无法访问、数据库连接失败或代码缺陷等。例如,在欺诈验证失败后,如果库存服务无法访问,就无法撤销之前 Saga 步骤所做的库存更改。
事件驱动服务的自然解耦和异步特性,使系统对瞬态故障更具弹性,便于构建更可靠的流程。在异步流程中,操作重试更容易,即使重试失败,事件也会持久化在事件流中。只要事件处理是幂等的,就可以重新处理相同的事件。而在同步过程中,Saga 可能会一直等待,直到重试成功,或者需要额外的流程来重试。
2. 事件驱动编排模式
编排模式使用一个主组件来管理流程步骤。这个组件指示其他服务启动新步骤,并在需要时触发补偿操作,类似于监督整个过程并将任务分配给下属服务的主管。
以订单处理为例,订单服务作为编排器,协调库存、定价和运输服务之间的交互。其流程如下:
1. 订单服务接收订单提交请求。
2. 订单服务请求库存服务更改库存。
3. 库存服务处理后发布库存更改事件,订单服务根据该事件推进到下一步,请求定价服务向客户收费。
4. 定价服务处理后发布客户已收费事件,订单服务再请求运
超级会员免费看
订阅专栏 解锁全文
1750

被折叠的 条评论
为什么被折叠?



