微服务架构中的数据一致性与相关组件使用指南
1. 订单与库存领域的微服务拆分及一致性问题
在处理订单时,会更新订单所有行项目对应的库存,但有时订单未成功创建,部分行项目的库存会被恢复。当微服务崩溃时,使系统恢复到最终一致状态所需的“引力”消失,系统可能无法达到最终一致性,因为没有使微服务栈状态持久化,导致恢复系统语义一致状态的关键状态丢失。
原本 OrderCommandHandler 中的 handleNewOrder 处理相当于对订单和库存实体进行的 ACID 式操作。但经过重构,代码过渡到 OrderController 中的 createOrder HTTP POST 方法,此处理相当于 BASE 风格,但没有内在的故障转移特性。采用跨订单和库存聚合根实体的 BASE 风格事务后,订单和库存领域可相互独立,必要时可拆分为各自的微服务。
当订单和库存领域拆分为不同微服务时, OrderCommandHandler 、 InventoryCommandHandler 和 OrderController 不再共置。此时,向一个或多个命令处理程序发送并等待的操作需跨网络分区执行,其确定性会丢失。若继续像 InventoryCommandHandler 那样手动建模 BASE 事务,失败的可能性会增加。
2. Saga 事务实现确定性最终一致性
由于 Saga 事务具有以下特性,在这种场景下需要使用 S
超级会员免费看
订阅专栏 解锁全文

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



