官网地址:Seata术语
学习教程看:https://blog.youkuaiyun.com/finally_vince/article/details/125260527
视频教程:实战阿里分布式事务框架Seata视频教程(无废话,通俗易懂版)_哔哩哔哩_bilibili
一、Seata术语
TC (Transaction Coordinator) - 事务协调者(就是seata服务本身)
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器(分布式事务发起发服务)
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器(每个服务本身的事务)
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata
管理分布式事务的典型生命周期
- TM要求TC开始新的全局事务。 TC生成表示全局事务的XID。
- XID通过微服务的调用链传播。
- RM将本地事务注册为XID到TC的相应全局事务的分支。
- TM要求TC提交或回滚XID的相应全局事务。
- TC在XID的相应全局事务下驱动所有分支事务,以完成分支提交或回滚。
1.1 AT 模式(seata推荐)
前提: 基于支持本地 ACID
事务的关系型数据库。
Java 应用,通过 JDBC
访问数据库。
整体机制
是两阶段提交协议的演变:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段: 提交异步化,非常快速地完成。
回滚通过一阶段的回滚日志进行反向补偿。
与传统的两阶段提交对比:在一阶段的时候,将提交事务,释放资源,不再阻塞,提交的业务性能。提交事务的时候,将数据和undo log都写了数据,如果发生异常,在二阶段的时候就回滚数据,并删除undo log日志。
写隔离
一阶段本地事务提交前,需要确保先拿到
全局锁
。
拿不到 全局锁
,不能提交本地事务。
拿 全局锁
的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
1.2 TCC 模式(不推荐)
不推荐,因为对业务代码侵入性太大,要自己实现每个步骤
描述:一个分布式的全局事务,整体是
两阶段提交
的模型。全局事务是由若干分支事务组
成的,分支事务要满足
两阶段提交
的模型要求,即需要每个分支事务都具备自己的:
一阶段 prepare
行为
二阶段 commit
或
rollback
行为
TCC
模式:不依赖于底层数据资源的事务支持:
一阶段 prepare
行为:调用
自定义
的
prepare
逻辑。
二阶段 commit
行为:调用
自定义
的
commit
逻辑。
二阶段 rollback
行为:调用
自定义
的
rollback
逻辑。
1.3 Saga 模式(长事务解决方案)
Saga
模式是
SEATA
提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发 实现。
适用场景:
业务流程长、业务流程多
参与者包含其它公司或遗留系统服务,无法提供 TCC
模式要求的三个接口
优势:
一阶段提交本地事务,无锁,高性能
事件驱动架构,参与者可异步执行,高吞吐
补偿服务易于实现