术语

TM(transaction manage)事务管理器: 分布式事务的发起和终结者,负责提交和回滚全局事务。

TC(transaction coordinatorr)事务协调器: 协调全局事务和本地事务的运行。

RM(resource manage)资源管理器:本地事务的运行。

分布式事务执行流程

1. Business服务为TM 向TC申请创建全局事务和创建XID。

2. TM获取XID后,携带XID进行远程调用。

3. 各本地事务获取到XID后,创建本地事务后与TC通信报告本地事务执行结果

4. TM根据TC返回结果决定全局事务的提交还是回滚。

5. TC调度XID下所有的本地事务进行提交或回滚。

事务模式 - AT(默认)

mysql回滚表结构

上图中的stock服务,执行了update product set name = 'GTS' where name = 'TXC'; ,内部执行步骤如下

第一阶段:更新语句与本地事务提交,并把结果反馈给TC

1. 解析SQL, 获取表product, 类型update、条件name = 'TXC'

2. 查询SQL, 获取查询前的镜像 select id,name , since from product;

3. 执行update

4. 查询更新后的镜像  select id,name , since from product;

5. 回滚语句插入回滚表,包含修改前和修改后的值。

6. 提交update和事务,并把提交结果报告给TC

第二阶段:

本地事务有回滚,则全局事务回滚。本地事务根据回滚log表再开启事务执行回滚语句并把执行接口告知TC.

无回滚,则删除本地回滚语句。

写隔离设计

原因:回滚查询log的时候可能修改后的值被别人改了,这样就需要设置锁保证数据一致性。

tx1 tx2两个事务都需要对a表中的m列进行修改,正常的执行步骤如下

1. tx1先获取本地锁 执行update语句,等待获取全局锁就能提交,释放本地锁。

2. tx2获取本地锁 执行update语句,等待获取全局锁。

3. tx1全局锁释放后,tx2才能获取到全局锁,才能提交并且释放本地锁。

参考:https://blog.csdn.net/qq1309664161/article/details/126548748

事务模式 - XCC

事务模式 - SAGA

事务模式 - XA

最新文章

  1. Python3中的字符串函数学习总结
  2. nyoj756_重建二叉树_先序遍历
  3. 【61测试】【dp】【二分】【前缀和】【树剖】
  4. 二模 06day2
  5. Moving in Unity
  6. python参考手册--第9章
  7. python面向对象高级编程
  8. 对Ul下的li标签执行点击事件——如何获取你所点击的标签
  9. Java加深理解有关注释
  10. Shell 获取当前执行脚本的路径
  11. vue的Virtual Dom实现- snabbdom解密
  12. Java 9 揭秘全目录汇总
  13. 修改wamp中mysql的默认空密码
  14. 字符串压缩 stringZip
  15. Python学习之路基础篇--10Python基础,函数进阶
  16. mmap 操作
  17. dp算法之平安果路径问题c++
  18. vs2012旗舰版 有效注册密钥
  19. spring mvc接收数组
  20. HttpWebRequest 返回BadRequest(400) 同时返回Response

热门文章

  1. JZOJ 1166. 树中点对距离
  2. [COCI2010-2011#6] STEP
  3. 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开(转部分内容)
  4. C# HttpClient 上传大文件带进度
  5. springbooot 序列化对象配置
  6. [Maven] 引入依赖以后如果标红怎么办
  7. Ubuntu安装系统监视器system-monitor并显示在状态栏(火狐浏览器)
  8. 面试不愁,给你一份SpringBoot常用注解
  9. JS日期时间增加减少
  10. SpringBoot 自定义启动的logo(即banner)