seata工作原理
2024-09-06 14:59:16 0 举报
seata工作原理
作者其他创作
大纲/内容
UPDATE storage SET count = count - ? WHERE commodity_code = ?
1.开启全局事务
seata-server
3.执行业务逻辑storageService.deduct()
解析SQL语义
获取后置镜像afterlmage
3.2注册分支事务
5.6 定时任务删除回滚对应的全局事务,这个判断通过当前时间和事务创建时间差
RM
storage-service
5、全局回滚
2.2.1向TC发起BranchRegisterRequest请求
提取表元数据
4.1向TC发起GlobalCommitRequest请求
2.4本地事务提交,order表中插入订单数据
上报事务状态
注册分支事务
order
生成undolog信息并缓存
storage
2.1生成前置后置镜像,执行业务sql
1.1向TC发起GlobalBeginRequest请求
undo_log
2.2.3返回分支事务branchld
1.遍历分支事务信息。2.发起rpc调用,通知对应的RM删除undo_log记录3.删除分支事务事务记录、全局锁4.删除全局事务记录
2、执行业务逻辑orderMapper.insert(order)
TM
2.2向TC注册分支事务
3.2.3返回分支事务branchld
SELECT * FROM `order` WHERE (id ) in ( (?) )
storage表
2.3保存undolog信息到undo_log表
3.4本地事务提交,storage表进行更新据
5.4 删除分支事务信息 、释放全局锁
3.2.1向TC发起BranchRegisterRequest请求
定时线程池轮询处理AsyncCommitting任务
更新global_table中status=8对应AsyncCommitting
DataSourceProxy
3.1生成前置后置镜像,执行业务sql
5.3 调用各个分支RM 数据回滚,和undo.log删除
获取前置镜像beforelmage
2.2注册分支事务
5.5 返回GlobalStatus.Rollbacking
5.2 查出全局事务和所有分支事务,处理分支事务
3.3保存undolog信息到undo_log表
order表
4.3返回globalStatus
5.1 向TC发送GlobalRollbackReqeust请求
3.2向TC注册分支事务
执行业务sql
Seata的AT模式:一阶段:开启全局事务、业务数据、回滚日志(undoLog)进行提交、注册分支事务和储存全局锁、二阶段:事务协调者根据所有分支的情况,决定本次全局事务是Commit还是Rollback (二阶段是完全异步) commit: 删除undolog日志,全局事务、分支事务、储存的全局锁 rollback: 删除undolog日志,全局事务、分支事务、储存的全局锁、进行业务回滚
Resource
4.4 删除 undolog信息
TC
order-service
4.提交全局事务
0 条评论
回复 删除
下一页