热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MQ分布式环境下保持数据一致性

业务场景:支付宝的余额系统与蚂蚁金服的余额宝是两个对立的平台,相互之间通过ActiveMQ进行通信。当用户把1000块钱从余额存进余额宝的时候,余额系统数据库减1000,然后发送一

业务场景:

支付宝的余额系统与蚂蚁金服的余额宝是两个对立的平台,相互之间通过ActiveMQ进行通信。当用户把1000块钱从余额存进余额宝的时候,余额系统数据库减1000,然后发送一个消息到MQ,余额宝端接收到这个消息后,在其数据库中加1000.

《MQ分布式环境下保持数据一致性》

可能存在的问题:

1. 消息丢失问题。用户发起1000块钱的转账,支付宝余额平台减了1000,触发消息放到了队列,余额宝端成功消费了消息,但是在修改数据库的时候发生了异常,进行了回滚。这时候消息就丢失了。

解决办法,支付宝余额端要有消息重发机制。当余额宝端接受到消息之后,更新完数据库之后,要回调支付宝平台的接口,告诉支付宝我这里操作成功完成了。如果长时间没有回调,则支付宝端应该察觉到问题才可以。我们可以在支付宝余额端建立一个账本,记录每一次的操作。这个账本就是历史订单表。创建一个订单历史表,message_id用来定义每一次操作,并且会将这个值放到消息队列中。status字段用于标记余额宝端是否成功回调了告诉了支付宝这次操作是否成功。字段值为confirmed或者unconfirmed.

《MQ分布式环境下保持数据一致性》

余额宝端有一个job在一直监视着订单历史表,如果发现有记录一直处于unconfirm状态,会再次发一个相同的消息给余额宝端。这样就避免了消息丢失问题。

《MQ分布式环境下保持数据一致性》

 

2. 这样会引发新的问题,重复消费问题。余额宝端成功消费了消息,成功更新了数据库,都是由于网络原因回调失败,那么支付宝端会再次发出一个MQ,这样如果余额宝端再次消费,那么就成了增加2次1000块。解决办法,可以在余额宝端也加一个账本,记录历史记录。这个表中包含message_id,每次成功更新数据库之后,就在这个表中加入一条记录。那么第二次同一个消息过来的时候,因为是用一个message_id,那么就会被丢弃。这样,消息重复问题也就解决了。

 


推荐阅读
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 容器管理与容器监控influxDB
    容器管理与容器监控-influxDB什么是influxDBinfluxDB安装(1)下载镜像(2)创建容器(3 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
author-avatar
才女与尔同销万古愁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有