介绍

:::tips AT模式同样是分阶段提交的事务模型,但是弥补了XA模型中资源锁定周期过长的缺陷

Seata的AT模型流程图
image.png

阶段一RM的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态

阶段二提交时RM的工作:

  • 删除undo-log

阶段二回滚时RM的工作:

  • 根据undo-log恢复数据到更新前

AT模式与XA模式最大的区别:

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源
  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚
  • XA模式是强一致;AT模式是最终一致 :::

    脏写问题

    :::tips 在多线程并发访问AT模式的分布式事务时,有可能出现脏写问题
    image.png

解决思路就是引入了全局锁的概念,在释放DB锁之前,先拿到全局锁,避免同一时刻有另外一个事务来操作当前数据
image.png :::

优缺点

:::tips AT模式的优点

  • 一阶段完成直接提交事务,释放数据库资源,性能比较好
  • 利用全局锁实现读写隔离
  • 没有代码侵入,框架自动完成回滚和提交

AT模式的缺点

  • 两阶段之间属于软状态,属于最终一致
  • 框架的快照功能会影响性能,但比XA模式要好很多 :::