1.AT模式的脏写问题
我们先回顾一下AT模式的流程,AT模式也分为两个阶段:
第一阶段是记录数据快照,执行并提交事务:
第二阶段根据阶段一的结果来判断:
-
如果每一个分支事务都成功,则事务已经结束(因为阶段一已经提交),因此删除阶段一的快照即可
-
如果有任意分支事务失败,则需要根据快照恢复到更新前数据。然后删除快照
这种模式在大多数情况下(99%)并不会有什么问题,不过在极端情况下,特别是多线程并发访问AT模式的分布式事务时,有可能出现脏写问题,如图:
解决思路就是引入了全局锁的概念。在释放DB锁之前,先拿到全局锁。避免同一时刻有另外一个事务来操作当前数据。