分布式事务解决方案(最终一致性【可靠消息解决方案】)

news2024/12/23 13:35:04

可靠消息最终一致性解决方案

        可靠消息最终一致性分布式事务解决方案指的是事务的发起方执行完本地事务之后,发出一条消息,事务的参与方,也就是消息的消费者一定能够接收到这条消息并且处理完成,这个方案强调的是只要事务发起方将消息发送给事务参与者,事务参与方就一定能够执行完成,事务最终达到一致性的状态

适用的场景

        适用于消息数据能够独立存储,能够减低系统之间耦合度,并且业务对数据一致性的时间敏感度高的场景

需要实现的服务模式

        需要实现的服务模式是可查询操作和幂等操作,需要参与分布式事务的业务服务提供可查询自身事务状态的接口,发生异常时,能够通过接口查询具体的事务状态,这就是可查询操作,参与分布式事务的各个业务接口需要保证数据操作的幂等性。

方案的执行流程

        可靠消息最终一致性方案中,事务发起方执行完本地事务后,通过可靠消息服务将消息发送给事务参与方,事务参与方收到消息后,一定能够成功执行,这里的可靠消息服务可以通过本地消息表实现,也可以通过RocketMq消息队列实现

        首先,事务发起方将消息发送给可靠消息服务,这里的可靠消息服务可以基于本地数据表实现,也可以基于消息队列中间件实现。然后,事务参与方从可靠消息服务中接收消息。事务发起方和可靠消息服务之间、可靠消息服务和事务参与方之间都是通过网络进行通信的。由于网络本身的不稳定性,可能会造成分布式事务问题,因此在实现上,需要引人消息确认服务和消息恢复服务。

        消息确认服务会定期检测事务发起方业务的执行状态和消息库中的数据,如果发现事务发起方业务的执行状态与消息库中的数据不一致,消息确认服务就会同步事务发起方的业务数据和消息库中的数据,保证数据一致性,确保事务发起方业务完成本地事务后消息定会发送成功。

        消息恢复服务会定期检测事务参与方业务的执行状态和消息库中的数据,如果发现事务参与方业务的执行状态与消息库中的数据不一致(这里的不一致,通常指的是事务参与方消费消息后,执行本地事务操作失败,导致事务参与方本地事务的执行状态与消息库中的数据不一致),消息恢复服务就会恢复消息库中消息的状态,使消息的状态回滚为事务发起方发送消息成功,但未被事务参与方消费的状态。

方案的优缺点

        消息最终一致性方案的可靠消息服务可以基于本地消息表和消息队列中间件两种方式实现

基于本地消息表实现的最终消息一致性方案

优点:

  • 在业务应用中实现了消息的可靠性,减少了对消息中间件的依赖

缺点:

  • 绑定了具体的业务场景,耦合度太高,不可公用和扩展
  • 消息数据与业务数据同在一个数据库,占用了业务系统的资源

基于消息队列中间件实现的最终消息一致性方案

优点:

  • 消息数据能够独立存储,与具体的业务数据库解耦
  • 消息的并发性和吞吐量由于本地消息表方案

缺点:

  • 发送一次消息需要完成两次网络交互,一次是消息的发送,另外一次是消息的提交或者回滚
  • 需要实现消息的回查接口,增加了开发的成

需要注意的问题

        使用可靠消息最终一致性方案解决分布式事务问题时,需要注意本地事务与消息发送的原子性问题、事务参与方接收消息的可靠性与幂等性问题

1、事务发送方本地事务与消息发送的原子性问题

  • 产生的原因:可靠消息最终一致性要求事务发起方的本地事务与消息发送的操作具有原子性,也就是事务发起方执行本地事务成功后,一定要将消息发送出去,执行本地事务失败后,一定要丢弃消息。执行本地事务和发送消息,要么都成功,要么都失败
  • 原子性问题的解决方案:在实际的解决方案中,可以通过消息确认服务解决本地事务与消息发送的原子性问题

2、事务参与方接收消息的可靠性问题

  • 可靠性问题产生的原因:由于服务器宕机、服务崩溃或网络异常等原因,导致事务参与方不能正常接收消息或者接收消息后处理事务的过程中发生异常,无法将结果正确回传到消息库中。此时,就会产生可靠性问题
  • 可靠性问题的解决方案:可以通过消息恢复服务保证事务参与方的可靠性

3、事务参与方接收消息的幂等性问题

  • 幂等性问题产生的原因:在实际场景中,由于某种原因,可靠消息服务可能会多次向事务参与方发送消息,如果事务参与方的方法不具有幂等性,就会造成消息重复消费的问题,这就是典型的幂等性问题
  • 幂等性问题的解方案:解快方案就是事务参与方的方法实现要具有幂等性,只要参数相同,无论调用多少次接口或方法、得出的结果都与第一次调用接口或方法得出的结果相同

最大努力通知型解决方案

        当分布式事务跨越多个不同的系统,尤其是不同企业之间的系统时,解决分布式事务问题就需要用到最大努力通知型方案

适用的场景

        最大努力通知型解决方案适用于最终一致性时间敏感度低的场景,并且事务被动方的处理结果不会影响主动方的处理结果,典型的使用场景就是支付成功后,支付平台异步通知商户支付结果

需要实现的服务模式

        最大努力通知型解决方案需要实现的服务模式是可查询操作和幂等操作。例如,在充值业务场景中,用户调用支付服务充值成功后,支付服务会按照一定的阶梯型通知规则调用账户服务的接口,向账户服务发送支付数据。此时,账户服务的接口需要满足幂等性,这就是幂等操作。如果支付服务调用账户服务的接口超过了设置的最大次数,仍然没有调用成功,则支付服务需要提供查询支付结果的接口,以便账户服务调用并恢复丢失的业务

方案的执行流程

        最大努力通知型分布式事务解决方案在执行的过程中,允许丢失消息,但需要业务主动方提供事务状态查询接口,以便业务被动方主动调用并恢复丢失的业务

实现最大努力通知型方案时,需要实现如下功能。

  1. 业务主动方在完成业务处理后,会向业务被动方发送消息通知。发送消息通加时,允许消息丢失
  2. 在实现上,业务主动方可以设置时间阶梯型通知规则,在消息通知失败后,可以按照规则再次通知,直到到达最大通知次数为止
  3. 业务主动方需要提供查询接口供业务被动方按照需要查询,用于恢复丢失的消息

方案的优缺点

最大努力通知型方案存在如下优点:

  1. 能够实现跨企业的数据一致性。
  2. 业务被动方的处理结果不会影响业务主动方的处理结果
  3. 能够快速接入其他业务系统,达到业务数据一致性。

最大努力通知型方案存在如下缺点:

  1. 只适用于时间敏感度低的场景。
  2. 业务主动方发送的消息可能丢失,造成业务被动方收不到消息。
  3. 需要业务主动方提供查询消息的接口,业务被动方需要按照主动方的接口要求查数据,增加了开发成本

需要注意的问题

        业务被动方需要保证接收通知的方法的幂等性,关键是要业务主动方通过一定的机最大限度地将业务的处理结果通知给业务被动方,因此必须解决如下两个问题

1、消息重复通知产生的问题:

  • 消息重复通知产生的原因:由于业务主动方发送消息通知后,业务被动方不一定能够接收到消息,因此需要一定的阶梯型通知规则重复向业务被动方发送消息通知。此时,就出现了消息重复通情况,因为业务被动方的方法被执行了多次,所以有可能造成数据不一致的问题
  • 消息重复通知的解决方案:保证业务被动方接收消息通知的方法具备幂等性,则在业务上就能够解决消息重影知的问题

2、消息通知丢失的问题

  • 消息通知丢失问题的原因:如果业务主动方尽最大努力都没有将消息通知给业务被动方,或者业务被动方接收消息并执行完毕后,需要再次获取消息。此时,业务主动方已经删除对应的通知消息,向业务被动方发送消息通知,也就是说,消息通知已经丢失
  • 消息通知丢失的解决方案:业务主动方需要提供查询消息的接口来满足业务被动方主动查询消息的需求,以恢复丢失的业务。另外,业务主动方在设计消息回查接口时,一定要注意接口的安全性和并发性

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

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

相关文章

Mybatis入门——其他查询操作和数据库连接池(4)

目录 一、多表查询 二、#{} 和 ${} 1、#{} 和 ${} 的使用 (1)Integer类型的参数 #{} 的使用 ${} 的使用 (2)使用String类型的参数 #{} 的使用 ${} 的使用 小结: 2、#{} 和 ${} 的区别 (1&#…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月28日预测第4弹

昨天的第二套方案已命中,第一套方案由于杀了对子,导致最终出错。 今天继续基于8883的大底,使用尽可能少的条件进行缩号,同时,同样准备两套方案,一套是我自己的条件进行缩号,另外一套是8883的大底…

MySQL数据表的“增删查改“

我们学习数据库, 最重要的就是要学会对数据表表进行"增删查改"(CRUD).(C -- create, R -- retrieve, U -- update, D -- delete) 目录 一. "增"(create) 1. 普通新增 2. 指定列新增 3. 一次插入多行 4. 用insert插入时间 5. 小结 二. "查"…

港口与航运3D三维虚拟仿真展区让更多人了解到海洋知识

在短短20天内,搭建起200多家线上3D展厅,听起来似乎是一项艰巨的任务。然而,对于我们的3d云展平台而言,这早已成为常态。连续三年,我们已成功为众多会展公司在短时间内构建出几百家甚至上千家的线上3D展会,见…

AD23中一些好用的功能

1.关闭在线DRC功能,可以避免布线时候一卡一卡的问题: 取消在线DRC的勾选: 2.AD的在线封装库,非常好用: 如何优雅地服用AD 21的在线元件库 – 吴川斌的博客 (mr-wu.cn) 3.如何恢复Altium Designer23默认窗口布局 打开…

搭贝财务管理助您轻松掌控财务大局

在当今竞争激烈的商业环境中,有效的财务管理是企业成功的关键之一。搭贝财务管理平台为您提供了一揽子解决方案,助您轻松掌握财务大局,实现财务管控的全面数字化。 📈 基础信息管理 搭贝财务管理平台首先提供了完善的基础信息管理…

图算法新书发布会圆满成功,大咖现场都讲了啥?

5月24日,嬴图与机工社携手举办的“《图算法:行业应用与实践》新书发布会”圆满成功。 现场直播在线观众达4000人/次左右,点赞数量超7000,直至发布会尾声,观看人数仍在持续增长。 通过观众们的反馈,我们也对…

对北京新发地当时菜品三十天内价格分布式爬取(1)---(获取当时菜品数据并构建请求数据推入redis)

本次项目网页url 北京新发地: http://www.xinfadi.com.cn/priceDetail.html 我们首先创建一个爬虫用于收集url与请求的data然后b,c,d使用RedisCrawlSpider来对数据进行分布式爬取 在此篇中我们仅介绍爬虫a 一.获取当天所有菜品数据 这是一条请求的负载我们只需要对pubDateSta…

Creo装配体中只显示一部分零部件

从模型树中选中要显示的零部件,也可以结合Ctrl框选的方式选择对象。然后在模型树右击等会弹出选项,点选----即可

内存泄漏面面谈

概述 主要介绍了内存泄漏的关注点是对象,对内存问题进行了分类并且确定本文关注点是内存泄漏,15种内存泄漏判断方式,hprof文件的用法和分析过程,以及memory profiler工具一些基本概念,最后提到了如何触发内存泄漏问题…

护网2024-攻防对抗解决方案思路

一、护网行动简介 近年来,网络安全已被国家上升为国家安全的战略层面,网络安全同样也被视为维护企业业务持续性的关键。国家在网络安全治理方面不断出台法规与制度,并实施了一些大型项目和计划,如网络安全法、等级保护、网络安全…

Nacos服务分级存储模型

Nacos服务分级存储模型 Nacos把服务拆分为三级 一级 服务 二级 集群 三级 实例 将某服务 例如订单模块 拆分为北京 上海 杭州集群 为了避免跨地域调用集群实例 就近原则先调用本地的实例 不行再去跨地域调用 提高容灾处理能力 负载均衡: 当服务去请求本地的集群实例 实例很多的…

ssm136公司项目管理系统设计与实现+jsp

公司项目管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本T公司项目管理系统就是在这样的大环境下诞生,其可以帮助管理者在…

SRS视频服务器应用研究

1.SRS尝试从源码编译启动 1.1.安装ubuntu 下载镜像文件 使用VMWare安装,过程中出现蓝屏,后将VM的软件版本从15.5升级到17,就正常了。

基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】

前言 该系统采用SpringBootVue前后端分离开发,前端是一个单独的项目,后端是一个单独的项目。   技术栈:SpringBootVueMybatisRedisMysql   开发工具:IDEA、Vscode   浏览器:Chrome   开发环境:JDK1…

Java类和包

一.什么是包 粗暴的讲,包就是一个文件夹 、在src路径下,可以创建一个软件包,这个就是包 我们来创建一个包 这里我们看到,我们创建了两个包,在俩包中分别创建一个Java文件 如果我想在text中调用text2,看…

【MiniCPM-V】win10本地部署踩坑

尝试最新大模型MiniCPM-V,题主的3080Ti 16G显存,CUDA12.3,选用模型openbmb/MiniCPM-Llama3-V-2_5。 踩坑经过 Could not create share link. Please check your internet connection or our status page: https://status.gradio.app 解决方…

云服务器如何使用局域网服务器的磁盘空间

说明 云服务器中的磁盘空间不足时,想要开通更多的磁盘空间,但奈何价格太贵,开不起 刚好局域网中有闲置的服务器空间可以拿来用,这里我们直接使用Samba服务来共享文件夹,使用frp来进行内网穿透; 1、磁盘挂…

ICPC训练赛补题集

ICPC训练赛补题集 文章目录 ICPC训练赛补题集D - Fast and Fat (负重越野)I-路径规划G. Inscryption(邪恶铭刻)NEW Houses D - Fast and Fat (负重越野) 原题链接:原题链接 题意:体重大的背体重小的速度不变,体重小的背体重大的速度会变化&a…

家用洗地机哪个品牌好?家用洗地机排行榜前十名

随着洗地机逐渐进入大众视野,这种集吸、拖、洗功能于一体的清洁工具,凭借其高效便捷的特点,成为家庭清洁的新宠。洗地机不仅能够减少地面清洁时间,节省体力,还能提高清洁效果。然而,面对琳琅满目的洗地机品…