首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

一起聊聊,分布式事务SEATA及其AT模式的实现原理

  • 25-03-05 20:46
  • 3365
  • 9428
blog.csdn.net

目录

seata的使用与简介

分布式事务

seata术语

处理过程

 AT模式

前提

整体机制

一阶段加载

 二阶段提交

 二阶段回滚


seata的使用与简介

seata作为springcloud alibaba的一个分布式事务解决方案,方便快捷,很多互联网公司都在使用。

seata如何使用:

分布式事务SEATA的AT模式的简单使用

分布式事务

    单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。

一句话:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。

seata术语

一个ID+三组件模型(1+3):

一个全局唯一的事务ID。

TC-事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM-事务管理者:定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM-资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

处理过程

1.TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID。

2.XID在微服务调用链路的上下文中传播。

3.RM向TC注册分支事务,将其纳入XID对应全局事务的管辖。

4.TM向TC发起针对XID的全局提交或回滚决议。

5.TC调度XID下管辖的全部分支事务完成提交或回滚请求。

 AT模式

前提

基于支持本地ACID事务的关系型数据库。

java应用,通过jdbc访问数据库。

整体机制

两阶段提交协议:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

二阶段:① 提交异步化,非常快速地完成。② 回滚通过一阶段的回滚日志进行反向补偿。

一阶段加载

在一阶段,seata会拦截“业务sql”。

1.解析sql语义,找到“业务sql”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,

2.执行“业务sql”更新业务数据,在业务数据更新之后,

3.其保存成“after image”,最后生成行锁。

以上操作全部在一个数据库事务内完成,这样保证了一阶段操作的原子性。

 二阶段提交

二阶段如是顺利提交的话,

因为“业务sql”在一阶段已经提交至数据库,所以seata框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。

 二阶段回滚

二阶段如果是回滚的话,seata就需要回滚一阶段已经执行的“业务sql”,还原业务数据。

回滚方式便是使用“before image”还原业务数据;但在还原前要首先校验脏写,对比“数据库当前业务数据”和“after image”,如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览19836 人正在系统学习中
注:本文转载自blog.csdn.net的秃了也弱了。的文章"https://blog.csdn.net/A_art_xiang/article/details/123311350"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top