在 Seata AT 模式下,解决全局事务并发导致的脏写(Dirty Write)问题的核心机制是:全局锁(Global Lock) + 本地数据校验(Undo Log Image 对比)。 要理解这个机制,首先需要明白为什么在 AT 模式下会产生脏写风险。 一、 为什么 AT 模式会有脏写风险? Seata AT 模式是一个改进版的两阶段提交(2PC): 一阶段(Phase 1): 执行业务 SQL,生成 Undo Log,然后直接提交本地数据库事务,释放本地数据库的行锁。 二阶段(Phase 2): 如果全局事务提交,则异步清理 Undo Log;如果全局事务回滚,则通过 Undo Log 反向补偿数据。 风险点在于: 一阶段提交后,本地数据库锁已经释放。此时,如果另一个事务(全局或本地)来修改同一行数据,并在当前全局事务的二阶段回滚之前提交了修改。当当前全局事务需要回滚时,就会把别人的修改覆盖掉,从而产生脏写。 --- 二、 Seata 是如何解决脏写的? Seata 主要通过以下三层防线来彻底解决或拦截脏写问题: 第一层防线:全局锁(Global Lock)—— 针对“全...