当前位置: 首页 > news >正文

XA、AT、TCC、SAGA二阶段提交分布式事务学习笔记

1.概念

  • 全局事务:整个分布式事务
  • 分支事务:分布式事务中包含的每个子系统的事务
  • 最终一致性:各分支事务分别执行并提交,如果有不一致的情况,想办法补偿恢复,达到数据的最终一致性
  • 强一致性:各事务执行完业务不要提交,等待彼此结束,之后统一提交或回滚

事务管理中三个重要的角色:

  • **TC(Transaction Coordinator)-事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。
  • **TM(Transaction Manager)-事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • **RM(Resource Manager)-资源管理器:**管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

    1. XA模式 二阶段提交流程

TM开启全局事务
RM一阶段: 1.注册分支事务到TC  2.执行分支业务sql 但不提交 3.报告执行状态到TC
TC二阶段: TC检测到各分支事务执行状态,                                                                                如果都成功,通知所有RM提交事务, 如果有失败,则通知所有RM回滚事务;
RM二阶段:接收TC指令,提交或回滚事务
TM 提交或回滚全局事务

优点: 1.事务一致性强,满足acid  2.常用数据库都支持,实现简单,没有代码侵入
缺点:因为一阶段需要锁定数据库资源,等待二阶段结束后才释放,所以性能较差;  依赖关系型数据库实现事务;

2.AT模式与XA模式区别:

XA模式一阶段不提交事务,锁定资源; AT模式一阶段直接提交,不锁定资源。
XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚;
XA模式强一致;AT模式最终一致;
优点:
 一阶段完成直接提交事务,释放数据库资源,性能较好;

3.TCC模式:

与AT模式类似,每阶段都是独立事务,但是回滚需要人工编码来实现

Try :资源检测和预留   Confirm :完成资源操作业务,要求try成功 confirm也一定成功     Cancel:预留资源释放,理解为try的反向操作

优点:一阶段完成直接提交事务,释放数据库资源,性能好;相比AT模型,无需生产快照,无需使用全局锁,性能最强; 不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库

TCC的缺点:有代码侵入,需要人为编写try,confirm, cancel接口,事务是最终一致;需要做好幂等处理,考虑confirm和cancel失败的情况

相关文章:

  • 广西桂林网站建设网站建设步骤流程详细介绍
  • 如何创办公司广西百度seo
  • 国内最大的网站制作公司如何优化网络连接
  • 最优秀的佛山网站建设百度热门关键词排名
  • 酒店网站建设流程苏州seo关键词优化价格
  • cms 排名 wordpress优化二十条
  • Hive3.1.3加载paimon-hive-connector-3.1-1.1.1.jar报错UnsatisfiedLinkError
  • Java6.26
  • 如何将视频从 iPhone 发送到 Android 设备
  • iOS App 上架流程工具链解析:开发者视角下的协作实践总结
  • 本地部署开源时间跟踪工具 Kimai 并实现外部访问( Windows 版本)
  • bug复盘:MCP SSE Client 生命周期问题之context.Background() 的使用
  • window显示驱动开发—DirectX 图形内核子系统(一)
  • 学习昇腾开发的第9天--在Ubuntu下安装ffmpeg4.2.11
  • Spring Boot 项目中同时使用 Swagger 和 Javadoc 的完整指南
  • Linux IPV4/IPV6配置终极指南
  • Unix 时间戳
  • 推荐系统的视频特征-视频关键帧特征提取与向量生成
  • [3D-portfolio] 3D画布组件 | <Canvas> | Framer Motion | 预定义动画序列
  • OpenCV边缘填充方式详解
  • 设置cursor、vscode的默认终端
  • VIVADO设定寄存器/存储器的初始值
  • Java+LangChain实战入门:深度剖析开发大语言模型应用!
  • [论文阅读] 人工智能+ | 用大语言模型给建筑合规检查“开挂“:BIM领域的自动化革命
  • PHP的
  • DeepSeek16-open-webui Pipelines开发填坑