分布式事务最终一致性解决方案有哪些?MQ、TCC、saga如何实现?
ccwgpt 2025-05-02 16:53 38 浏览 0 评论
JTA 方案适用于单体架构多数据源时实现分布式事务,但对于微服务间的分布式事务就无能为力了,我们需要使用其他的方案实现分布式事务。
1、本地消息表
本地消息表的核心思想是将分布式事务拆分成本地事务进行处理。
以本电商为例子,在订单系统新增一条消息表,将新增订单和新增消息放到一个事务里完成,然后通过轮询查询方式查询消息表,将消息推送到 MQ,库存系统去消费 MQ。
订单系统,添加一条订单和一条消息,在一个事务里提交。使用定时任务轮询查询状态为未同步的消息表,发送到 MQ,如果发送失败,就重试发送。
库存系统,接收 MQ 消息,修改库存表,需要保证幂等操作。如果修改成功,调用 RPC 接口修改订单系统消息表的状态为已完成或者直接删除这条消息。如果修改失败,可以不做处理,等待重试。
订单系统中的消息有可能由于业务问题会一直重复发送,所以为了避免这种情况可以记录一下发送次数,当达到次数限制之后报警,人工接入处理;库存系统需要保证幂等,避免同一条消息被多次消费造成数据一致。
本地消息表这种方案实现了最终一致性,需要在业务系统里增加消息表,业务逻辑中多一次插入的 DB 操作,所以性能会有损耗,而且最终一致性的间隔主要由定时任务的间隔时间决定。
2、MQ 可靠消息最终一至事务
消息事务的原理是将两个事务通过消息中间件进行异步解耦。
订单系统执行自己的本地事务,并发送MQ 消息,库存系统接收消息,执行自己的本地事务。
乍一看,好像跟本地消息表的实现方案类似,只是省去了对本地消息表的操作和轮询发送 MQ 的操作,但实际上两种方案的实现是不一样的。
消息事务一定要保证业务操作与消息发送的一致性,如果业务操作成功,这条消息也一定投递成功。
消息事务依赖于消息中间件的事务消息,基于消息中间件的二阶段提交实现的,RocketMQ 就支持事务消息。
1、发送 Prepare 消息到消息中间件。发送成功后,执行本地事务。
2、如果事务执行成功,则 Commit,消息中间件将消息下发至消费端。
3、如果事务执行失败,则回滚,消息中间件将这条 Prepare 消息删除。
4、消费端接收到消息进行消费,如果消费失败,则不断重试。
3、最大努力通知
最大努力通知相比前两种方案实现简单,适用于一些最终一致性要求较低的业务,比如支付通知,短信通知这种业务。
以支付通知为例,业务系统调用支付平台进行支付,支付平台进行支付,进行操作支付之后支付平台会尽量去通知业务系统支付操作是否成功,但是会有一个最大通知次数。
如果超过这个次数后还是通知失败,就不再通知,业务系统自行调用支付平台提供一个查询接口,供业务系统进行查询支付操作是否成功。
4、补偿事务 TCC
TCC,Try-Confirm-Cancel 的简称,针对每个操作,都需要有一个对应的确认和取消操作。
当操作成功时调用确认操作,当操作失败时调用取消操作,类似于二阶段提交,只不过是这里的提交和回滚是针对业务上的,所以基于 TCC 实现的分布式事务也可以看做是对业务的一种补偿机制。
TCC 三阶段:
Try 阶段:对业务系统做检测及资源预留,如库存占用。
Confirm 阶段:对业务系统做确认提交,Try 阶段执行成功并开始执行 Confirm 阶段,默认Confirm 阶段是不会出错的。即:只要 Try 成功,Confirm一定成功。
Cancel 阶段:在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
Try 阶段:订单系统将当前订单状态设置为支付中,库存系统校验当前剩余库存数量是否大于 1,然后将可用库存数量设置为库存剩余数量 -1。
如果 Try 阶段执行成功,开始执行Confirm 阶段,将订单状态修改为支付成功,库存剩余数量修改为可用库存数量。
如果 Try 阶段执行失败,执行 Cancel 阶段,将订单状态修改为支付失败,可用库存数量修改为库存剩余数量。
TCC热门框架:TCC transaction,himly,ByteTCC
其实TCC说白了就是你的一个事务情求,需要提拱三个接口,一下占用库存、一个实际扣减库存、一个返还库存(如果占用失败,本地事务自动回滚,如果占用成功,由事务管理器高用返还接口返还库存占用)。
5、saga事务
saga是将每个接口,拆分为2个接口,一个是业务接口,另外一个是补偿接口,相当于就是说将tcc里面的try和confirm合并为一个接口,就是先执行业务接口,直接就尝试完成整个业务逻辑的操作。然后如果在服务调用链条里面,某个服务的业务接口执行失败了,那么直接对已经执行成功的所有服务都调用其补偿接口,将之前执行成功的业务逻辑给回滚。
主要是两种思想,一种是编排模式,一种是命令模式
编排模式:是事件驱动类型的模式,就是每个服务执行成功了自己发布个事件,下一个服务会监听到这个事件,然后继续执行。
优点在于去中心化;缺点在于太麻烦了,如果你有连续几十个服务连续调用,会导致服务对消息的监听非常复杂,而且不好调试和定位问题,服务调用异常,服务调用链的问题排查特别麻烦,引入一个MQ,特别不好,你的服务执行依赖于MQ完成各个服务的调用,引入了复杂性,如果MQ挂掉了以后呢?事务还是会存在问题。
命令模式:其实说白了,就是某个服务如果要开启一个saga分布式事务,那么就得自己搞一个类似saga流程管理器的东西,然后来负责依次调用和执行各个服务,如果某个服务调用失败,就对之前调用成功的服务依次执行补偿接口。
6、seata分布式
这个是由阿里开源的,可以百度一下,其实就是有个seata的管理组件,有点结合了saga和TCC,就是只有一个Confirm,成功了就成功了,如果没成功,构建回滚SQL,执行回滚即可。
相关推荐
- WAIC2024丨明日上午9点,不见不散!共同探讨智能社会与全球治理框架
-
大咖云集,硕果闪耀WAIC2024世界人工智能大会智能社会论坛将于7月5日9:00-12:00与你相约直播间WAIC2024上海杨浦同济大学哔哩哔哩多平台同步直播探讨智能社会与全球治理框架WAIC...
- 约基奇:森林狼换来戈贝尔时大家都在嘲笑 他们的阵容框架很不错
-
直播吧5月4日讯西部季后赛半决赛,掘金将迎战森林狼,约基奇赛前接受采访。约基奇说道:“当蒂姆-康纳利(森林狼总经理、前掘金总经理&曾选中约基奇)做了那笔交易(换来戈贝尔)时,每个人都在嘲笑他...
- 视频号带货为什么一个流量都没有?顶级分析框架送给你
-
视频号带货为什么一个流量都没有?遇到问题,一定是步步来分析内容,视频号带货一个流量都没有,用另外一个意思来讲,就可以说是零播放。为什么视频号带货一个流量都没有?跟你说再多,都不如来个分析框架。1、是否...
- 基建狂魔!开工仅一年,黄河足球场主体框架已经建好
-
直播吧8月3日讯根据博主“鲁蜜之声”的消息,可容纳6万人的黄河足球场的主体框架已经建好。黄河足球场位于济南新旧动能转换起步区,于在2022年7月1日正式开工,今年7月7日项目主体结构顺利封顶。黄河足...
- TA:NBA已与亚马逊达成新转播合同框架 预计长达10年
-
直播吧04月27日讯据美媒TheAthletic报道,消息人士透露,NBA已经与亚马逊达成了新转播合同的框架。据报道,合同中预计将包括重要的常规赛和季后赛(的转播权),甚至可能包括一部分分区决赛。...
- 美记:截止日前老鹰曾提出科林斯换比斯利+范德彪交易框架
-
直播吧5月26日讯据雅虎名记JakeFischer报道,消息人士透露,在二月份交易截止日期之前,有很多球队有意马利克-比斯利。消息人士称,老鹰队曾与爵士探讨了比斯利和范德比尔特换约翰-科林斯交易框...
- 遥望科技:公司计划基于GPT技术框架做直播带货的AIGC生成
-
遥望科技2月14日在互动平台表示,公司计划基于GPT技术框架做直播带货的AIGC生成,目前仅处于研究阶段,未来能否稳定实现商业化尚没有定论。
- 遥望科技:计划基于GPT技术框架做直播带货的AIGC生成
-
遥望科技3月6日在互动平台表示,公司计划基于GPT技术框架做直播带货的AIGC生成,目前正处于研究阶段,能否稳定商业化尚没有结论。
- 遥望科技:基于GPT技术框架做直播带货AIGC生成,目前正处于研究阶段
-
遥望科技2月13日在投资者互动平台表示,公司计划基于GPT技术框架做直播带货的AIGC生成,目前正处于研究阶段,能否稳定商业化尚没有结论。
- 单场 50W 的茶叶直播话术框架 【完整版】
-
《单场50W的茶叶直播话术框架》完整版话术框架,文末附获取方式!分享一份《单场50W的茶叶直播话术框架》内容包含:开场预热、活动话术、互动话术、福利话术、配合话术、人设话术、预设话术、商品展示...
- 想要做好直播,就要明白直播话术的框架和逻辑#直播技巧#...
-
当你熟练运用话术框架,你会发现直播转化变得轻而易举。一个直播间话术结构包含三个关键点,想要做好直播,一定要点赞收藏此视频,仔细研究。·首先,要具备利他思维。为什么用户会在直播间停留、互动、购买?因为你...
- [一张图]直播电商运营模型,直播架构,直播变现,直播电商产业链
-
直播电商运营模型直播架构直播变现直播电商产业链~~~~~~~~~~~~~~~~~~~...
- 建立结构分析框架(如何构建分析框架)
-
建立结构分析框架结构性分析的方法只有三种:划分结构、寻找因果关系和分类。采用"相互独立/完全穷(MECE)"的分类方法后,通过逐项展开,就可以按排除的难易程度对所有可能的原因进行筛选...
- 投资的基本分析框架(投资的基本分析框架是什么)
-
大道至简。投资的基本分析框架其实非常简单,就是两个概念,一是护城河,二是安全边际。护城河说的是一个企业要能够长长久久地赚钱,安全边际说的要以一个适当的价格获得企业的股权。因此,投资基本上就是在分析一个...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)