HM-SpringCloud微服务系列9.3【实践:XA模式、AT模式、TCC模式、SAGA模式】


1. XA模式

1.1 原理

1.1.1 XA模式原理

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。

1.1.2 seata的XA模式

seata的XA模式做了一些调整,但大体相似:

1.1.3 小结

  1. XA模式的优点是什么?
    • 事务的强一致性,满足ACID原则。
    • 常用数据库都支持,实现简单,并且没有代码侵入
  2. XA模式的缺点是什么?
    • 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
    • 依赖关系型数据库实现事务

1.2 实现

第一步修改代码





第二步重启服务


第三步测试



正常情况:




异常情况:




ok钱没被扣

2. AT模式

2.1 AT模式原理





2.2 AT模式的脏写问题






出现丢失更新问题,原因就是事务没有做好隔离,解决如下2.3

2.3 AT模式的写隔离





产生死锁:事务1在等待当前属于事务2的DB锁,事务2在等待当前属于事务1的全局锁


此处注意避免与XT模式的混淆:XT模式是数据库锁,锁的力度大,一旦锁定,谁都无法访问被锁数据;此处AT的全局锁是事务协调者TC搞得,力度小,他只是记录事务1(有seata管理),若事务2不是由seata管理的,则可以访问数据,例如修改此表中id=1记录的其他字段






此时,如果事务1直接进行数据恢复将80变为100,则又出现了丢失更新问题
实际上,事务1在保存快照是会保存两份,一份是执行SQL前,一份是之后

2.4 实现AT模式

2.5 小结

  1. 简述AT模式与XA模式最大的区别是什么?
    • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
    • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
    • XA模式强一致;AT模式最终一致
  2. AT模式的优点:
    • 一阶段完成直接提交事务,释放数据库资源,性能比较好
    • 利用全局锁实现读写隔离
    • 没有代码侵入,框架自动完成回滚和提交
  3. AT模式的缺点:
    • 两阶段之间属于软状态,属于最终一致
    • 框架的快照功能会影响性能,但比XA模式要好很多

3. TCC模式

3.1 原理

3.2 实现

4. SAGA模式

4.1 原理

4.2 实现