【分布式技术专题】「数据一致性体系」带你一同建立采用消息队列实现的数据一致性框架技术体系方案

news2024/10/6 4:08:48

带你一同建立采用消息队列实现的数据一致性框架技术体系方案

  • 分布式服务数据一致性问题
    • 采用分布式事务
      • 3PC模式
        • 3PC模式阶段分析
    • 采用分布式锁
    • 采用数据同步机制
    • 采用数据分片机制
    • 针对常规方案所具有的问题
      • 预发送消息阶段
      • 切换为可发送状态
      • 定时补偿更新为可发送状态
      • 定时补偿发送数据到下游业务服务
  • 分布式数据一致性框架总结

分布式服务数据一致性问题

分布式服务的数据一致性问题是指在分布式系统中,由于数据的复制和分布在不同的节点上,可能会出现数据不一致的情况。这种情况可能会导致系统的错误行为,甚至会影响到系统的可用性和可靠性。

为了解决分布式服务的数据一致性问题,可以采用以下几种方法:

采用分布式事务

分布式事务是一种保证分布式系统中数据一致性的方法。
在这里插入图片描述
在分布式事务中,所有的操作要么全部成功,要么全部失败,从而保证了数据的一致性,例如我们的2PC协议模式下的处理方式。
在这里插入图片描述

3PC模式

三阶段提交协议(3PC):3PC是在2PC的基础上进行改进的一种分布式事务协议,它通过引入超时机制来避免2PC中的阻塞问题。3PC协议分为三个阶段:CanCommit阶段、PreCommit阶段和DoCommit阶段。
在这里插入图片描述

3PC模式阶段分析

  • CanCommit阶段,协调器会向各个节点发送CanCommit请求,各个节点需要回复CanCommit就绪或者CanCommit失败。
  • PreCommit阶段,协调器会向各个节点发送PreCommit请求,各个节点需要回复PreCommit就绪或者PreCommit失败。
  • DoCommit阶段,协调器会向各个节点发送DoCommit请求,各个节点需要回复Commit成功或者Commit失败。
    在这里插入图片描述

采用分布式锁

分布式锁可以保证在分布式系统中只有一个节点可以对数据进行修改,从而避免了数据的冲突和不一致。
在这里插入图片描述

采用数据同步机制

数据同步机制可以将数据在不同节点之间进行同步,从而保证数据的一致性。
在这里插入图片描述

采用数据分片机制

数据分片机制可以将数据分成多个片段,每个节点只负责处理其中的一部分数据,从而减少了数据的复制和分布,降低了数据不一致的风险。
在这里插入图片描述

总之,分布式服务的数据一致性问题是一个复杂的问题,需要综合考虑多种因素,采用多种方法来解决。

针对常规方案所具有的问题

针对上述方案其实还是很有很多的弊端和问题所在,比如说存在着可用性的问题,因为很多的弊端和问题所在,比如说存在着可用性的问题,因为上述所能够成立的原因是由于mq的可用性没有问题。

那么如果一旦消息队列出现了宕机或者是我们的业务服务出现了宕机的时候,再处理过程中那么数据的一致性就很难能够保证了。

因此我们就推出了我们自己设计一套分布式事务结合消息队列所形成的一致性框架,整体流程图如下所示。
在这里插入图片描述
总体分为以下几个阶段:

预发送消息阶段

在这里插入图片描述

  1. 执行业预先发送消息操作,发送到消息服务中心,当只有发送成功之后才会执行业务方法。
  2. 执行业务方法操作。
  3. 当消息中心收到了预发送消息之后,进行存储消息数据到数据库中。

切换为可发送状态

在这里插入图片描述

  1. 当业务执行结束之后,进入可发送状态阶段,通知发送消息通知消息服务中心。
  2. 当发送成功之后切换为可发送状态,默认为待发送状态。

定时补偿更新为可发送状态

在这里插入图片描述

  1. 定时任务01,定时扫描的捞取待发送数据信息,从数据库中。
  2. 根据捞取的消息数据信息,通过业务id,请求到业务中心,进行判断是否该业务信息数据是否已经完成。
  3. 如果是未完成,直接忽略,如果是已完成则进行请求到消息中心,要求其修改状态为可发送状态。
  4. 更新消息中心的数据库为可发送状态。

定时补偿发送数据到下游业务服务

在这里插入图片描述

  1. 定时任务02,定时扫描的捞取可发送数据信息,从数据库中。
  2. 发送消息到下游服务,通过消息队列服务。
  3. 下游业务服务,幂等性消费到下游业务服务。
  4. 更新业务中心的数据库为业务数据状态跃迁。

分布式数据一致性框架总结

通过消息队列实现数据的一致性问题,可以考虑以下几种要点:

  1. 采用事务消息:事务消息是一种保证消息队列中消息的原子性、一致性和持久性的方法。在事务消息中,消息的发送和确认是在同一个事务中完成的,从而保证了消息的一致性。

  2. 采用幂等性处理:幂等性处理是指对于同一个消息的多次处理结果是相同的。通过在消息队列中对消息进行幂等性处理,可以避免重复处理消息,从而保证数据的一致性。

  3. 采用消息确认机制:消息确认机制是指在消息队列中,消费者在消费消息后需要向消息队列发送确认消息,从而保证消息已经被正确处理。通过消息确认机制,可以保证消息的可靠性和一致性。

  4. 采用消息重试机制:消息重试机制是指在消息队列中,当消息处理失败时,可以将消息重新发送到消息队列中,从而保证消息的可靠性和一致性。

总之,通过消息队列实现数据的一致性问题,需要综合考虑多种因素,采用多种方法来解决。在实际应用中,需要根据具体的场景和需求来选择合适的方法。

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

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

相关文章

免费ai写作生成器帮你释放创作天赋

喂!听说你想提升写作功力?那么恭喜你,现在流行的ai写作软件将成为你提升写作效率的秘密武器。这是一款革命性的应用,就像你的个人写作导师,会帮助你通过简单的几步,创造出令人瞠目结舌的文字作品&#xff0…

QPainter - 使用一个时钟项目从头开始看QPainter

文章目录 QPainter - 使用一个时钟项目从头开始看QPainter绘制的原理绘制时分秒指针绘制背景绘制刻度线完整代码 QPainter - 使用一个时钟项目从头开始看QPainter 之前一直在说绘制,但是没有从头详细的去了解绘制这块的写法,因此我们来使用一个时钟的项…

3.正则表达式

3.1什么是正则表达式 ●正则表达式( Regular Expression) 是用于匹配字符串中字符组合的模式。在JavaScript中, 正则表达式也是对象 ●通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 ●正则表达式在JavaScript中的使用场景: ➢…

平板触控笔买哪种好?便宜又好用的电容笔推荐

或许很多人会觉得,苹果原装的电容笔性能强悍,是无可替代的,但我觉得,还是要看我们的预算。苹果Pencil对绘画要求不高的用户来说,价格太高了,如果我们只是用来写东西的话,我们甚至可以选择平替电…

Windows MYSQL社区版8.1下载安装(MSI)

一、下载 官网链接(MySQL :: Download MySQL Community Server) 选择版本: 直接下载: 二、安装配置 双击下载好的mysql-8.1.0-winx64.msi;打开安装向导;进入安装页面后选择Custom自定义安装,点…

清除浮动(clearfix)是什么,如何实现?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 清除浮动是什么?⭐ 清除浮动的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些…

【C++】职工管理系统

1.需求分析以及案例展示 2.创建项目 3.创建管理类 4.菜单功能 5.退出功能 6.创建职工类 #pragma once #include <iostream> #include <string> using namespace std;//职工抽象基类 class Worker { public://显示个人信息virtual void showInfo() 0;//获取岗位名称…

揭秘浏览器键入URI到页面显示的过程: 浏览器键入URI,到页面显示,中间发生什么?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

差分升级在物联网水表上的实现与应用(学习)

摘要 当越来越多的物联网水表加入抄表系统后&#xff0c;实现了水表数据的信息化&#xff0c;并且当水表终端需要技术更新时&#xff0c;通过网络方式来升级产品可以高效修复设备面临的问题&#xff0c;减少用户损失&#xff0c;降低维护成本&#xff0c;但同时也对有限的网络…

IDEA 设置字体大小无效

设置字体大小&#xff0c;一般都是从file>settings>editor>font>Size里设置&#xff0c;一般都有效。 但是&#xff0c;如果是更换了主体&#xff0c;则需要从主体颜色菜单那里这是&#xff0c;你看这个页面&#xff0c;上面黄色三角也提示你了&#xff0c;要去颜色…

这所211热度很高!连续3年分数上涨!

一、学校及专业介绍 中国地质大学&#xff08;武汉&#xff09;&#xff08;China University of Geosciences, Wuhan&#xff09;&#xff0c;简称地大。位于武汉市&#xff0c;是中华人民共和国教育部直属的全国重点大学&#xff0c;由教育部和湖北省人民政府共建&#xff0…

告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

之前同事用了一款轻量级的规则引擎脚本AviatorScript&#xff0c;我也跟着用了起来&#xff0c;真的挺香&#xff0c;能少写很多代码。这期就给大家介绍一下这款规则引擎。 简介 AviatorScript是一门高性能、轻量级寄宿于 JVM &#xff08;包括 Android 平台&#xff09;之上的…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的解决办法

springcloudAlibaba项目连接mysql时&#xff08;mysql版本8.0.31&#xff0c;Springboot2.2.2,spring cloud Hoxton.SR1,spring cloud alibaba 2.1.0.RELEASE&#xff09;&#xff0c;驱动名称报红&#xff0c;配置如下&#xff1a; 原因&#xff1a;引入的jdbc驱动包和使用的m…

uniapp实现自定义上传图片

目录 1、布局样式2、使用uniappAPI&#xff08;uni.chooseImage&#xff09;3、解决bug和添加功能3.1 bug13.2 bug23.3 bug33.4 点击图片进行预览3.5 删除图片 4、云函数上传到云存储 1、布局样式 在正式自定义上传前我们先将静态页面搭建好。 样式代码&#xff1a; <temp…

【面试题】这道面试题真的很变态吗?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 最近帮公司招聘&#xff0c;主要负责一面&#xff0c;所以基本上问的基础多一点。但是我在问这样一道面试题的时候&#xff0c;很少有人答对。不少人觉得…

福布斯发布2023年云计算100强榜单,OpenAI排名第一

&#x1f989; AI新闻 &#x1f680; 福布斯发布2023年云计算100强榜单&#xff0c;OpenAI排名第一 摘要&#xff1a;福布斯发布《2023年云计算100强榜单》&#xff0c;OpenAI排名第一。榜单关注全球高成长性的云计算公司&#xff0c;特别注重AI领域的发展。今年有16家新上榜…

基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

自带flash的浏览器,免安装

一. 内容简介 自带flash的浏览器&#xff0c;免安装 二. 软件环境 2.1 FlashBrowser_v1.0.5 2.2 安装包链接 链接&#xff1a;https://pan.baidu.com/s/1O8_uHBkDMAXnj0KCfj_Urw?pwd1234 提取码&#xff1a;1234 三.主要流程 3.1 下载安装包 3.2 运行 点击CefFlashBro…

怎么裁剪视频大小尺寸?简单的裁剪方法分享

怎么裁剪视频的画面大小尺寸呢&#xff1f;有时当我们下载下来一段视频&#xff0c;由于视频的画面大小比例不同&#xff0c;会有很多的黑边&#xff0c;我们不管是观看还是进行二次编辑都非常影响体验&#xff0c;而调整视频画面比例以适应观众的设备或平台&#xff0c;比如将…

dotNet 之数据库sqlite

Sqlite3是个特别好的本地数据库&#xff0c;体积小&#xff0c;无需安装&#xff0c;是写小控制台程序最佳数据库。NET Core是同样也是.NET 未来的方向。 **硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 D…