关于切流的数据一致性问题(核心数据需要保证强一致性)
问题描述:
一般数据为了保证可用性,采用异步双写,但如果涉及核心数据(如资金、订单、库存)的迁移与同步、切流,课程中的异步双写是不是不太合适
尝试过的解决方式:
同步双写(100% 写老库 + 100% 写新库),更新操作,更新新库失败。异常是新库中数据不存在(说明数据暂未同步),吞掉异常;如果是其他异常,处理方式是让业务失败(回滚老表数据),还是异步队列补偿它
开启全量同步,跟课程方法一致
校验数据。同步双写可能存在时间差,出现数据不一致的情况,先存入集合中后续进行二次校验
全量同步完成后开始切读流量
停止双写
该过程中只存在读流量分流,写流量一直是双库同时进行的
核心数据使用异步双写是否可行?我设计的这个方案是否可行?新表更新失败(数据不存在外的其他异常)该如何处理?请老师解答。
2
收起
正在回答 回答被采纳积分+1
2回答
Danny_Idea
5小时前
这里的同步双写可以按场景分类 例如同库 不同库 不同类型db 如何根据事务保障,都可以思考下。
关于不存在数据更新这个,可以先放在mq堆积着 等全量同步完后按顺序消费即可。
关于不存在数据更新这个,可以先放在mq堆积着 等全量同步完后按顺序消费即可。
Danny_Idea
6小时前
首先有个点需要确认下 什么场景适合用异步双写,异步双写真的可靠性那么差吗?
异步双写一般是结合mq去做的,通过保证mq的消息可靠性来保证数据持久化。一般来说mq丢消息的情况其实主要发生在消费端异常,很少是说broker端异常导致。基本上可靠性就是软件层可控的,所以这种方案也是可以做到核心数据的准确性同步。
如果硬要说异步双写有风险,除非是broker端出现异常,机器崩溃导致的了。如果你们的企业场景中这种概率极低,其实可以忽略。毕竟异步双写的实现难度较低,而且代码相对解耦。
异步双写一般是结合mq去做的,通过保证mq的消息可靠性来保证数据持久化。一般来说mq丢消息的情况其实主要发生在消费端异常,很少是说broker端异常导致。基本上可靠性就是软件层可控的,所以这种方案也是可以做到核心数据的准确性同步。
如果硬要说异步双写有风险,除非是broker端出现异常,机器崩溃导致的了。如果你们的企业场景中这种概率极低,其实可以忽略。毕竟异步双写的实现难度较低,而且代码相对解耦。
相似问题
登录后可查看更多问答,登录/注册
Java+大数据+AI架构师实战营
- 参与学习 87 人
- 解答问题 125 个
专为1–5年开发者,打造极具竞争力的人才培养方案,快速突破技术/职业瓶颈 “三高”架构托底,海量数据吞吐,实时计算,AI驱动及智能化开发 大型 “社交+电商” 平台从0到1全程贯穿,高复杂架构落地
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星