springcloud3 分布式事务解决方案seata之AT模式5

一 seata的AT模式

1.1 AT模式与XA模式

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。

  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。

  • XA模式强一致;AT模式最终一致

1.2 AT模式原理

一阶段

1)TM发起并注册全局事务到TC
2)TM调用分支事务
3)RM进行注册分支事务、记录undo-log(数据快照)、执行业务sql并提交、报告事务状态
二阶段
1)TM通知TC事务结束
2)TC检查分支事务状态
  a)如果都成功,则立即删除快照
  b)如果有分支事务失败,需要回滚。读取快照数据undo.log,将快照恢复到数据库

springcloud3 分布式事务解决方案seata之AT模式5_第1张图片1.3  AT的优缺点

AT模式的优点:

  • 一阶段完成直接提交事务,释放数据库资源,性能比较好

  • 利用全局锁实现读写隔离

  • 没有代码侵入,框架自动完成回滚和提交

AT模式的缺点:

  • 两阶段之间属于软状态,属于最终一致

  • 框架的快照功能会影响性能,但比XA模式要好很多

二  seata的操作案例

2.1  工程结构

springcloud3 分布式事务解决方案seata之AT模式5_第2张图片

2.2  设置切换seata模式

1.account

springcloud3 分布式事务解决方案seata之AT模式5_第3张图片

2.order:

springcloud3 分布式事务解决方案seata之AT模式5_第4张图片

3.storage

 springcloud3 分布式事务解决方案seata之AT模式5_第5张图片

2.3  附件数据库

springcloud3 分布式事务解决方案seata之AT模式5_第6张图片

springcloud3 分布式事务解决方案seata之AT模式5_第7张图片

2.4 启动nacos,seata 

1.启动nacos

springcloud3 分布式事务解决方案seata之AT模式5_第8张图片

2.启动seata

springcloud3 分布式事务解决方案seata之AT模式5_第9张图片

2.5 测试

2.5.1 初始态数据表

springcloud3 分布式事务解决方案seata之AT模式5_第10张图片

2.5.2 正常下订单

1.请求地址: http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=2&money=200

2.访问

springcloud3 分布式事务解决方案seata之AT模式5_第11张图片查看控制台:正常显示

springcloud3 分布式事务解决方案seata之AT模式5_第12张图片 

查看数据表:正常扣减 

springcloud3 分布式事务解决方案seata之AT模式5_第13张图片 

2.5.3 大于库存量下单

1.请求

http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=20&money=200

2.访问地址

springcloud3 分布式事务解决方案seata之AT模式5_第14张图片

3.查看控制台:进行回滚

springcloud3 分布式事务解决方案seata之AT模式5_第15张图片

查看数据表: 数据均回滚,没有脏数据。实现分布式事务功能,进行回滚

springcloud3 分布式事务解决方案seata之AT模式5_第16张图片

你可能感兴趣的:(springcloud3,分布式)