Seata分布式事务AT、TCC、SAGA、XA模式

news2024/11/10 11:09:35

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。

AT模式

🍮实现原理
阿里SEATA独有模式,通过生成反向SQL实现数据回滚,需要在数据库额外附加UNDO_LOG表,UNDO_LOG表中保存的是自动生成的回滚SQL。

举个🌰

insert into 订单 values(1001,...)
update 仓储 set num = 300 where gid =100

自动生成UNDO_LOG回滚日志

DELETE FROM 订单 where id =1001
update 仓储 set num=210 where gid = 100

特点

性能:高
模式:AP,存在数据不一致的中间状态
难易程度:简单,靠SEATA自己解析反向SQL并闻滚

使用要求:
所有服务与数据库必须要自己拥有管理权,因为要创建UNDO LOG表
最好都是MySQL,听说也支持PSQL,不过没试验过

应用场景:
高并发互联网应用,允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性。

TCC模式

🍮实现原理
TCC是Try-尝试、Confirm-确认、Cancel-取消Try尝试阶段,对资源进行锁定。
Confirm确认阶段,对资源进行确认,完成操作Cancel取消阶段,对资源进行还原,取消操作。

在代码与数据表中扩展字段,实现对特定数据资源的锁定。

Try阶段:预留所需的资源,预增金额,冻结库存
Confirm确认阶段:把预留的资源放入真实资源字段,清空预留资源
在这里插入图片描述

cancel阶段:对锁定的资源释放
在这里插入图片描述

特点

性能:好
模式:AP,存在数据不一致的中间状态
难易程度:复杂,SEATA TC只负责全局事务的提交与回滚指令,具体的回滚处理全靠程序员自己实现(每个业务流程车都需手动写代码TRY,COMMIT,CANCEL三个对应的方法)

使用要求:
所有服务与数据库必须要自己拥有管理权
支持异构数据库,可以使用不同选型实现

应用场景:
高并发互联网应用,允许数据出现短时不一致,可通过对账程序或补录来保证最终一致性。

SAGA模式

🍮实现原理
Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务具体实现者开发实现。
在这里插入图片描述
这里比如支付宝只提供了转账接口和退款接口,而你具体负责商城订单业务,正向流程下单-支付成功-扣减库存-订单状态变更为待发货。

如果扣减库存失败,比如库存为0扣减失败了,这时候你需要自行调用支付宝的退款接口,模拟事务回滚的业务流程,支付宝是不会帮你实现事务回滚的。

特点

性能:不一定,取决于三方服务
模式:AP,存在数据不一致的中间状态
难易程度:复杂,提交与回滚流程全靠程序员编排

使用要求:
在当前架构引入状态机机制,类似于工作流
无法保证隔离性

应用场景:
需要与第三方交互时才会考虑,例如:调用支付宝支付接口->出库失败->调用支付宝退款接口

XA模式

🍮实现原理
基于数据库的XA协议来实现2PC又称为XA方案,数据库必须实现并支持XA协议
在这里插入图片描述

特点

性能:低
模式:CP,强一致性
难易程度:简单,基于数据库自带特性实现,无需改表

使用要求:
使用支持XA方案的关系型数据库(主流都支持)

应用场景:
金融行业,并发量不大,但数据很重要的项目

总结:

可以看出,除了TCC基本都是两阶段模式,成功提交,失败回滚。而根据实现难度,TCC和SAGA都需要手动实现业务回滚代码,复杂度要高一些。其他都可以有数据库或者第三方事务管理器实现回滚业务流程,而你只需要专注业务流程本身。

AT,SAGA模式需要所有参与方都有数据库权限,这点如果项目参与方都是一起的不涉及第三方或许可以实现。但如果你调用的是第三方服务,显然不可能支持,第三方更不可能给你提供数据库访问权限,比如支付服务,任何第三方支付都不可能提供数据库权限给你。

因此要综合考虑自己的使用情况,再决定使用哪种模式。
但是现实中,分布式事务还是要根据情况去使用,绝大多数项目能不是使用分布式事务就不会使用。只要确保最终事务一致性即可。

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

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

相关文章

STM32读取24位模数转换(24bit ADC)芯片ADS1231数据

STM32读取24位模数转换(24bit ADC)芯片ADS1231数据 ADS1231是一款TI公司出品的24位ADC芯片,常用于与称重传感器配合实现体重计的应用。这里介绍STM32读取ADS1231的电路和代码实现。ADS1231的特点为通过硬件管脚可控制两种采样速率&#xff0…

日期与字符串相互转化(自定义日期工具类总结,Hutool工具类使用)

一、将日期格式化成字符串输出(Date转String) Java旧的时间API饱受诟病,Java8以后提供了新的时间API,在java.time包下。 //获取当前时间LocalDateTime dateLocalDateTime.now();//创建日期时间对象格式化器,日期格式类…

Hadoop学习---11、HA高可用

1、Hadoop HA高可用 1.1 HA概述 1、所谓HA(High Availablity),即高可用(7 * 24小时不中断服务)。 2、实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。 …

数字化转型,低代码开发真的靠谱?

关于数字化转型,有这么一种定义,即利用数字化技术和能力来驱动企业商业模式创新和商业生态系统重构的一种途径与方法。通俗点说,数字化的核心和目的就是通过数字化技术,实现业务的转型、创新和增长,提供新的营收点与价…

超详细,性能测试三大模式详解,资深测试老鸟一文道破...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在性能测试工作中…

IC芯片自动测试系统平台ATECLOUD:提高半导体制造效率与质量

近年来,随着半导体产业的快速发展,IC芯片在各种电子设备中扮演着越来越重要的角色。然而,为了满足不断增长的需求和保持竞争力,制造商需要不断提高生产效率并确保产品质量。ATECLOUD——一款基于云计算技术的IC芯片自动测试系统平…

租赁小程序|人车网租赁系统|电动车租赁系统包含哪些功能?

随着科技不断完善,租赁行业的发展也越来越好,电动车也开始进行线上推广租赁,不仅可以让人们更加方便的租用电动车,还让商家可以通过线上模式带动线下的经营,不同于传统的汽车租赁,用户只要打开手机就可以进…

MySQL-5.7.19版本安装详解

MySQL-5.7.19版本安装详解 1. 软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 2. 软件安装 2.1 第一步:解压 下载后会得到mysql-5.7.19-winx64的zip 安装文件,先将其解压解压的路径最好不…

微信小程序导入Vant Weapp ui组件库2023年最新版

微信小程序导入Vant Weapp ui组件库2023年最新版 写这篇文章的原因是Vant Weapp的官方文档快速上手是有一定的问题的,没错,我就是那个试错的人,弄了一下午才发现问题所在,所以写了一篇正确的导入教程。 第一步:在项目…

Python进阶 │反爬虫和怎样反反爬虫

爬虫、反爬虫和反反爬虫是网络爬虫工作过程中一直伴随的问题。 在现实生活中,网络爬虫的程序并不像之前介绍的爬取博客那么简单,运行效果不如意者十有八九。首先需要理解一下“反爬虫”这个概念,其实就是“反对爬虫”。根据网络上的定义&…

PowerShell:因为在此系统上禁止运行脚本,解决方法

运行powershell脚本遇见报错: 无法加载文件 C:\Users\DH\Desktop\cs\rename.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 查了查之后发现是在计算…

差动测试棒如何连接到示波器

差动测试棒提供一个安全的绝缘仪器给示波器使用,它可以转换由高输入的差动电压进入一个低电压并且显示波形在示波器上,使用频率高达100MHz,非常适合大电力测试、研发使用。 差动测试棒输出标是设计在操作示波器1MΩ的输入阻抗的相对衰减量&a…

人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用

如:天空 coco包含pascal voc 的所有类别,并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言,有些图片并没有标注信息,或者有错误标注信息。…

需求:js给html添加css

目前发送请求&#xff0c;请求回html&#xff1a;<div class"articleRecommendation_con"> <a href"https://weekly.caixin.com/2023-05-26/102059365.html"><img src"https://img.caixin.com/2023-05-27/168515251870385…

如何选择适合平台的直播美颜SDK:从技术和商业角度考虑

直播美颜SDK作为一种技术解决方案&#xff0c;可以帮助直播应用实现优秀的美颜效果&#xff0c;提高用户体验和粘性。然而&#xff0c;如何选择适合你应用的直播美颜SDK&#xff0c;需要从技术和商业角度综合考虑。本文将从这两个角度出发&#xff0c;为你介绍如何选择适合你应…

手把手带你读vue2文档(基础篇总结)

目录 声明式渲染 v-bind v-if条件与循环 name命名 学会log打印 一些js方法 双向绑定v-model和v-bind 那么请实现一个复选框吧 自定义标签模板 vue2实例 数据与方法 你提到vue有两种数据和方法&#xff0c;js是不是只有一种 vue2自带的实例和方法 vue2$会和jQuery冲…

四站精彩回顾 | Fortinet Accelerate 2023·中国区巡展火热进行中

Fortinet Accelerate 2023中国区巡展 上周&#xff0c;Fortinet Accelerate 2023中国区巡展分别走过青岛、南京、长沙、合肥四站&#xff0c;Fortinet携手太平洋电信、亚马逊云科技、中企通信等云、网、安合作伙伴&#xff0c;与各行业典型代表客户&#xff0c;就网安融合、网…

spring事务管理详解和实例(事务传播机制、事务隔离级别)

目录 1 理解spring事务 2 核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务&#xff08;JPA&#xff09; 2.2 基本事务属性的定义 2.2.1 传播行为 2.2.2 隔离级别 2.2.3 只读 2.2.4 事务超时 2.2.5 回滚规则 2.3 事务状态 3…

盘点索引常见的11个知识点

今天来盘点一下关于MySQL索引常见的知识点 本来这篇文章我前两个星期就打算写了&#xff0c;提纲都列好了&#xff0c;但是后面我去追《漫长的季节》这部剧去了&#xff0c;这就花了一个周末的时间&#xff0c;再加上后面一些其它的事&#xff0c;导致没来得及写 不过不要紧&…

chatgpt赋能python:Python中0的输入方法:完整指南

Python中0的输入方法&#xff1a;完整指南 Python是一门强大的编程语言&#xff0c;广泛应用于数据分析、人工智能、网络应用等领域。在Python中&#xff0c;输入0有多种方法&#xff0c;因此本文将带您深入了解Python中0的输入方式&#xff0c;包括基础类型、字符串和列表等结…