分布式事务

  1. 事务开始先记录到日志文件
  2. 提交事务才会永久保存到数据库
  3. 回滚,清空数据库

数据库并发访问冲突问题

脏读

读取到其他事务未提交的数据。

不可重复读

  • 重复读取同一数据时,与之前读取的数据不一致。
  • 一个事务提交的数据,可以被另一个事务立即读取。

幻读

  • 读取到已经被删除的数据。
  • 读取不到新插入的数据。

什么是分布式事务?

在微服务系统中,每个微服务应用都可能会有自己的数据库,它们首先需要控制自己的本地事务。

dt

 什么Seata

分布式事务开源的解决方案,提高性能和简单易用的分布式事务服务,Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

Seata AT事务方案

  1. 无侵入的分布式事务解决方案全局事务

第一阶段: 执行各分支事务
第二阶段: 控制全局事务最终提交或回滚

 Tc事务协调器

协调各个服务的事务运行状态,使各个服务相互感知事务是否成功

TM(Transaction Manager,事务管理器

  1. TM 向 TC 申请开启一个全局事务:
  2. TC会产生一个全局事务ID,称为 XID,并将 XID 传回 TM,开启事务
  3. 全部分支事务成功后,向TC发送全局事务的提交请求
  4. TC 会向所有 RM 发送提交操作指令,RM 会完成最终提交操作:

  5. TM 会进行决策,确定全局事务失败,向 TC 发送全局事务的回滚请求

  6. TC 会向所有 RM 发送回滚操作指令,RM 会完成最终回滚操作

RM(Resource Manager,资源管理器

RM 负责对分支事务(即微服务的本地事务)进行管理,并与 TC 通信,上报分支事务的执行状态、接收全局事务的提交或回滚指令。

  1. 开启事务后,保存业务后,会启动RM ,并将XID传递给RM
  2. RM 首先会使用 XID 向 TC 注册分支事务,将分支事务纳入对应的全局事务管辖。
  3. 保存业务的分支事务,成功,RM上报事务
  4. TC 收到后,会将该状态信息传递到 TM:

Seata 支持多款注册中心服务:nacos 、eureka、redis、zk、consul、etcd3、sofa。

@ConfigurationProperties(prefix = "spring.datasource")为当前注入的bean对象读取配置文件以spring.datasource开头的配置项,如果之后的部分和实体类的属性一致的话,会将配置的内容注入给对象的属性中

TCC 基本原理

区别:

  1. TCC 对业务代码侵入严重,数据操作要进行编码来实现,事务无法自动处理
  2. TCC 效率更高,允许多个事务同时操作数据。不用加全局锁

a

上下文对象

BusinessActionContext 上下文对象,用来在两个阶段之间传递数据

@BusinessActionContextParameter 注解的参数数据会被存入 BusinessActionContext

@TwoPhaseBusinessAction(name = "orderTccAction", commitMethod = "commit", rollbackMethod = "rollback")//表示第二阶段的方法名

保存标识:ResultHolder提供第二阶段判断

@localTCC提交tcc事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值