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的一些介绍相关推荐

  1. Seata阿里分布式事务中间件(一):Seata的基本介绍

    Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 什么是微服务化带来的分布式事务问题? 首先,设想一个传统的单体 ...

  2. Alibaba seata 分布式事务介绍及配置使用

    一.介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方 ...

  3. Spring Boot之基于Dubbo和Seata的分布式事务解决方案

    转载自 Spring Boot之基于Dubbo和Seata的分布式事务解决方案 1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以 ...

  4. 蚂蚁集团境外站点 Seata 实践与探索

    PART. 1 背景 蚂蚁国际境外银行业务正在部分迁移至阿里云,原内部使用的 SOFA 技术栈无法在阿里云上得到支持.为了满足银行业务快速发展.简化银行系统技术栈的目标,我们采用了 Spring+Du ...

  5. 分布式事务(Seata) 四大模式详解

    前言 在上一节中我们讲解了,关于分布式事务和seata的基本介绍和使用,感兴趣的小伙伴可以回顾一下<别再说你不知道分布式事务了!> 最后小农也说了,下期会带给大家关于Seata中关于sea ...

  6. 分布式事务之Seata中间件原理及流程详细分析

    转载自:https://blog.csdn.net/f4761/article/details/89077400 背景 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案 ...

  7. 微服务(SpringCloud、Dubbo、Seata、Sentinel、SpringGateway)

    什么是微服务 微服务的概念是由Martin Fowler(马丁·福勒)在2014年提出的 微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署, ...

  8. 老板现在喊我大哥,原因是我用阿里分布式事务框架Seata解决了长久以来困扰公司的分布式事务问题

    大家好,我是曹尼玛 从大学毕业5年,一直努力学习,努力工作,追求新技术,不保守. 上个月我来到一家新公司上班,月薪20K,这家公司老板人很好,对员工很关爱,公司氛围不错,同事们也努力把公司项目搞搞好. ...

  9. Seata 分布式事务的使用和原理浅析

    Seata 分布式事务的精简使用教程和原理浅析 一.说明 二.Seata 简介 2.1.Seata 是什么? 2.2.Seata 的整体架构 2.2.1.主要角色 2.2.2.整体架构和工作流程图 2 ...

最新文章

  1. Linux ibm mq 教程,IBM MQ 使用指南
  2. 单节点部署Hadoop教程
  3. 计算机组成原理实验认识多思网络虚拟实验系统_3D全息投影,裸眼3D,全息互动投影系统...
  4. Java黑皮书课后题第2章:*2.20(金融应用:计算利息)编写程序,读取余额和年利率百分比,打印下个月的利息
  5. 利用yum升级Centos6的gcc版本,使其支持C++11
  6. 安装完python怎么打开-python安装后怎么启用
  7. pdo mysql_num_rows_PHP-mysql_num_rows()期望参数1为资源,给定布尔...
  8. 计算机二级Java笔记/重难点易错点总结(按章节归纳整理)
  9. 计算机系统优化的方法.,20种优化电脑开机速度方法!
  10. 漏洞库:爬取CNNVD-国家信息安全漏洞库
  11. 如何查找期刊是否被SCI或者SSCI收录
  12. 一个exfat U盘引起的systen crash
  13. NvRam增加记录恢复出厂设置次数(下)
  14. 输入上下文句柄相关函数 linux,一起聊聊WSL的那些事儿(上)
  15. 线段树1——神奇的数据结构
  16. 利用js实现手机访问PC端直接跳转wap端
  17. html5 运动轨迹绘画,冷知识|简单几步教你用跑步轨迹绘画,用跑画刷爆你的朋友圈!...
  18. 谁会成为印度版微信?
  19. Python——标准库函数
  20. 金庸的「射雕三部曲」,其实还有一个隐藏的第一部

热门文章

  1. AspxGridview GetSelectedFieldValues取值为主键值
  2. 硬件设计15---什么是HDMI驱动器?
  3. 学习记录673@项目管理之进度管理案例
  4. Elasticsearch Aggregations 统计buckets中key的个数
  5. 【Python数据分析—NumPy】7.NumPy专用函数
  6. 咨询系列主题:流程梳理与优化咨询项目方法论
  7. 【CSS-Part3 ------样式显示模式、背景设置、三大特性 】
  8. QnA,一个 Hexo FAQ 主题
  9. CSDN写博客技巧(持续整理~~~~~)
  10. 构建自己的博客系统的技术