Seata的一些介绍
Seata是什么
基本概念
分布式事务
一般事务是一个服务访问一个数据库,本地锁和数据库锁就能解决了,但是涉及到多个服务或者数据库就不一样了,比如:
- 多个服务需要在同一个事务:像购物场景,付款和减库存需要在一个事务里,但是两个功能可能分别在账户服务和商品服务里面;
- 一个服务但是操作多个数据库:数据量上来之后分库操作就是很平常的操作了,一般的本地事务依赖的是数据库提供的事务性,但是多个数据库的事务数据库事务就无能为力了;
- 当然还有多个服务操作多个数据库的情况。
Seata
一款分布式事务的解决方案,致力于提供高性能和简单易用的分布式事务服务,并且对业务代码是0入侵的;
Seata的一些术语
- TC(事务协调者):这是一个单独部署的服务,相当于整个分布式事务的管理者,维护分支事务的状态,驱动全局事务的提交或者回滚,也就是说分支事务要怎么做都要听它的;
- TM(事务管理器):开启全局事务、提交或者回滚全局事务,相当于TC和RM的中间商;
- RM(资源管理器):管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务的提交和回滚,也就是真正做事的,真正执行事务的角色;
运行过程
- TM开启全局事务,向TC注册,TC会开启一个全局锁,并返回XID;
- TM将XID传给RM,RM先用XID向TC注册获取分支事务BID,然后执行真正的业务事务,修改数据库数据,RM还会保存执行前和执行后的两份数据记录,并将这两份记录作为回滚记录写入数据库中;
- RM会将执行结果通知给TM,如果有一个RM执行异常了,TM就会通知TC回滚事务,随后TC就会通知所有的RM进行回滚操作;
- 如果所有的RM都执行成功了,TM也会通知TC完成事务,随后TC会通知所有的RM删除之前保存的回滚记录;
- 因为TC、TM、RM之间的通信都是通过网络进行的,是不可靠的,所以TC会有四个定时任务,定时处理系统中的超时事务、异步提交事务、重试回滚事务和重试提交事务,以此来保证分布式事务的一致性。
Seata的四种模式
AT模式
现在一般公司都是采用的这种模式,也是Seata文档中介绍最详细的一种模式。AT模式的工作机制采用的是两阶段提交,跟上面说的流程大体相似。
工作机制
- 一阶段:执行sql,以update product set name = ‘GTS’ where name = ‘TXC’;sql语句为例说明
1、解析SQL:得到SQL的类型(update),表名(product)、语句条件等等;
2、查询前置镜像:根据解析SQL语句,然后查询出相关数据记录,生成前置镜像;
3、执行业务SQL;
4、查询后置镜像:查询出执行SQL之后相关的数据记录,生成后置镜像;
5、添加回滚日志:用前后的镜像数据和SQL相关的信息生成一条回滚日志数据,添加到UNDO_LOG表中;
6、注册分支:向TC申请一个对product表中,name='TXC’记录的全局锁;
7、提交事务:获取到全局锁之后,将业务SQL和回滚日志数据一并提交;
8、上报结果:将事务提交结果上报给TC,释放本地锁和连接资源。 - 二阶段-回滚:如果后续的RM执行出现异常,TC就会通知前面的RM进行回滚操作
1、开启本地事务:RM收到TC的回滚请求后,会先开启一个本地事务;
2、查询回滚日志:通过XID和BID到UNDO_LOG表中查询到之前添加的回滚日志数据;
3、校验数据:对比回滚日志中的后置镜像数据和当前数据,如果有出入,则说明已经有其他事务修改了这条数据,这个时候就需要其他策略处理或者人工介入;
4、回滚操作:根据回滚日志中的前置镜像和SQL相关信息生成回滚SQL并执行;
5、提交本地事务:提交事务并向TC上报回滚执行结果。 - 二阶段-提交:如果所有的RM都提交成功,TC就会通知所有的RM提交成功了
1、TC通知RM:TC自己会去异步删除全局事务、分支事务和全局锁信息,并异步通知RM;
2、RM删除UNDO_LOG记录:RM收到TC的异步通知之后,会各自删除自己在UNDO_LOG表中添加的数据。
一些知识点
- 存储模式:TC记录的信息有全局事务(XID)、分支事务(BID)和全局锁(LOCK),这些信息的存储方式有三种:db(数据库)、redis(缓存插件)和file(文件);
- 隔离级别:AT的默认的事务隔离级别是读未提交,一般数据库的默认隔离级别是读已提交,如果特定场景需要读已提交的隔离级别需要使用SELECT … FOR UPDATE语句,但是这样这个查询语句也需要先获取全局锁才能执行。
TCC模式
TCC模式和AT模式大体流程上是相似的,只是AT模式是基于支持本地ACID事务的关系型数据库,而TCC不需要依赖这个,可以有更广泛的应该,但是作为代价就需要自己实现两阶段提交了,大体区别是:
- AT模式:
一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
二阶段 commit 行为:马上成功结束,自动异步批量清理回滚日志。
二阶段 rollback 行为:通过回滚日志,自动生成补偿操作,完成数据回滚。 - TCC模式:
一阶段 prepare 行为:调用自定义的 prepare 逻辑。
二阶段 commit 行为:调用自定义的 commit 逻辑。
二阶段 rollback 行为:调用自定义的 rollback 逻辑。
相当于自动挡和手动挡的区别
Saga模式
Saga模式主要针对的是长事务业务场景,无锁,所有的参与者都直接提交本地事务,出现异常之后的补偿服务也是由业务开发实现的,和TCC一样,属于手动挡,但是整个流程不一样,先提交,赌它没有异常,优点是速度快,吞吐量高。
XA模式
官方文档都还没有介绍,先这样吧。
Seata的一些介绍相关推荐
- Seata阿里分布式事务中间件(一):Seata的基本介绍
Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 什么是微服务化带来的分布式事务问题? 首先,设想一个传统的单体 ...
- Alibaba seata 分布式事务介绍及配置使用
一.介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方 ...
- Spring Boot之基于Dubbo和Seata的分布式事务解决方案
转载自 Spring Boot之基于Dubbo和Seata的分布式事务解决方案 1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以 ...
- 蚂蚁集团境外站点 Seata 实践与探索
PART. 1 背景 蚂蚁国际境外银行业务正在部分迁移至阿里云,原内部使用的 SOFA 技术栈无法在阿里云上得到支持.为了满足银行业务快速发展.简化银行系统技术栈的目标,我们采用了 Spring+Du ...
- 分布式事务(Seata) 四大模式详解
前言 在上一节中我们讲解了,关于分布式事务和seata的基本介绍和使用,感兴趣的小伙伴可以回顾一下<别再说你不知道分布式事务了!> 最后小农也说了,下期会带给大家关于Seata中关于sea ...
- 分布式事务之Seata中间件原理及流程详细分析
转载自:https://blog.csdn.net/f4761/article/details/89077400 背景 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案 ...
- 微服务(SpringCloud、Dubbo、Seata、Sentinel、SpringGateway)
什么是微服务 微服务的概念是由Martin Fowler(马丁·福勒)在2014年提出的 微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署, ...
- 老板现在喊我大哥,原因是我用阿里分布式事务框架Seata解决了长久以来困扰公司的分布式事务问题
大家好,我是曹尼玛 从大学毕业5年,一直努力学习,努力工作,追求新技术,不保守. 上个月我来到一家新公司上班,月薪20K,这家公司老板人很好,对员工很关爱,公司氛围不错,同事们也努力把公司项目搞搞好. ...
- Seata 分布式事务的使用和原理浅析
Seata 分布式事务的精简使用教程和原理浅析 一.说明 二.Seata 简介 2.1.Seata 是什么? 2.2.Seata 的整体架构 2.2.1.主要角色 2.2.2.整体架构和工作流程图 2 ...
最新文章
- Linux ibm mq 教程,IBM MQ 使用指南
- 单节点部署Hadoop教程
- 计算机组成原理实验认识多思网络虚拟实验系统_3D全息投影,裸眼3D,全息互动投影系统...
- Java黑皮书课后题第2章:*2.20(金融应用:计算利息)编写程序,读取余额和年利率百分比,打印下个月的利息
- 利用yum升级Centos6的gcc版本,使其支持C++11
- 安装完python怎么打开-python安装后怎么启用
- pdo mysql_num_rows_PHP-mysql_num_rows()期望参数1为资源,给定布尔...
- 计算机二级Java笔记/重难点易错点总结(按章节归纳整理)
- 计算机系统优化的方法.,20种优化电脑开机速度方法!
- 漏洞库:爬取CNNVD-国家信息安全漏洞库
- 如何查找期刊是否被SCI或者SSCI收录
- 一个exfat U盘引起的systen crash
- NvRam增加记录恢复出厂设置次数(下)
- 输入上下文句柄相关函数 linux,一起聊聊WSL的那些事儿(上)
- 线段树1——神奇的数据结构
- 利用js实现手机访问PC端直接跳转wap端
- html5 运动轨迹绘画,冷知识|简单几步教你用跑步轨迹绘画,用跑画刷爆你的朋友圈!...
- 谁会成为印度版微信?
- Python——标准库函数
- 金庸的「射雕三部曲」,其实还有一个隐藏的第一部