《深入理解分布式事务与Seata解决方案》

news/2024/10/13 21:24:47

分布式事务-重要

1.数据库的事务

1、事务概念

事务是一个完整的,不可分割操作单元。

整个事务要么全部执行成功,要么全部执行失败。

事务具备4个特性:ACID

A:原子性【】

C:一致性【数据的一致性:事务开始前和事务结束后,数据总量不变】

I:隔离性【事务相互隔离,互不影响】

D:持久性【事务一旦提交,永久落盘】

2、传统事务是由谁来控制的?

  • 数据库连接

JDBC:Connection对象

Mybatis:SqlSession

Spring:声明式事务

  • 传统事务:只有是同一个Connection操作的数据库才能够控制住
  • 在分布式系统中出现的事务问题

传统事务的弊端:事务无法形成一个整体全局事务,不符合逻辑,如增加购物车出现问题只是回滚了购物车表,但实际已经增加了订单和减少了库存,出现了脏数据,需要一个全局的事务来调动他们三个事务

产生的情况:

  • 业务跨多个服务实现
  • 业务跨多个数据源实现

什么是分布式事务?:是指在分布式系统中,跨越多个节点或服务执行的一系列操作,这些操作必须作为一个整体来处理,要么全部成功,要么全部失败。这样的机制确保了数据的一致性和完整性,即使是在不同的数据库、服务器或者甚至是不同的地理位置上进行操作。

3、Seata

1、大原理


由TC统一调度和就监控整个事务的过程,检测每个分支RM的存在。

2.解决分布式方案

Seata 是一个开源的分布式事务解决方案,旨在提供高性能和简单易用的分布式事务服务。Seata 支持多种分布式事务模式来解决不同场景下的问题。以下是 Seata 中主要支持的几种分布式事务解决方案:

  1. AT 模式 (Automatic Transaction Mode)
    • AT 模式是 Seata 的默认模式,也是最常用的一种。它基于两阶段提交协议,并且对业务无侵入性。在第一阶段,Seata 会自动拦截并记录 SQL 语句,然后生成反向 SQL(用于回滚操作)。如果所有分支事务都成功,则进入第二阶段提交;如果有任何一个失败,则执行反向 SQL 进行回滚。
    • 特点:对应用代码透明,易于集成。
  2. TCC 模式 (Try-Confirm-Cancel)

    • TCC 模式是一种补偿型事务模型。它将业务逻辑分为三个步骤:Try(尝试)、Confirm(确认)和 Cancel(取消)。在 Try 阶段,各个服务预处理数据,但不真正提交;如果所有服务的 Try 成功,则进入 Confirm 阶段,正式提交更改;若任一 Try 失败或系统出错,则进入 Cancel 阶段,撤销之前的操作。
    • 特点:需要开发者实现特定的接口,但提供了更细粒度的控制。
  3. SAGA 模式

    • SAGA 模式通过定义一系列本地事务,每个事务都有对应的补偿动作。这些本地事务按照顺序执行,一旦某个事务失败,那么就依次执行前面已经成功事务的补偿动作,以达到最终的一致性状态。
    • 特点:适用于长流程、复杂业务场景,要求开发者设计好每一步及其补偿逻辑。
  4. XA 模式

    • XA 模式遵循 X/Open XA 分布式事务规范,这是一种传统的分布式事务处理方式。XA 模式使用全局事务管理器来协调参与事务的所有资源管理者,保证事务的原子性和一致性。
    • 特点:兼容性强,但可能带来较高的性能开销。
  5. MT 模式 (Multi-Terminal Transaction)

    • MT 模式是在 Seata 1.3.0 版本引入的新特性,专为微服务架构下多终端交互场景设计。它允许在同一个全局事务中包含多个客户端发起的子事务,适合于用户界面与后台服务间频繁交互的应用场景。

选择哪种模式取决于具体的业务需求、系统的复杂程度以及对一致性的要求等因素。Seata 提供了灵活的配置选项,使得开发者可以根据实际应用场景选择最合适的方式来管理分布式事务。
3、XA模式【强一致性】
最终统一提交或者回滚,注意数据库需要支持这种操作。

  • 优点

    • 事务的强一致性,满足ACID原则
    • 常用数据库都支持,实现简单,并且没有代码侵入
  • 缺点

    • 因为一阶段需要锁定数据库资源,鞥带二阶段结束才释放,性能较差
    • 依赖关系型数据库实现事务

修改shared-seate.yaml切换模式

Nacos

4、AT模式【最终一致性】

这个有些像模块式操作,一个个拼图既是独立的也可以是一个整体,只要求最终一致性中间过程不管。

举例:RM1执行sql后提交数据并在undo-log记录更新快照,这里提交的数据是一个中间状态(软状态)。可能不会是最终的数据。但也写入数据库中。并向TC报告状态(已提交)

RM2执行sql异常,那么回想TC报告异常(已失败),undo-log没有变化,报告事务状态(失败)检查后发现失败,触发TC回滚,这里RM1调用undo-log恢复log数据,恢复完毕后会删除log数据。

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

阶段一RM的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态

阶段二提交时RM的工作:

  • 删除undo-log即可

阶段二回滚时RM的工作:

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

5.AT与XA的区别

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

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
  • XA模式强一致;AT模式最终一致

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

高效工单系统推荐与性价比分析

好用工单系统需用户友好、功能强大、多渠道支持等。ZohoDesk性价比高,满足各企业需求,提供多种版本,支持多渠道、自动化及数据分析,性价比高,适合不同规模企业使用。一、什么样的工单系统好用 1. 用户友好 一个好用的工单系统首先要具备用户友好的界面和操作流程。这包括简…

代码审计[二] [GYCTF2020]Easyphp

代码审计 做的好难受的一道反序列化 [GYCTF2020]Easyphp 参考[GYCTF2020]Easyphp-CSDN博客 查看整个网站,尝试弱口令登录,不行。猜网页,register、upload都试了一下,发现www.zip可以下载网页源码。 login.php <?php require_once(lib.php); ?> <?php $user=ne…

2024-2025第一学年 20241410苏尚君《计算机基础与程序设计》第三周学习总结

这个作业属于哪个课程 (2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 (2024-2025-1计算机基础与程序设计第三周作业这个作业的目标 门电路,组合电路,逻辑电路,冯诺依曼结构作业正文教材学习内容总结 一、门 定义: “门”通常指的是逻辑门(Logic Gates),这是构…

Docker-nginx数据卷挂载

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。 以Nginx为例,我们知道Nginx中有两个关键的目录:html:放置一些静态资源 conf:放置配置文件 如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到c…

齐次方程组(超定方程组)的最小二乘解,及利用其拟合空间平面

一、基础理论齐次方程组形如:。在一些优化,拟合等问题中经常出现,我们常考虑方程多于未知数元数的情况------超定方程组。 首先对于平凡解x=0我们一般不感兴趣,一般我们会寻求方程组的非零解。 如果x是方程组的一个解,那么对于,也是齐次方程组的解,一个合理的假设是只求满…

2024-2025 20241313刘鸣宇《计算机基础与程序设计》第三周学习总结

1.阅读《C语言程序设计》,对有疑问的地方寻找AI进行解答 2. 3.《计算机科学概论》学习总结 (1)第二章 学习了不同进制(二进制,十进制,八进制,十六进制)之间的转换 学习了其他技术系统中的运算规则 (2)第三章 1.信息与数据的区别:信息是数据的一种 2.为何进行数据压缩…

MIPI/LVDS/PCIE/HDMI 设计规范

参考链接: 1、MIPI/LVDS/PCIE/HDMI 2、接口简介(HDMI 、eDP/DP、LVDS、VGA、YPbPr、DVI、MHL、MIPI-DSI、VbyOneHS) 3、干货 | 带你了解MIPI,LVDS,RGB,HDMI视频高速接口

imgbb

<script async src="https://imgbb.com/upload.js"></script>关于 ZH (CN)上传 登录 注册账户PRIVACY NOTICELast updated January 22, 2022 Thank you for choosing to be part of our community at Imgbb ("we", "us" or "ou…