分布式事务解决方案(fescar+本地事务)

1.分布式事务解决方案
1.1 事务回顾
事务四大特性ACID :
原子性atomicity /ˌætəˈmɪsəti/ 是不可分割的最小操作单位,要么同时成功,要么同时失败。
一致性 consistency /kənˈsɪstənsi/ 事务操作前后,数据总量不变
隔离性 isolation /ˌaɪsəˈleɪʃn/ 多个事务之间,相互独立。
持久性 durability /ˌdjʊərəˈbɪləti 当事务提交或回滚后,数据库会持久化的保存数据。
本地事务 :

在这里插入图片描述
1.2 分布式事务介绍

在这里插入图片描述
1.3 分布式事务理论
1.3.1 CAP理论
C : Consistency 一致性
A :Availability可用性
P : Partition tolerance 分区容错性 ----> 分布式环境下,保证由于网络原因,而造成系统之间的通信不同引发的问题 ;
在这里插入图片描述

分布式环境下, 必须要保证分区容错性 ; 而一致性越高 , 可用性则越差 ; 可用性越高 , 则一致性越差 ;
组合 : AP , CP
1.3.2 BASE理论
基本可用 : 牺牲一部分服务性能 , 功能 ;
软状态 : 中间状态 , 不同节点的数据同步 , 允许存在一定的延迟 ;
最终一致性 : 需要保证数据最终的状态的是一致的 ;
2分布式事务的解决方案
2.1 2PC 两阶段提交
XA规范 : 分布式事务的规范 , 该规范中定义了两组接口 : Transaction Manager , Resource Manager ;

在这里插入图片描述
1). 准备 : 各个分支事务, 提交分支事务 ;
2). 提交 : 根据各个分支事务回执 (ok, no) ; 如果所有的分支事务回执的是Ok, 则提交全局事务 ; 如果有其中一个回执了no,回滚所有分支事务 ;
2.2 TCC 事务补偿
T : Try ----------> 检测及预留资源
C : Confirm -------> 确认提交事务
C : Cancel --------> 如果业务执行出错, 取消(回滚)

在这里插入图片描述
每一个分支事务的操作, 都需要开发三个接口 : try , confirm , cancel ; 编程相对繁琐 ;
2.3 MQ实现事务最终一致性
该方法在业界是用的比较多的 ; 核心 : 本地事务 + MQ 实现 ;
在这里插入图片描述

3.基于Seata实现分布式事务
3.1 Fescar介绍
Seata (原名Fescar) 是阿里巴巴旗下的开源的分布式事务框架 ; 18年才开源的 ;
Seata 是基于XA规范的2PC两阶段提交协议的 , 并对XA规范进行优化 : 单点问题, 同步阻塞 , 数据不一致 , 单一数据源 ;
优点 : 性能高 ; 对业务代码侵入性较低 ;

  1. TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
  2. XID 在微服务调用链路的上下文中传播。
  3. RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
  4. TM 向 TC 发起针对 XID 的全局提交或回滚决议。
  5. TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求
    3.2 Fescar原理
    在这里插入图片描述

Global Tranaction : 全局事务 , 分布式事务 ;
Branch Transaction : 分支事务 , 各个服务的本地事务 ;
3.3 两种模式
3.3.1 AT模式
前提 : 支持两阶段提交的关系型数据库 ;
1). 第一个阶段

在这里插入图片描述
回滚日志 : 用户在本地事务操作失败 , 回执no之后, 当前全局事务中的所有的本地事务都需要回滚 , 基于回滚日志进行回滚 ;
2). 第二个阶段
成功的情况 :
在这里插入图片描述

所有的分支事务, 都提交成功, 提交全局事务 ; 删除回滚日志即可 ;

失败情况:
在这里插入图片描述
如果决议是全局回滚,RM 收到协调器发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记 录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚

3.3.2 MT模式
针对redis , 文件系统 都是可以的 ;
在这里插入图片描述
4.使用
4.1. 安装启动fescar-server
在这里插入图片描述
4.2.需要添加分布式事务的微服务添加依赖

在这里插入图片描述

发布了120 篇原创文章 · 获赞 9 · 访问量 7349

猜你喜欢

转载自blog.csdn.net/weixin_44993313/article/details/104583158