(2)查询前镜像
根据解析得到的条件信息,生成查询语句,定位数据 。
select id, name from product where name = 'TXC';得到前镜像:

文章插图
(3)执行业务 SQL
执行自己的业务逻辑:
update product set name = 'GTS' where name = 'TXC';把 name 改为了 GTS 。
(4)查询后镜像
根据前镜像的结果,通过 主键 定位数据 。
select id, name from product where id = 1;得到后镜像:

文章插图
(5)插入回滚日志
把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 UNDO_LOG 表中 。
(6)提交前,向 TC 注册分支:申请 product 表中,主键值等于 1 的记录的 全局锁。
(7)本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交 。
(8)将本地事务提交的结果上报给 TC 。
2.2 二阶段 - 回滚
(1)收到 TC 的分支回滚请求,开启一个本地事务,执行如下操作 。
(2)通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录 。
(3)数据校验
拿 UNDO LOG 中的后镜与当前数据进行比较,根据校验结果决定是否做回滚 。
(4)根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:
update product set name = 'TXC' where id = 1;(5)提交本地事务
【阿里开源的分布式事务框架 Seata】并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC 。
二阶段 - 提交
(1)收到 TC 的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC 。
(2)异步任务阶段的分支提交请求,将异步和批量地删除相应 UNDO LOG 记录 。
3. 小结上面介绍的是 Seata 的 AT 模式,就是自动化事务,使用非常简单,对业务代码没有侵入性 。
不足的地方是目前文档比较少,网上的相关材料也不是很多,所以使用过程中遇到问题时可能就需要自己查看源码,分析原理 。
Seata 还支持 TCC 和 Saga 模式,但支持的主要方式是 AT 。
推荐阅读
- 霍金的研究对世界的影响 霍金人工智能100年内取代人类
- 埃及金字塔的历史价值 金字塔是什么时候发现的
- 成绩 SUM,这样的excel用法,你会了吗?高手必备
- 南非叶药用功效图片,南非叶的功效与作用
- 勿忘我花茶搭配枸杞的功效,勿忘我花茶的功效与作用
- 常见的100种玉露,娇贵的玉露这样养
- 牡丹花茶多少钱盒,牡丹花茶的功效与作用茶
- 玳玳花泡水喝的功效与作用,玳玳花有什么作用页
- 紫苏藿香茶,白芷藿香茶的好处有哪些
- 玉兰花泡水有什么作用,玉兰花的功效作用有哪些
