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

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

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

适用的场景

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

需要实现的服务模式

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

方案的执行流程

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

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

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

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

方案的优缺点

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

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

优点:

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

缺点:

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

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

优点:

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

缺点:

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

需要注意的问题

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

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

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

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

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

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

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

最大努力通知型解决方案

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

适用的场景

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

需要实现的服务模式

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

方案的执行流程

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

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

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

方案的优缺点

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

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

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

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

需要注意的问题

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

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

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

2、消息通知丢失的问题

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

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

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

相关文章

自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割| 文献速递-深度学习肿瘤自动分割

Title 题目 Cascade multiscale residual attention CNNs with adaptive ROI for automatic brain tumor segmentation 自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割 01 文献速递介绍 脑肿瘤是大脑细胞异常和不受控制的增长,被认为是神经系统…

监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了

监控员工电脑的软件在市场上种类繁多,以下是几款备受好评的电脑监控软件,它们各自具有独特的功能和优势,选择前必须了解一下才能做成正确决定。 1.安企神: 这款软件支持7天试用测试,获取测试版请移驾 ↓↓↓ 安企神…

Transformer模型的简单学习

前言 Transformer 来源于一篇论文:Attention is all you need TRM在做一件什么事情呢?其实一开始它是被用于机器翻译的: 更详细的: 更详细的: 从上图可以看出,一个Encoders 下面包含了 n 个 Encoder&…

如何将 Langfuse 链接到自有 PostgreSQL 数据库并升级 PostgreSQL 版本

在本文中,我们将介绍如何将 Langfuse 应用程序链接到自有的 PostgreSQL 数据库,并升级 PostgreSQL 以支持 jsonb 类型。 前提条件 运行 CentOS 7 的服务器已安装的 PostgreSQL 9.2 或更低版本需要将 Langfuse 连接到自有数据库,并升级 PostgreSQL 以支持 jsonb 类型1. 将 La…

五款局域网监控软件良心推荐

五款局域网监控软件良心推荐 有人问我,能不能推荐几款好用的局域网监控软件。 我说,当然可以了,凭良心说,这几款软件在实用性、用户体验、隐私保护以及性价比上,绝对是当前最强监控软件。 1. 安企神 这款软件支持7天…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 (1)Composition API(组合API): (2)新的内置组件: (3)其他改变: 二.创建vue…

Postman实现批量发送json请求

最近有一个场景,需要本地批量调用某个接口,从文件中读取每次请求的请求体,实现方法记录一下。 1.读取请求体 在 Postman 中,如果你想在 Pre-request Script 阶段读取文件内容,比如为了将文件内容作为请求的一部分发送…

聊天宝使用技巧揭秘让您快捷回复效率翻倍

聊天宝快捷回复软件,推出大量实用工具,帮助客服能更加高效的实现快捷发送,一键发送,效果翻倍! ​ 前言 聊天宝作为一款快捷回复工具,让客服免去了打字回复之苦。所以很受广大客服欢迎,真是一旦…

什么是“SQL注入攻击”?如何预防和应对?

一、SQL注入攻击的概念 SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术,其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入,并将其直接拼接到SQ…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

粉丝福利:微信搜索「万猫学社」,关注后回复「电子书」,免费获取12本Java必读技术书籍。 Nginx配置文件的简介 在浩瀚的互联网世界中,Nginx就如同一座大型交通枢纽,将访问者的请求精准地引导到正确的服务终点。而这一切…

【会议征稿,SPIE独立出版】第五届计算机视觉和数据挖掘国际学术会议(ICCVDM 2024)

第五届计算机视觉与数据挖掘国际学术会议(ICCVDM 2024)将于2024年7月19-21日在中国长春举行。此前,ICCVDM系列会议于2020年在中国西安、2021年在中国长沙(线上)、2022年在中国呼伦贝尔(线上线下&#xff09…

基于微信小程序实现的【二手物品交易平台】后端 JAVA Springboot (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的二手物品交易平台 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java, SSM框架数据库: MySQL前端技术: 微信小程序技术其他相关技术: HTML, MyEclipse开发…

SQL——SELECT相关的题目(力扣难度等级:简单)

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表(行转列) 1280、学生参加各科测试的次数 1965、丢失信息的雇员 1068、产品销售分…

微信好友,如此的陌生,渐渐都成了只是人名!也许没有利益关系导致!

微信里一直聊天聊的挺好的朋友,不知怎么到后来却联系少了,最后渐渐的变成躺在微信备注里的一个陌生朋友! 以前通过工作认识了一个朋友,初次见面的印象不是很深刻了,只记得当时给我的印象是对方很有礼貌,特别…

vue页面滚动条触底事件

html 滚动区域外层div添加属性 ref,id,scroll 在mounted函数中使用document设置监控div属性 在mathods中监控滚动事件

期货交易的雷区

一、做自己看不懂的行情做交易计划一样要做有把握的,倘若你在盘中找机会交易,做自己看不懂的行情,即便你做进去了,建仓时也不会那么肯定,自然而然持仓也不自信,有点盈利就想平仓,亏损又想扛单。…

基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 已经完成了登录界面和主界面,本篇将完善主界面的管理员录入和编辑功能,事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑 首先还是介绍一下…

红外成像人员检测数据集VOC+YOLO格式5838张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5838 标注数量(xml文件个数):5838 标注数量(txt文件个数):5838 标注…

数据大屏vue3+ts+axios+MockJS+dataV+echarts

一、官网/文档 vue3:https://cn.vuejs.org/api/TypeScript:https://www.tslang.cn/docs/handbook/basic-types.htmlaxios:http://www.axios-js.com/zh-cn/docs/MockJS:http://mockjs.com/dataV:http://datav.jiamingh…