分布式事务框架 ---- 总述及 Seata 分布式框架-AT模式介绍

目录

一、什么是分布式事务?

二、分布式事务方案

三、Seata介绍

四、订单系统

五、Seata AT 基本原理

Seata AT 事务分两个阶段来管理全局事务:

第一阶段: 执行各分支事务

1)调用订单服务

2)调用库存服务

3)完成账户分支事务:

第二阶段:控制全局事务最终回滚


一、什么是分布式事务?

区别:

普通事务:

 

 分布式事务:

 

  •  在微服务系统中,每个微服务应用都可能会有自己的数据库,他们首先要控制自己的本地事务
  • 一项业务操作可能会调用执行多个微服务。
  • 那么如何保证多个事务执行多个数据库的操作整体成功或整体失败?这就是分布式事务要解决的问题!

 

二、分布式事务方案

分布式事务有以下解决方案:

  • XA
  • TCC
  • Seata 框架 AT 事务
  • SAGA
  • 可靠消息最终一致性
  • 最大努力通知

 

三、Seata介绍

  • Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
  • Seata,意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案
  • Seata 融合了阿里巴巴和蚂蚁金服在分布式事务技术上的积累,并沉淀了新零售、云计算和新金融等场景下丰富的实践经验,但要实现适用于所有的分布式事务场景的愿景,仍有很长的路要走。

四、订单系统

业务

 当用户下单时,执行以下三步流程:

1、订单系统保存订单

2、订单系统调用库存服务,减少库存

3、订单系统调用账户服务,扣减金额

这三步作为有一个整体事务进行管理,要么整体成功,要么整体失败

五、Seata AT 基本原理

Seata AT 事务分两个阶段来管理全局事务:

第一阶段:执行各分支事务

第二阶段:控制全局事务最终提交或回滚

第一阶段: 执行各分支事务

微服务系统中,各服务之间无法感知事务是否执行成功,这时就需要一个专门的服务,来协调各个服务的运行状态。这个服务称之为TC(Transaction Coordinator,事务协调器)。

 tc

1)调用订单服务

1、订单系统开始执行保存订单命令之前,首先会启动TM(Transaction Manager,事务管理器),由 TM向TC申请开启一个全局事务TM

 2、这时会产生一个全局事务ID,称之为XID,并将XID传回TM:

 xid

 这样就开启了全局事务

3、全局事务开启后,开启执行创建订单的业务。首先执行保存订单,这时会先启动一个RM(Resource Manager,资源管理器),并将XID传递给RM:

rm

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

     RM首先会使用 XID 向 TC 注册分支事务, 将分支事务纳入到对应的全局事务管辖:

rm

 5、现在可以执行保存订单的分支事务。一旦分支事务执行成功,RM会上报事务状态:

tx

6、TC收到后,会将该状态信息传递到TM:

o

7、到此,保存订单过程结束。   

2)调用库存服务

减少库存商品,与订单的执行过程相同。

1、首先调用库存服务,启动RM,并传递XID:

s

2、库存服务的 RM 使用 XID 向TC进行注册,纳入全局事物管辖:

s

 3、执行本地事务成功后上报状态,TC会将状态发送给TM:

s

 4、执行完成。

3)完成账户分支事务:

与上述相同:

a

 到此,全局事务全部提交完成!

第二阶段:控制全局事务最终回滚

上面是全局事务执行成功的情况,下面是失败的情况。

1、假设订单业务执行过程中,扣减账户金额这一步分支执行失败,那么失败状态会对TC上报,然后再发送给TM

a

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

tm

 然后,TC会向所有的 RM 发送回滚指令, RM 会完成最终的回滚操作:

tc

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值