一个下单要扣库存、扣钱、发消息,跨多个服务。要么全成要么全败,怎么保证?
一、难点
单体里 @Transactional 一把锁完事;分布式下每个服务自己有库,没有全局事务。
二、2PC(两阶段提交)
- 缺点:同步阻塞、协调者单点、数据锁很久,性能差,少用。
三、TCC(补偿型)
Try(预留资源)→ Confirm(确认)/ Cancel(补偿)。业务自己写三阶段,灵活但侵入强、代码多。
四、Seata(AT 模式)
框架自动:拦截 SQL 生成前后镜像,异常时自动回滚,对业务几乎无侵入。中小型分布式系统首选。
五、怎么选
六、面试速记
七、一句话带走
分布式事务:Seata AT 无侵入最省心,TCC 高并发可定制,2PC 强一致但阻塞。选型先看"能不能接受侵入和性能损耗"。
分布式面试
更多 Java 面试速通,关注公众号持续更新。