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

本文来说下关于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 是否一致,如果不一致则回滚失败,需要人工介入。

关于seata分布式事务框架的几个问题_第1张图片

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分布式事务框架相关的知识与内容。

你可能感兴趣的:(核心知识点,分布式)