文章目录
1、分布式事务问题
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据致性问题没法保证。
总结:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。而 Alibaba Seata 就是用来保证全局数据一致性问题的。
2、Seata 简介
2.1 Seata 能干嘛
Alibaba Seata 是用来保证全局数据一致性问题的。 它由 1 + 3 的模型组成。即全局唯一的事务 ID + 下面三个组件。
- TC(Transaction Coordinator)
- TM(Transaction Manager)
- RM(Resource Manager)
2.2 Seata 是什么
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
2.3 Seata 处理分布式事务的过程
3、Seata 搭配 MySQL8 启动运行教程(Seata 默认不支持 MySQL8)
4、Seata 使用代码
4.1 导入 seata 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<dependency>
4.2 直接在方法头上添加全局事务注解即可。
类似于 Spring 处理本地事务的注解 @Transactional。Seata 处理全局事务的注解为 @GlobalTransactional
5、Seata 原理介绍
5.1 Seata 三大组件
TC:Seata 服务器
TM:事务的发起方,即头上标有 @GlobalTransactional 注解的方法
RM:事务的参与方,可以近似的理解为数据库
5.2 Seata 的分布式事务执行流程
5.3 Seata 事务类型-默认的 AT 模式
AT 模式的整体机制
两阶段提交协议的演变:
- 一阶段:业务数据和回滚日志记录在同-个本地事务中提交,释放本地锁和连接资源。
- 二阶段:
。提交异步化,非常快速地完成。
。回滚通过一阶段的回滚日志进行反向补偿。
1. 一阶段加载
2. 二阶段提交
3. 二阶段回滚