首页 > 其他分享 >AT、TCC、SAGA 和 XA 事务模式

AT、TCC、SAGA 和 XA 事务模式

时间:2024-08-07 15:56:40浏览次数:13  
标签:事务 场景 SAGA XA 业务 一致性 TCC 分布式

分布式事务是指跨多个服务或数据库的事务,这些事务需要在各个参与者之间保持一致性。以下是四种常见的分布式事务模式:AT(Automatic Transaction)、TCC(Try-Confirm/Cancel)、SAGA 和 XA 事务模式。

1. AT(Automatic Transaction)

简介
AT 是由阿里巴巴提出的分布式事务解决方案,属于 Seata 框架的一部分。它将分布式事务的复杂性隐藏在框架内部,开发者只需要专注于业务逻辑。

应用场景

  • 适用于需要强一致性的电商订单、支付等场景。
  • 适用于单服务内的事务划分明显的场景。

优点

  • 开发简单,只需注解配置。
  • 框架自动管理事务的提交和回滚。

缺点

  • 依赖于 Seata 框架,增加了一定的运维成本。
  • 对性能有一定影响,因为需要协调全局事务。

2. TCC(Try-Confirm/Cancel)

简介
TCC 是一种业务层的两阶段提交方案。事务分为 Try(尝试执行)、Confirm(确认提交)和 Cancel(取消回滚)三个阶段。每个阶段都有相应的业务接口。

应用场景

  • 适用于对性能要求较高的场景,因为它能减少锁竞争。
  • 适用于需要明确控制事务提交和回滚逻辑的复杂业务场景。

优点

  • 较高的性能,减少了锁竞争。
  • 灵活性高,能够明确控制每个事务阶段。

缺点

  • 开发复杂,需要定义和实现 Try、Confirm 和 Cancel 接口。
  • 需要业务系统对事务一致性负责。

3. SAGA

简介
SAGA 是一种长事务解决方案,事务被拆分成一系列子事务,每个子事务都有对应的补偿操作。如果某个子事务失败,已经成功的子事务会执行相应的补偿操作来撤销之前的动作。

应用场景

  • 适用于长时间运行的业务流程,如订单处理、账单支付等。
  • 适用于需要分阶段提交的业务场景。

优点

  • 较好的扩展性和灵活性,适合长事务。
  • 可以并行执行子事务,提高性能。

缺点

  • 补偿操作的设计和实现比较复杂。
  • 可能出现补偿操作失败的情况,需要额外处理。

4. XA

简介
XA 是一种严格的两阶段提交协议,由 X/Open 组织提出,广泛应用于数据库层面的分布式事务。事务分为 prepare(准备)和 commit/rollback(提交/回滚)两个阶段。

应用场景

  • 适用于需要强一致性的金融、银行等高可靠性场景。
  • 适用于多数据库的事务处理。

优点

  • 提供强一致性保障。
  • 自动化程度高,由数据库层面支持。

缺点

  • 性能较差,因为需要锁住资源直到事务提交或回滚。
  • 实现复杂,依赖数据库的 XA 支持。

对比

特性ATTCCSAGAXA
一致性强一致性最终一致性最终一致性强一致性
性能中等
开发复杂度中等中等
适用场景单服务内事务复杂业务场景长事务金融、银行等场景
事务管理框架自动管理业务系统管理业务系统管理数据库管理

总结

选择合适的分布式事务模式需要根据具体的业务需求和技术背景来决定。AT 适合简单业务场景,TCC 适合复杂且对性能要求高的业务,SAGA 适合长事务,而 XA 适合对一致性要求极高的金融领域。

标签:事务,场景,SAGA,XA,业务,一致性,TCC,分布式
From: https://blog.csdn.net/u011019141/article/details/140994348

相关文章

  • 735-基于3U VPX的AGX Xavier GPU计算主板
    基于3UVPX的AGXXavierGPU计算主板 一、板卡概述     基于3UVPX的JetsonAGXXavier GPU计算主板是LINUX环境下软件开发等理想工具。拥有VPX标准连接器和特性的接口。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合......
  • 神经网络之卷积篇:详解边缘检测示例(Edge detection example)
    详解边缘检测示例卷积运算是卷积神经网络最基本的组成部分,使用边缘检测作为入门样例。在这个博客中,会看到卷积是如何进行运算的。在之前的博客中,说过神经网络的前几层是如何检测边缘的,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体,这个例子中就是......
  • airflow DAG/PIPELINE examples reference
    data-pipelines-with-apache-airflowhttps://github.com/BasPH/data-pipelines-with-apache-airflowCodeforDataPipelineswithApacheAirflowhttps://www.manning.com/books/data-pipelines-with-apache-airflowAsuccessfulpipelinemovesdataefficiently,mi......
  • 开发框架DevExpress XAF v24.2产品路线图预览——增强跨平台性
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。DevExpressXAF是一个.NET应用程序框架,它可以帮助您用DevExpressBlazor和W......
  • 1、.Net UI框架:Xamarin Forms - .Net宣传系列文章
    Xamarin.Forms是一个跨平台移动应用开发框架,它允许开发者使用C#和.NET进行一次编码,然后在iOS、Android、macOS和Windows等多个平台上运行。Xamarin.Forms是Xamarin的一部分,而Xamarin是微软的.NET跨平台开发工具集,它提供了一套API,可以在不同的设备上创建本地UI。Xama......
  • 如何在python中使用xarray打开grib2文件?
    将xarray导入为xr导入cfgrib导入生态码将pandas导入为pddata=xr.open_dataset(r"C:\Users\new\forecast_data.grib2",engine="cfgrib")这是我的代码。我只想使用xarray读取这个文件。错误是:无法识别的引擎cfgrib必须是以下之一:['netcdf4'、'scipy'、'......
  • Python | ValueError: invalid literal for int() with base 10: ‘example’
    Python|ValueError:invalidliteralforint()withbase10:‘example’在Python编程中,遇到ValueError:invalidliteralforint()withbase10:'example'这样的错误通常意味着你试图将一个字符串转换为整数,但该字符串包含非数字字符。这种错误常见于数据输入、文......
  • 2024-08-03:用go语言,给定一个从 0 开始的字符串数组 `words`, 我们定义一个名为 `isPref
    2024-08-03:用go语言,给定一个从0开始的字符串数组words,我们定义一个名为isPrefixAndSuffix的布尔函数,该函数接受两个字符串参数str1和str2。当str1同时是str2的前缀和后缀时,函数返回true;否则返回false。例如,isPrefixAndSuffix("aba","ababa")返回true,因为"ab......
  • [Typescript] Advance query builder example
    typeBaseTable={[colName:string]:string|number|boolean;}typeColumns<Tablesextends{[tableName:string]:BaseTable}>={[KinkeyofTables]:Kextendsstring?(keyofTables[K]extendsstring?`${K}.${keyofTables[K]}`:never):......
  • [Typescript] Query builder example
    classQueryBuilder{privatefields:string[]=[]privatewheres:Record<string,string>={}privatetable:string=""select(...columns:string[]){this.fields=columnsreturnthis}from(table:string){t......