SpringBoot + 本地事务表 + 定时扫描补偿:轻量级方案实现最终一致性,无中间件依赖
前言 在分布式系统中,数据一致性是一个永恒的话题。传统的分布式事务解决方案如 Seata、XA 等往往需要引入重量级中间件,增加了系统复杂度和运维成本。 本文将介绍一种轻量级的最终一致性方案——本地事务表 + 定时扫描补偿,该方案: 零中间件依赖:不需要 MQ、Seata 等外部组件 实现简单:基于数据库表和定时任务 可靠性高:通过本地事务保证数据一致性 易于理解:符合直觉的设计模式 一、分布式事务问题分析 1. 典型业务场景 ┌─────────────────────────────────────────────────────────────┐ │ 订单支付业务流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户下单 ──▶ 创建订单 ──▶ 扣减库存 ──▶ 扣减余额 ──▶ 发送通知 │ │ │ │ 问题: │ │ 1. 订单创建成功,库存扣减失败怎么办? │ │ 2. 库存扣减成功,余额扣减失败怎么办? │ │ 3. 余额扣减成功,通知发送失败怎么办? │ │ 4. ....