阿里Seata的分布式事务实现

一、Seata的事务模式

Seata提供了四种不同业务场景下的事务模式:

AT模式: 一阶段执行各分支事务、二阶段提交和回滚,均由 Seata 框架自动完成。AT 模式是一种对业务无任何侵入的分布式事务解决方案。
TTC模式: 相对于AT 模式,TCC 模式对业务代码有侵入性,但是 TCC 模式无 AT 模式的全局锁,TCC 性能会比 AT模式高很多。适用于核心系统等对性能有很高要求的场景。
SAGA模式:Sage 是长事务解决方案,事务驱动,使用那种存在流程审核的业务场景,如: 金融行业,需要层层审核。
XA模式: XA模式是分布式强一致性的解决方案,性能低而使用较少。

二、Seata中的组件角色

TC(Transaction Coordinator):是Server端,事务协调者,要单独部署,维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM(Transaction Manager):是Client端,由业务系统集成,定义全局事务。
RM(Resource Manager):是Client端,由业务系统集成,管理分支事务处理的资源。

三、AT模式

1、Automatic Transaction是一种无侵入的分布式事务解决方案。
三大角色,分别是 TM、RM 和 TC。 其中 TM 和 RM 是作为客户端与业务系统集成在一起,TC 作为服务端独立部署。

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

2、Seata AT 事务分两个阶段来管理全局事务:
第一阶段: 执行各分支事务
第二阶段: 控制全局事务最终提交或回滚

3、执行顺序

  1. 执行各分支事务
    ①启动 TM(Transaction Manager,事务管理器),由 TM 向 TC 申请开启一个全局事务。
    这时TC会产生一个全局事务ID,称为 XID,并将 XID 传回 TM。
    ②启动一个 RM(Resource Manager,资源管理器),并将 XID 传递给 RM。
    RM 负责对分支事务(即微服务的本地事务)进行管理,并与 TC 通信,上报分支事务的执行状态、接收全局事务的提交或回滚指令。
    ③RM 首先会使用 XID 向 TC 注册分支事务,将分支事务纳入对应的全局事务管辖。
    ④执行操作DB的分支事务。一旦分支事务执行成功,RM 会上报事务状态。
    ⑤TC 收到RM上报的事务状态后,会将该状态信息传递到 TM。
    ⑥假设在业务中调用其他服务,同样在被调用服务中 启动 RM,并传递 XID,使用 XID 向 TC 进行注册,纳入全局事务管辖。
    执行本地事务成功后上报状态,TC会将状态发送给TM。

  2. 控制全局事务最终提交或回滚
    现在,TM(全局事务管理器)收集齐了全部分支事务的成功状态,它会进行决策,
    确定全局事务成功,向 TC 发送全局事务的提交请求。
    确定全局事务失败,向 TC 发送全局事务的回滚请求。

四、TCC模式

tcc模式主要可以分为三个阶段:
Try:做业务检查和资源预留
Confirm:确认提交
Cancel:业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放

五、saga模式

Saga模式是SEATA提供的长事务解决方案,在Saga模式中:
业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,
一阶段正向服务和二阶段补偿服务都由业务开发实现。

六、XA模式

XA 模式是 Seata 将会开源的另一种无侵入的分布式事务解决方案:

将快照数据和行锁等通过 XA 指令委托给了数据库来完成
XA模式是分布式强一致性的解决方案,但性能低而使用较少。

猜你喜欢

转载自blog.csdn.net/qgbihc/article/details/115176973