阿里Seata入门
Seata 是一款开源的分布式解决方式,致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式,支持微服务框架目前已支持Dubbo、Spring Cloud、Sofa-RPC、Motan 和 gRPC 等RPC框架,其他框架持续集成中,为用户打造一站式的分布式事务解决方案。
源码:https://github.com/apache/incubator-seata
go-seata:https://github.com/apache/incubator-seata-go
go:https://www.modb.pro/db/211588
传统的本地事务,如mysql自带的事务,在分布式场景遇到困难



Seata 组成
事务协调者(Transaction Coordinator):简称 TC,它就是 Seata 服务端,负责协调并管理分布式事务的执行。它是分布式事务的协调者,协调多个参与者的事务操作。事务协调者负责全局的创建、提交、回滚以及事务的状态管理。它通过全局事务ID来追踪和协调分支事务的执行。
事务管理器(Transaction Manager):简称 TM,负责管理应用程序的本地事务(分支事务)。事务管理器定义了全局事务的范围,负责将分支事务注册到全局事务中,并在全局事务的协调下,执行本地事务的提交和回滚。
资源管理器(Reaource Manager):简称 RM,管理分支事务处理的资源,注册分支事务和报告分支事务的状态,并驱动分支事务提交和回滚。
AT模式
AT模式式 Seata独有的模式,通过反向生成sql实现数据回滚,记录在表UNDO_LOG中
1 | insert int order values (1001,...) |
概念:解决了 XA 模式中锁占用时间过长的问题。它的主要特点是简单无侵入,强一致,学习成本低。缺点是需要遵守一定的开发规约,它并不是对所有的 SQL 类型都支持,有一定的使用限制。适用于通用的业务场景,但它并不适用与热点数据的高并发场景,像 SKU(Stock Keeping Unit,库存管理的一个概念,用来唯一标识一个可售卖的商品)的库存的扣减。因为 AT 模式有应用层的全局锁,当需要对相同数据修改操作时,需要使用全局锁控制事务的并发时序,实现上存在锁排队的机制
优点:简单、无业务侵入、事务强一致性、学习成本低、性能高于XA模式
缺点:需要数据库的支持、遵循一定的开发规范
适用场景:高并发,短时不一致 ,靠补录最终一致 ,对账程序
TCC模式
反人类模式:
一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:
- 一阶段 prepare 行为
- 二阶段 commit 或 rollback 行为
TCC,Try-Confirm-Cancel 模式,是一种通过三个步骤(Try、Confirm、Cancel)来实现分布式事务的模式。在TCC模式下,应用程序需要自行实现Try、Confirm、Cancel 三个方法,分别标志尝试执行、确认提交和取消回滚。TCC模式,不依赖于底层数据资源的事务支持:

优点:灵活、性能高(不依赖全局锁、不需要生产快照)、不依赖数据库事务。
缺点:业务侵入大、实现难度高、事务最终一致性(不是强一致性)。而且要在程序里实现
使用场景:连接的数据库不支持(本地)事务。AP模式,
SAGA模式
Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

场景:
业务流程长、业务流程多 第三方支付 长短不确定
参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口
优点:
一阶段提交本地事务,无锁,高性能
事件驱动架构,参与者可异步执行,高吞吐
补偿服务易于实现
缺点:
不保证隔离 复杂 难 难
XA 模式
A 协议是一种标准的分布式事务协议,用于实现跨多个资源管理器(如数据库)的分布式事务的一致性。
XA 协议定义了在分布式环境下多个资源(如数据库)之间进行事务协作的规范和接口。它使得每个资源管理器都能参与到全局事务中,并根据全局事务的指令进行相应的操作。XA 协议的核心是两阶段提交(Two-Phase Commit ,2PC)机制:
第一阶段(准备阶段):全局事务协调者向所有参与者发送准备请求,每个参与者执行本地事务并返回确认信息个协调者。如果所有参与者都返回成功,那么协调器进入第二阶段。如果任何一个参与者返回失败,协调者将发送回滚请求。
第二阶段(提交/回滚阶段):全局事务协调者根据第一阶段的反馈情况,决定提交或回滚全局事务。首先,协调者发送提交或回滚指令给所有参与者,然后参与者按照指令执行相应的操作。
数据重要 场景:金融 ,并发并不大
- 本文作者: 东方觉主
- 本文链接: http://www.charon193.com/2022/12/20/seata/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!