提示文章写完后,目录可以自动生成如何生成参考右边的帮助文档


分布式事务

`> 事务–01—CAP理论、 BASE 理论

在这里插入图片描述
在这里插入图片描述

Seata

Seata官网 https://seata.io/zh-cn/docs/overview/what-is-seata.html
在这里插入图片描述

1.XA模式

Seata支持四种不同的分布式事务解决方案

  • XA
  • TCC
  • AT
  • SAGA

1.1.两阶段提交

XA 规范 是 X/Open 组织定义分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持

A是规范,目前主流数据库实现了这种规范实现原理都是基于两阶段提交

正常情况:
在这里插入图片描述
异常情况:
在这里插入图片描述
一阶段:

二阶段:

1.2.Seata的XA模型

Seata对原始的XA模式做了简单封装和改造,以适应自己的事务模型基本架构如图
在这里插入图片描述

RM一阶段的工作

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作

  1. TC检测分支事务执行状态
  2. 如果都成功,通知所有RM提交事务
  3. 如果有失败通知所有RM回滚事务

RM二阶段的工作

1.3.优缺点

XA模式的优点是什么?

XA模式的缺点是什么?

AT模式

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷

2.1.Seata的AT模型

基本流程图
在这里插入图片描述
阶段一RM的工作:

阶段二提交时RM的工作:

2.2.流程梳理

比如,现在有一个数据库表,记录用户余额:
AT模式下,当前分支事务执行流程如下
一阶段:

  1. TM发起并注册全局事务到TC
  2. TM调用分支事务
  3. 分支事务准备执行业务SQL
  4. RM拦截业务SQL,根据where条件查询原始数据,形成快照
{
  "id": 1, "money": 100
}
  1. RM执行业务SQL,提交本地事务,释放数据库锁。此时 money = 90
  2. RM报告本地事务状态给TC

二阶段:

  1. TM通知TC事务结束
  2. TC检查分支事务状态
  3. 如果都成功,则立即删除快照
  4. 如果有分支事务失败需要回滚读取快照数据({“id”: 1, “money”: 100}),将快照恢复数据库。此时数据库再次恢复为100

流程图
在这里插入图片描述

2.3.AT与XA的区别

简述AT模式与XA模式最大区别是什么?

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源
  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
  • XA模式强一致;AT模式最终一致

可见,AT模式使用起来更加简单,无业务侵入,性能更好。因此企业90%的分布式事务都可以用AT模式来解决

原文地址:https://blog.csdn.net/weixin_48052161/article/details/134716162

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_18451.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注