微服务保护和分布式事务(5)

米饭3个月前行业资讯170

2.3 XA 模式:

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


XA

TCC

AT

SAGA

这里我们以XA模式和AT模式来给大家讲解其实现原理。


XA 规范是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范提供了支持。


2.3.1 两阶段提交:

正常情况:

image-20241121200527340

异常情况:

image-20241121200540213

一阶段:


事务协调者通知每个事务参与者执行本地事务。

本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁。

二阶段:


事务协调者基于一阶段的报告来判断下一步操作。

如果一阶段都成功,则通知所有事务参与者,提交事务。

如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务。

2.3.2 Seata 的 XA 模型:

Seata 对原始的 XA 模式做了简单的封装和改造,以适应自己的事务模型,基本架构如图:

image-20241121201038925

RM一阶段的工作:


注册分支事务到TC。

执行分支业务 sql 但不提交。

报告执行状态到TC。

RM二阶段的工作:


接收TC指令,提交或回滚事务。

2.3.3 优缺点:

XA模式的优点是什么?


事务的强一致性(只要事务不提交或回滚,会一直持有数据库锁),满足 ACID 原则。

常用数据库都支持,实现简单,并且没有代码侵入。

XA模式的缺点是什么?


因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差。

依赖关系型数据库实现事务。

2.3.4 实现步骤:

首先,我们要在配置文件中指定要采用的分布式事务模式。

seata:
  data-source-proxy-mode: XA


其次,我们要利用@GlobalTransactional标记分布式事务的入口方法(调用者):

image-20241121201937507

2.4 AT 模式:

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。

2.4.1 Seata 的 AT 模式:

基本流程图:

image-20241121202304380

阶段一RM的工作:


注册分支事务。

记录 undo-log(数据快照)。

执行业务 sql 并提交。

报告事务状态。

阶段二提交时RM的工作:


删除 undo-log 即可。

阶段二回滚时RM的工作:


根据 undo-log 恢复数据到更新前。

2.4.2 AT 与 XA 的区别:

简述AT模式与XA模式最大的区别是什么?


XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。

XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。

XA模式强一致;AT模式最终一致。

可见,AT 模式使用起来更加简单,无业务侵入,性能更好。因此企业 90% 的分布式事务都可以用 AT 模式来解决。


参考文献:


黑马程序员


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ



相关文章

【Linux】进程状态

【Linux】进程状态

一、进程三状态转换·新建态:操作系统已经分配了资源给进程了。·就绪态:已经具备了执行的所有必有的条件,但是由于各种原因,暂时无法运行,进程进入就绪状态。·运行状态:当进程处于调度队列当中的时候就处于运...

linux之危险操作

在 Linux 中,某些命令可以对系统造成不可逆的影响,尤其是当以 root 用户(或使用 sudo)执行时。以下是一些不推荐轻易执行的高危命令,除非你非常清楚它们的作用和潜在的后果:rm -rf /...

C++二分算法:1713得到子序列的最少操作次数

C++二分算法:1713得到子序列的最少操作次数

本文涉及的基础知识点二分查找算法合集LeetCode1713题目给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以...

【Docker】在 CentOS 上安装 Docker 的完整指南

【Docker】在 CentOS 上安装 Docker 的完整指南

Docker 是现代软件开发中不可或缺的工具,它提供了一种轻量级的虚拟化解决方案,帮助开发者更方便地打包、分发和管理应用程序。本文将详细介绍如何在 CentOS 系统上安装 Docker,包括必要的前...

MySQL数据库运维篇

MySQL数据库运维篇

一、日志1.1、错误日志它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志是默认开启的,默认存放...

中国式IT运维,趟出自己的“长期主义”河流

2018年,Gartner曾做过一次长达6个月的调查问卷。在这个主题为AIOps的问卷中,Gartner选取了500家各行业头部的企业,针对其当下的IT架构来判断调研企业未来是否会加大对于AIOps的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。