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

米饭7个月前行业资讯382

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



相关文章

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

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

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

MySQL运维之分库分表与读写分离

MySQL运维之分库分表与读写分离

分库分表1.介绍问题分析随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较...

云端之上的边缘:解读云计算与边缘计算的战略融合

云端之上的边缘:解读云计算与边缘计算的战略融合

一、引言在当前的信息化和数字化浪潮中,云计算和边缘计算作为两种重要的计算模型,各自在不同的场景中发挥着不可替代的作用。它们不仅在概念、特点、应用场景上有所不同,而且在实际应用中常常相互协作,形成了一种...

BetaFlight模块设计之三十二:MSP协议模块分析

BetaFlight模块设计之三十二:MSP协议模块分析

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。1. MSP协议模块1.1 MSP描述MSP是Multiwii Serial Protocol的缩写,截止目前为止有两个版...

如何理解运维

如何理解运维

运维工程师(运营),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率,优化资源利用率提高整体的投资回报率。运维工程师面对的最大挑战是大规模集群的管理问题,如何管理好几十万台服务器上的...

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

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

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

发表评论    

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