🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺|

RabbitUvU

园龄:4个月粉丝:0关注:1

什么是分布式事务?使用Seata有哪些解决方案?Seata的AT模式的执行流程

什么是分布式事务?

简单来说:在分布式系统中出现的事务问题,称为分布式事务。

为什么会出现分布式事务:

一个分布式事务流程图

在这个业务中有3个数据库连接,就没有办法做到全局的事务控制。这就是分布式事务问题

分布式事务产生的情况有两种:

​ 1. 业务跨多个服务实现

​ 2. 业务跨多个数据源实现

可以使用Seata解决分布式事务问题:

  • 分布式事务问题的方案有以下几种

    AT 模式:这是一种自动化的两阶段提交协议的变种。在该模式下,Seata 能够自动地将业务操作转换为符合 两阶段提交协议的操作。在业务提交之前,会将业务数据修改的快照保存到 Seata 的存储中。如果全局事务协调器决定提交,则应用变更;如果决定回滚,则根据快照恢复原状。

    XA 模式:XA 协议是一种传统的两阶段提交协议,它要求资源管理器(如数据库)支持 XA 接口。然而,Seata 主要关注的是非 XA 资源的分布式事务管理,因此对于支持 XA 协议的资源,通常直接使用标准的 XA 事务处理机制,而不是通过 Seata 处理。

    TCC 模式:

    Saga 模式:

Seata的AT模式的执行流程:

AT模式流程图:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

流程说明:

一阶段:

1 TC架设

1.1 TM通知TC开启全局事务

1.2 TM调用分支事务

分支事务发生的变化:

1.3 注册分支事务到TC

1.4 执行完成sql之后并提交,在sql提交前后会把数据记录到一个快照表中,这个表就是undo_log表。
    这个时候数据库中的数据就是已经更新过的了

1.5 分支事务报告事务的状态

二阶段:

2.1 TM通知TC 提交或回滚全局事务

2.2 TC检查分支事务的状态

2.3 分支事务成功:
  2.4 提交,删除undo_log表中的记录
2.3 分支事务失败:
  2.4 回滚,根据undo-log恢复数据到更新之前,并删除undo_log表中的记录

注意:

  • 如果有多分支事务,某个分支事务执行成功,提交后的数据,就是一个中间状态

  • AT模式是最终一致性的解决方案,所有会有中间状态不一致的情况

优点:

  • AT模式使用起来更加简单,无业务侵入,性能更好。

  • 因此企业90%的分布式事务都可以用AT模式来解决。

本文作者:RabbitUvU

本文链接:https://www.cnblogs.com/chengzhenghai/p/18462982

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   RabbitUvU  阅读(29)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起