头图

一、分布式事务

1.事务的概念

· 概念:事务是一个完整的、不可分割操作单元,整个事务要么全部执行成功,要么全部执行失败。
· 事务具备4个特性:ACID
A:原子性-->完整的、不可分割操作单元
C:一致性-->数据的一致性:事务开始前和事务结束后,数据总量不变
I:隔离性-->事务相互隔离,互不影响
D:持久性-->事务一旦提交,永久落盘

2.传统事务

传统事务由 数据库连接 来控制:只有是同一个Connection操作的数据库才能够控制住

JDBC:Connection对象
Mybatis:SqlSession
Spring:声明式事务

3.分布式事务

· 概念:在分布式系统中(即分布式环境下)的事务,称为分布式事务。
用人话来说:一个业务跨多个服务或数据源来实现,就是分布式事务。

· 存在的问题:

每个单独的服务都能在本地遵循ACID,但是它们互相之间没有感知,不知道有人失败了,无法保证最终结果的统一,也就无法遵循ACID的事务特性了。

这就是分布式事务问题,出现以下情况之一就可能产生分布式事务问题:
1) 业务跨多个服务实现
2) 业务跨多个数据源实现
如图所示:在一个下单业务中,需要交易服务、购物车服务、库存服务共同联合才能实现,三个服务又分别对应各自的数据库,各个服务的运行互不干涉影响。
如果某次下单的业务中,库存服务运行失败,库存的数据库不会更改,但交易的数据库和购物车的数据库已经更改,此时就导致数据出现不一致的问题。
分布式事务图例说明

· 解决:解决分布式事务的方案有很多,一般会使用开源的框架来解决分布式事务问题。
在众多的开源分布式事务框架中,功能最完善、使用最多的是阿里巴巴的Seata

二、Seata解决分布式事务的方案

在Seata的事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。【TC相当于 监控器】
    (TC是一个独立的微服务,需要单独部署。)
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。【TM相当于 控制台】
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。【RM就是 各个微服务】
    Seata的工作架构(流程)如图所示:
    Seata的工作架构图
    1)由TM确定"小兵数量":RM的范围,并向TC发起开启全局事务。
    2)各个"小兵"RM到TC中“报到”(注册),并将事务的执行结果告知TC。
    3)TC监控各个"小兵"RM的任务执行效果,反馈给TM,最后由TM决定全局事务该提交还是回滚。

Seata支持四种不同的分布式事务解决方案:

  • XA
    ·事务的强一致性,满足ACID原则
    ·常用数据库都支持,实现简单,并且没有代码侵入
    ·为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
    ·依赖关系型数据库实现事务
  • TCC
  • AT
  • SAGA
    A是规范,目前主流数据库都实现了这种规范,实现的原理都是基于两阶段提交。
    一阶段:
    ·事务协调者通知每个事务参与者执行本地事务。
    ·本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁。
    二阶段:
    ·事务协调者基于一阶段的报告来判断下一步操作。
    ·如果一阶段都成功,则通知所有事务参与者,提交事务。
    ·如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务。

1.XA

1.1 XA模式的执行流程

XA模式流程图
1)由TM向TC发起开启全局事务;
2)TM调用分支RM;
3)RM到TM处报道注册;
4)RM执行sql(不提交);
5)RM将执行sql的结果告知TC;
6)TC监测全部RM的任务执行效果,反馈给TM;
7)TM决定全局事务该提交还是回滚,将命令交给TC;
8)TC向RM转达TC的命令,让RM执行提交或回滚事务。

1.2 XA模式的特点

· 优点

  • 事务的强一致性,满足ACID原则
  • 常用数据库都支持,实现简单,并且没有代码侵入
    · 缺点
  • 因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
  • 依赖关系型数据库实现事务

2.AT

2.1 AT模式的执行流程

AT模式的执行流程
1)由TM向TC发起开启全局事务;
2)TM调用分支RM;
3)RM到TM处报道注册;
4)RM执行并提交sql,并记录更新前后快照到undolog中
5)RM将执行sql的结果告知TC;
6)TM决定全局事务该提交还是回滚,将命令交给TC;
7)TC监测全部RM的任务执行效果,反馈给TM;
8)TC向RM转达TC的命令,让RM执行提交或回滚事务。
9)RM删除undolog中的数据或回滚恢复undolog中的数据

2.2 AT模式与XA的区别

  1. XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
  2. XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
  3. XA模式强一致;AT模式最终一致
    简单来说,AT模式使用起来更加简单,无业务侵入,性能更好。因此企业90%的分布式事务都可以用AT模式来解决。

玉喵
1 声望2 粉丝

学习成长的鸡肋 好好好不积累要鸡肋