首页 > 其他分享 >聊聊分布式事务

聊聊分布式事务

时间:2024-04-10 23:22:05浏览次数:17  
标签:事务 场景 数据库 业务 补偿 聊聊 分布式

分布式事务,算是分布式系统极为重要的一个模块。

分布式事务的概念,网上随手可见,我不多讲。

今天主要想聊聊,分布式事务的解决思路及其适用场景。

在说具体思路之前,我先假设一个业务调度功能,分别会调用A、B、C三个服务。

要保证这三个服务的事务,该怎么办呢?

可靠消息队列

A业务完成并提交数据库事务后,发送消息;B收到消息后,完成业务并提交数据库事务后,发送消息;

C收到消息后,完成业务并提交数据库事务。

整个过程,要保证尽一切可能完成,极端情况甚至需要人工介入。

优点:系统性能好(无需数据库锁)。

缺点:只能保证最终一致性,且可能需要人工介入。

适用场景:比如支付公司,交易和清分,便很适合通过可靠消息队列来实现,能极大提升交易接口性能。

 

XA:

通过数据库事务来实现。

优点:真正的数据库级别事务。

缺点:性能低。若A、B、C跨公司,则完全无法实现。

 

TCC:

Try、Commit、Cancel

先预留业务资源,成功则Commit,失败则Cancel。

优点:性能高。

缺点:实现复杂,容易出错。且有些业务,无法预留业务资源。

适用场景:通过账户交易下单类业务。比如将钱充值到加油App后,

通过App账户加油。(这个业务,必须先加油,再扣钱,所以必须锁住账户余额)

 

AT:

A、B、C分别执行并提交本地数据库事务,当失败时,执行补偿SQL。这个方案,需要借助框架,反向

SQL是框架自动生成且由框架自动执行。

优点:性能高,实现简单。

缺点:由于没有预留业务资源,可能导致资源无法回收。

适用场景:公司内部系统,跨公司系统无法使用。

 

SAGA:

业务编排 + 反向补偿,反向补偿又分为实时补偿和定时补偿。

优点:性能高,跨公司事务也能支持。

缺点:可能出现业务无法补偿的情况,所以对业务编排有要求。

适用场景:跨公司类的长事务业务。

 

标签:事务,场景,数据库,业务,补偿,聊聊,分布式
From: https://www.cnblogs.com/kingcode/p/18063605

相关文章

  • 分布式任务调度平台XXL-JOB:调度日志打印时区问题
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Q......
  • Redis支持事务 yii操作示例代码
    //首先确保已经配置了Yii的Redis组件//在配置文件中(例如:config/main.php)return[//...'components'=>['redis'=>['class'=>'yii\redis\Connection','hostname'=>&......
  • MXnet安装 与入门 符号式运算 Symbol 数据同步 KVStore 自动并行计算 数据的导出与载
    MXnet参考通过MXNet/Gluon来动手学习深度学习在线githubpdf代码深度学习库MXNet由dmlc/cxxnet,dmlc/minerva和Purine2的作者发起,融合了Minerva的动态执行,cxxnet的静态优化和Purine2的符号计算等思想,直接支持基于Python的parameterserver接口,使......
  • 聊聊发版提测和发布评审
    看到有同学提问关于测试准入准出标准的问题,说自己公司研发测试流程混乱,线上发布后问题比较多,不知道如何优化解决。其实这个问题一般在初创公司或者新项目出现的比较多,优化的方向和方法业内也比较成熟了,这篇文章谈谈我对于准入准出的理解。 从软件工程的角度来说,一个软件产品......
  • spring的事务是什么?与数据库的事务是否一样
    spring的事务是什么?与数据库的事务是否一样先说一下什么是事务,事务:是对数据库的一些列操作。之前一直觉得事务只针对于数据库当中,5种隔离级别,7种传播行为,后来才发现这是针对Spring的,对数据库来说隔离级别只有4种,Spring多了一个DEFAULT这是一个PlatfromTransactionManager默认的......
  • 事务和锁机制是什么关系? 开启事务就自动加锁了吗
    数据库锁因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念。锁的分类从对数据库操作的类型读锁(共享锁):针对同一块数据,多个......
  • GO——6分布式锁分布式id___自己使用redis实现,(官方),,分布式id,,go协程,,gin框架,,
    分布式锁分布式id#锁的作用:保证多线程并发情况下,数据的安全-互斥锁-递归锁只能保证同一个进程下的线程#django项目---》部署在多台机器上---》下单场景---》悲观锁--》同一时刻,必须获得锁才能进入下单流程,释放锁--》别人才能进入下单流程-用my......
  • 聊聊消息中间件
    消息中间件,广泛应用于分布式系统的架构设计之中。一提到业务解耦、流量削峰的技术选型,很容易就想到,是时候该消息中间件上场了。我想聊聊两个问题。消息中间件从设计来讲,应该有哪些组件?消息中间件的使用中,常碰到的问题有哪些?又该如何解决?消息中间件的设计架构消息中间件的架构......
  • 宁夏国有资产投资控股集团评估机构及会计师事务所入库项目招标
    宁夏国有资产投资控股集团有限公司评估机构及会计师事务所入库项目招标公告1.招标条件宁夏国有资产投资控股集团有限公司评估机构及会计师事务所入库项目已具备招标条件,采购资金为自筹,现对该项目进行公开招标。2.项目概况与招标范围2.1项目概况:为规范集团公司评估机构......
  • openGauss事务机制中MVCC技术的实现分析
    openGauss事务机制中MVCC技术的实现分析概述事务事务是为用户提供的最核心、最具吸引力的数据库功能之一。简单地说,事务是用户定义的一系列数据库操作(如查询、插入、修改或删除等)的集合,从数据库内部保证了该操作集合作为一个整体的原子性(Atomicity)、一致性(Consistency......