文章目录
1. Seata AT
Seata AT模式一种无侵入的分布式事务解决方案
1.1 Seata AT基本原理
Seata AT 事务分两个阶段来管理全局事务:
第一阶段: 执行各分支事务
第二阶段: 控制全局事务最终提交或回滚
1.2 业务场景
1.订单服务保存订单
2.订单服务调用库存服务, 减少商品库存
3.订单服务调用账户服务, 扣减用户金额
AT事物控制三者同时成功, 或者同时失败
1.3 执行各分支事物
TM: 事物管理器,控制全局事物
RM: 资源管理器,控制本地事物
TC: 事物协调器, 就是Seata服务
第一阶段: 启动各分支本地事物订单,库存,账户
- 订单
- 在执行订单业务之前,先启动TM,TM向TC申请开启全局事物
- 全局事物开启会生成一个事物id,xid,TC返回事物id到TM
- 这样全局事物就开启了
- 然后启动RM开启本地事物,接收到TM发送的xid,完成订单业务
- RM管理本地事物通过xid将本地事物纳入全局事物管理,将事物执行结果发送到TC
- TC向TM发送事物状态
- 库存
- RM使用xid,向TC注册,将本地事物纳入全局事物管理
- 执行本地事物,将事物状态发送给TC, TC将状态发送给TM完成当前事物
- 账户
- RM使用xid,向TC注册,将本地事物纳入全局事物管理
- 执行本地事物,将事物状态发送给TC, TC将状态发送给TM
至此三个分支本地事物都完成
第二阶段: 控制全局事物,完成分布式事物提交
- TM收集了所有的分支事物成功状态,向TC发送全局事物提交请求
- TC向所有的RM发送提交操作指令, 完成最终提交
到此,全局事务全部提交完成!
第二阶段: 控制全局事物最终回滚-失败
假设分支事物执行过程中, 如果有一个分支事物失败 , 失败状态上报TC, TC发送状态给TM,
TM会决定全局事物失败, 向TC发送全局事物回滚
TC向所有的RM发送事物回滚请求,RM完成最终回滚操作