『』分布式事务如何实现?深入解读 Seata 的 XA 模式
作者简介:煊檍 , GitHub ID:sharajava , 阿里巴巴中件间 GTS 研发团队负责人 , SEATA 开源项目发起人 , 曾在 Oracle 北京研发中心多年 , 从事 WebLogic 核心研发工作 。 长期专注于中间件 , 尤其是分布式事务领域的技术实践 。
Seata 1.2.0 版本重磅发布新的事务模式:XA 模式 , 实现对 XA 协议的支持 。
这里 , 我们从三个方面来深入解读这个新的特性:
- 是什么(What):XA 模式是什么?
- 为什么(Why):为什么支持 XA?
- 怎么做(How):XA 模式是如何实现的 , 以及怎样使用?
这里有两个基本的前置概念:
- 什么是 XA?
- 什么是 Seata 定义的所谓 事务模式?
1.1 什么是 XA?
XA 规范 是 X/Open 组织定义的分布式事务处理(DTP , Distributed Transaction Processing)标准 。
XA 规范 描述了全局的事务管理器与局部的资源管理器之间的接口 。XA规范 的目的是允许的多个资源(如数据库 , 应用服务器 , 消息队列等)在同一事务中访问 , 这样可以使 ACID 属性跨越应用程序而保持有效 。
XA 规范 使用两阶段提交(2PC , Two-Phase Commit)来保证所有资源同时提交或回滚任何特定的事务 。
XA 规范 在上世纪 90 年代初就被提出 。 目前 , 几乎所有主流的数据库都对 XA 规范 提供了支持 。
1.2 什么是 Seata 的事务模式?
Seata 定义了全局事务的框架 。
全局事务 定义为若干 分支事务 的整体协调:
- TM 向 TC 请求发起(Begin)、提交(Commit)、回滚(Rollback)全局事务 。
- TM 把代表全局事务的 XID 绑定到分支事务上 。
- RM 向 TC 注册 , 把分支事务关联到 XID 代表的全局事务中 。
- RM 把分支事务的执行结果上报给 TC 。 (可选)
- TC 发送分支提交(Branch Commit)或分支回滚(Branch Rollback)命令给 RM 。
本文插图
Seata 的 全局事务 处理过程 , 分为两个阶段:
- 执行阶段 :执行 分支事务 , 并 保证 执行结果满足是可回滚的(Rollbackable)和持久化的(Durable) 。
- 完成阶段: 根据 执行阶段 结果形成的决议 , 应用通过 TM 发出的全局提交或回滚的请求给 TC , TC 命令 RM 驱动 分支事务 进行 Commit 或 Rollback 。
不同的 事务模式 区别在于 分支事务 使用不同的方式达到全局事务两个阶段的目标 。 即 , 回答以下两个问题:
- 执行阶段 :如何执行并 保证 执行结果满足是可回滚的(Rollbackable)和持久化的(Durable) 。
- 完成阶段: 收到 TC 的命令后 , 如何做到分支的提交或回滚?
AT 模式
本文插图
- 执行阶段:
- 可回滚:根据 SQL 解析结果 , 记录回滚日志
- 持久化:回滚日志和业务 SQL 在同一个本地事务中提交到数据库
- 完成阶段:
- 分支提交:异步删除回滚日志记录
- 分支回滚:依据回滚日志进行反向补偿更新
- 海峡生活汇印度对中国虎视眈眈,我国将如何迎接挑战,英国仍想着事后清算
- JEECG前端Chrome调试小技巧汇总
- 夏课好微服务系列——分布式核心知识
- 购房置业▲社保未缴满15年如何补救,这4种方式都可以,劝你不要选第4个
- 崔元新不输当前5G新机的4款旧旗舰,你如何选择呢?,新一轮降价潮
- 讲故事的女人是如何对待她们的?说出来你绝对不敢相信,萨达姆俘虏美国女兵后
- 我家的猫叫皮蛋台积电急了,纯国产芯片来了,华为设计,中芯生产你如何评价?,ASML断供失效
- 聚成教育Excel表格技巧—Excel 如何给文字加拼音
- 聚成教育PPT演示技巧—如何快速将 PPT 的字体统一为微软雅黑
- 成华普法成华区瀛领禾石律师事务所设立诉讼服务站