本文来说下关于seata分布式事务框架的几个问题

文章目录

  • 概述
  • Seata
  • 分布式事务解决方案比较
  • 本文小结

概述

seata是两阶段提交事务,第一阶段解析业务sql并且生成对应快照,第二阶段是提交/回滚,并且删除快照。

阿里巴巴有两个分布式事务中间件可选择:

  • 蚂蚁金服团队开发的 XTS,金融云产品名称为 DTX。
  • 阿里巴巴中间件团队开发的 TXC。

XTS 和 TXC 的功能差不多,都支持 TCC 事务模式,也都提供了对业务入侵度较低的分布式事务方案,目前这两个团队应该是在共建开源版的分布式事务中间件 Seata。此处我们介绍一下 Seata。


Seata

简单说一下 Seata (Simple Extensible Autonomous Transaction Architecture) 的历史:

  • 2014 年阿里巴巴就已经推出了分布式事务中间件产品 TXC (Taobao Transaction Constructor)。
  • 2016 年,TXC 进行了云产品化改造,提供了阿里云的云版本,名字叫做 GTS (Global Transaction Service) 。
  • 2019 年,GTS 宣布开源,开源项目的名字叫做 Seata。

Seata 支持 TCC 模式、Saga 模式。但是 Seata 对 TCC 模式的支持提供了一种对业务入侵度为0的解决方案,这种方案叫做 AT (Automatic Transaction) 模式。下面我们重点说一下 AT 模式的运行机制:

  • 全局事务依然是基于各个分支事务来完成。Seata Server 协调各个分支事务要么一起提交,要么一起回滚。
  • 各个分支事务在运行时,Seata Client 通过对 SQL 执行的代理和拦截,通过解析 SQL 定位到行记录,记录下 SQL 执行前后的行数据快照,beforeImage 和 afterImage 共同构成了回滚日志,回滚日志记录在独立的表中。回滚日志的写入和业务数据的更改在在同一个本地事务中提交。
  • 分支事务完成后,立即释放对本地资源的锁,然后给 Seata 协调器上报事务执行的结果。
  • Seata 协调器汇总各个分支事务的完成情况,生成事务提交或者回滚的决议,将决议下发给 Seata Client。
  • 如果决议是提交事务,则 Seata Client 异步清理回滚日志;如果决议是回滚事务,则 Seata Client 根据回滚日志进行补偿操作,补偿前会对比当前数据快照和 afterImage 是否一致,如果不一致则回滚失败,需要人工介入。

AT 模式通过自动生成回滚日志的方式,使得业务方接入成本低,对业务入侵度很低,但是应用 AT 模式也有一些限制:

  • AT 模式只支持基于 ACID 事务的关系数据库。
  • AT 模式是通过对 SQL 解析来完成的,对 SQL 语法的支持有限,使用复杂 SQL 时需要考虑兼容性。
  • 目前不支持复合主键,业务表在设计时注意添加自增主键。
  • 全局事务默认的隔离级别是读未提交,但是通过 SELECT…FOR UPDATE 等语句,可以实现读已提交的隔离级别。通过全局排它写锁,可以做到的隔离级别介于读未提交和读已提交之间。

分布式事务解决方案比较

单体数据库事务很容易满足事务的 ACID 四个特性,提供强一致性保证,但是分布式事务要完全遵循 ACID 特性会比较困难。为了追求分布式系统的高可用和高吞吐,分布式事务的解决方案一般提供的是最终一致性。

我们把提供强一致性的事务称之为刚性事务,把提供最终一致性的事务称之为柔性事务。刚性事务可以完全满足 ACID 四个特性,柔性事务对事务的 ACID 特性的支持情况如下:

  • 原子性:完全支持。
  • 一致性:只提供最终一致性支持。
  • 隔离性:不完全保证,通常为了系统的吞吐和性能,会一定程度上放弃对隔离性的要求。
  • 持久性:完全支持。

柔性事务一般遵循的是分布式领域中的 BASE 理论:

  • BA:Basic Availability,基本业务可用性。
  • S:Soft state,柔性状态。
  • E:Eventual consistency,最终一致性。

BASE 理论,是对 CAP 理论的延伸,是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

CAP 理论告诉我们一个分布式系统无法同时满足一致性, 可用性, 分区容错性,所以在设计上对这三点做取舍。刚性事务追求强一致性,所以牺牲了高可用性;柔性事务通过牺牲一致性换来了系统的高可用性。

在系统选择分布式方案时,可以根据对一致性的要求进行选择,业务上有强一致性要求的场景时,优先考虑 XA 规范的两阶段提交;业务上只需要最终一致性的场景时,可以在根据具体场景在柔性事务方案中进行选择。


本文小结

本文介绍了seata分布式事务框架相关的知识与内容。

关于seata分布式事务框架的几个问题相关推荐

  1. Seata分布式事务框架-AT模式

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

  2. Seata 分布式事务框架

    1.简介 Seata 是一款开源的分布式事务框架.致力于在微服务架构下提供高性能和简单易用的分布式事务服务.在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中 ...

  3. Spring Cloud Alibaba —— Seata 分布式事务框架

    导航 一.Seata 介绍 二.Seata 的工作原理 2.1 三个角色 2.2 工作流程 三.Seata AT 工作机制 3.1 一阶段 3.2 二阶段 四.案例演示(待补充) 一.Seata 介绍 ...

  4. 分布式事务(三)Seata分布式事务框架-AT模式介绍

    文章目录 Seata介绍 Seata AT事务方案 业务场景 Seata AT基本原理 第一阶段:执行各分支事务 第二阶段:控制全局事务最终提交 第二阶段:控制全局事务最终回滚 Seata AT具体工 ...

  5. 一招让你拿下seata分布式事务框架,看这篇文章准没错!

    第一阶段:架构师筑基必备技能 我觉得,但凡是个成年人应该都清楚扎实的基本功对自己的工作帮助有多重要.从各大招聘网站的招聘要求来看,第一条都明确说明需要扎实的Java基础.因此,一般笔试以及面试的第一轮 ...

  6. 分布式事务框架 seata

    seata分布式事务框架 http://www.dreamwu.com/post-1741.html

  7. seata xid是什么_Seata 分布式事务框架

    本文首发于个人微信公众号<andyqian>, 期待你的关注~ 前言 上一篇文章<Seata 之 rm-datasource 源码解读>发出后.有很多同学对 Seata 是什么 ...

  8. seata xid是什么_阿里开源的分布式事务框架 Seata

    1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata ...

  9. 分布式事务seata只支持MySQL_阿里分布式事务框架Seata原理解析

    Seata框架是一个业务层的XA(两阶段提交)解决方案.在理解Seata分布式事务机制前,我们先回顾一下数据库层面的XA方案. 1. MySQL XA方案 MySQL从5.7开始加入了分布式事务的支持 ...

最新文章

  1. 号称下一代监控系统?
  2. loadrunner关联点总结
  3. 如何用python画一朵玫瑰花-使用Python画一朵美丽的玫瑰花
  4. 五款主流 Linux 发行版性能对比,稳而不强?
  5. 解决MySQL报错ERROR 2002 (HY000)【转】
  6. ASA IPSEC ×××配置
  7. Windows2003 SQL2005解决系统Administrator密码不知道的问题
  8. pom.xml中的artifactId是什么意思?
  9. SAP Cloud for Customer的公有云和私有云部署方式 - Public Cloud vs Private Cloud
  10. Drools和jBPM KIE A​​pps平台
  11. 语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3
  12. SAP HANA创建类型(SAP HANA CREATE TYPE):
  13. 蓝桥杯 BASIC-16 基础练习 分解质因数
  14. Spring Boot中Bean管理
  15. Vmware虚拟机win10详细安装之典型安装
  16. javascript颜色选择器
  17. OpenCV-python安装教程
  18. 三次握手,为什么不是两次,也不是四次
  19. 一文读懂什么是数据产品交易
  20. C++ TCP 网络编程与数据通信

热门文章

  1. Scrapy爬取美女图片续集 (原创)
  2. JS经常使用正則表達式【分享】
  3. 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16
  4. kafka分区停留在UnderReplicated状态
  5. 使用广播信道的以太网
  6. 新功能:阿里云负载均衡SLB支持HTTP/HTTPS超时时间自定义功能
  7. Ansible批量修改root密码
  8. 关于juniper配速小记
  9. JS 设计模式 一(接口)
  10. RHEL 7.0已发布 CentOS 7 即将到来