一、什么是Seata
Seata 是一款开源的分布式事务解决方式,致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式事务解决方案。
二、Seata 组成
- **事务协调者(Transaction Coordinator):**简称 TC,它就是 Seata 服务端,负责协调并管理分布式事务的执行。它是分布式事务的协调者,协调多个参与者的事务操作。事务协调者负责全局的创建、提交、回滚以及事务的状态管理。它通过全局事务ID来追踪和协调分支事务的执行。
- **事务管理器(Transaction Manager):**简称 TM,负责管理应用程序的本地事务(分支事务)。事务管理器定义了全局事务的范围,负责将分支事务注册到全局事务中,并在全局事务的协调下,执行本地事务的提交和回滚。
- **资源管理器(Reaource Manager):**简称 RM,管理分支事务处理的资源,注册分支事务和报告分支事务的状态,并驱动分支事务提交和回滚。
三、Seata 模式介绍
3.1 XA 模式
**概念:**性能相比其他事务要差一点,但能保证最严格的数据一致性。XA 模式需要设置串行化隔离级别,相当于对数据添加了读写锁。另外连接资源需要在整个事务期间保持,这样可能会导致资源锁定问题,从而影响并发事务吞吐。
**优点:**实现简单、无业务侵入
**缺点:**性能差、必须实现 XA 协议、容易产生死锁。
**适用场景:**隔离级别要求高,强一致性分阶段事务模型,牺牲了一定的可用性(保证了强一致性)
3.2 AT 模式(默认模式)
**概念:**解决了 XA 模式中锁占用时间过长的问题。它的主要特点是简单无侵入,强一致,学习成本低。缺点是需要遵守一定的开发规约,它并不是对所有的 SQL 类型都支持,有一定的使用限制。适用于通用的业务场景,但它并不适用与热点数据的高并发场景,像 SKU(Stock Keeping Unit,库存管理的一个概念,用来唯一标识一个可售卖的商品)的库存的扣减。因为 AT 模式有应用层的全局锁,当需要对相同数据修改操作时,需要使用全局锁控制事务的并发时序,实现上存在锁排队的机制
**优点:**简单、无业务侵入、事务强一致性、学习成本低、性能高于XA模式
**缺点:**需要数据库的支持、遵循一定的开发规范(Java应用、通过JDBC访问数据库)
**适用场景:**不适合用于连接的数据库不支持(本地事务)
3.3 TCC 模式
业务层面的分布式事务解决方案,TCC,Try-Confirm-Cancel 模式,是一种通过三个步骤(Try、Confirm、Cancel)来实现分布式事务的模式。在TCC模式下,应用程序需要自行实现Try、Confirm、Cancel 三个方法,分别标志尝试执行、确认提交和取消回滚。TCC模式,不依赖于底层数据资源的事务支持:
- 一阶段 prepare 行为:调用自定义的 prepare 逻辑。
- 二阶段 commit 行为:调用自定义的 commit 逻辑。
- 三阶段 rollback 行为:调用自定义的 rollback 逻辑。
**优点:**灵活、性能高(不依赖全局锁、不需要生产快照)、不依赖数据库事务。
**缺点:**业务侵入大、实现难度高、事务最终一致性(不是强一致性)。
**使用场景:**连接的数据库不支持(本地)事务。
3.4 SAGA 模式
业务层面的分布式解决方案。一个基于长事务的解决方案,Saga 模式解决的是在没有二阶段提交的情况下解决分布式事务。它的核心思想是将一个业务流程中的长事务拆分成多个本地短事务,当其中一个参与者的事务执行失败,则通过补偿机制补偿给前面已经执行成功的参与者。
优点:灵活、性能高、可异步化
缺点:无锁、不保证隔离性、业务侵入大
使用场景:长事务。
四、XA 协议
4.1什么是 XA 协议
XA 协议是一种标准的分布式事务协议,用于实现跨多个资源管理器(如数据库)的分布式事务的一致性。
XA 协议定义了在分布式环境下多个资源(如数据库)之间进行事务协作的规范和接口。它使得每个资源管理器都能参与到全局事务中,并根据全局事务的指令进行相应的操作。XA 协议的核心是两阶段提交(Two-Phase Commit ,2PC)机制:
**1. 第一阶段(准备阶段):**全局事务协调者向所有参与者发送准备请求,每个参与者执行本地事务并返回确认信息个协调者。如果所有参与者都返回成功,那么协调器进入第二阶段。如果任何一个参与者返回失败,协调者将发送回滚请求。
**2. 第二阶段(提交/回滚阶段):**全局事务协调者根据第一阶段的反馈情况,决定提交或回滚全局事务。首先,协调者发送提交或回滚指令给所有参与者,然后参与者按照指令执行相应的操作。
通过两阶段提交,XA 协议保证了分布式事务的原子性和一致性。每个参与者在第一阶段确认准备之后,就无法单独执行本