关于切流的数据一致性问题(核心数据需要保证强一致性)

关于切流的数据一致性问题(核心数据需要保证强一致性)

问题描述:

一般数据为了保证可用性,采用异步双写,但如果涉及核心数据(如资金、订单、库存)的迁移与同步、切流,课程中的异步双写是不是不太合适

尝试过的解决方式:

  1. 同步双写(100% 写老库 + 100% 写新库),更新操作,更新新库失败。异常是新库中数据不存在(说明数据暂未同步),吞掉异常;如果是其他异常,处理方式是让业务失败(回滚老表数据),还是异步队列补偿它

  2. 开启全量同步,跟课程方法一致

  3. 校验数据。同步双写可能存在时间差,出现数据不一致的情况,先存入集合中后续进行二次校验

  4. 全量同步完成后开始切读流量    

  5. 停止双写

  6. 该过程中只存在读流量分流,写流量一直是双库同时进行的

核心数据使用异步双写是否可行?我设计的这个方案是否可行?新表更新失败(数据不存在外的其他异常)该如何处理?请老师解答。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Danny_Idea 5小时前
这里的同步双写可以按场景分类 例如同库 不同库 不同类型db 如何根据事务保障,都可以思考下。

关于不存在数据更新这个,可以先放在mq堆积着 等全量同步完后按顺序消费即可。
Danny_Idea 6小时前
首先有个点需要确认下 什么场景适合用异步双写,异步双写真的可靠性那么差吗?

异步双写一般是结合mq去做的,通过保证mq的消息可靠性来保证数据持久化。一般来说mq丢消息的情况其实主要发生在消费端异常,很少是说broker端异常导致。基本上可靠性就是软件层可控的,所以这种方案也是可以做到核心数据的准确性同步。

如果硬要说异步双写有风险,除非是broker端出现异常,机器崩溃导致的了。如果你们的企业场景中这种概率极低,其实可以忽略。毕竟异步双写的实现难度较低,而且代码相对解耦。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java+大数据+AI架构师实战营
  • 参与学习       87    人
  • 解答问题       125    个

专为1–5年开发者,打造极具竞争力的人才培养方案,快速突破技术/职业瓶颈 “三高”架构托底,海量数据吞吐,实时计算,AI驱动及智能化开发 大型 “社交+电商” 平台从0到1全程贯穿,高复杂架构落地

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师