一次线上生产库的全流程切换完整方案
本篇介绍了一次数据库迁移的完整方案。本次需要改造的系统为一个较为陈旧的技术栈系统,其中MongoDB作为核心数据存储中间件,承担着存储全部核心数据的重要任务。该系统目前的配置为1主1副本模式,涉及1个数据库和2张表,服务于7个不同的应用。尽管系统架构相对简单,但其在日常运营中发挥着不可或缺的作用。目前需要将MongoDB存储在其它介质中,如何能够保障在不影响线上使用的情况下,平滑切流到新库,是本文主要探讨的问题。
2.1 迁移节奏
整体节奏分为:
1. 梳理范围,因为系统内不仅有mongo还同时有mysql数据源,需要梳理出使用mongo的所有业务范围
2. 确定好原有的数据,应该存储在哪个介质中,确定好存储标准,需要能够cover住原有的所有业务,包括读写性能
3. 对原有数据结构的DAO层进行改造
4. 需要对数据进行双写并进行数据迁移
5. R2流量验证/测试回归/数据比对 进行验证
6. 切量:放量节奏
2.2 代码改造/数据异构
选用数据源的依据为:
2.3 存量数据迁移
2.4 增量数据同步
先写mongo再写mysql,以mongo写入成功为准,写mysql失败,mq异步补偿
3.1 可监控(数据对比读逻辑)
遍历全量老库数据,与新库查出数据,转换成相同对象对比数据一致性,异常数据写入日志文件分析
3.2 可监控(对比读逻辑)
对比逻辑,引入R2流量回放对比,提高对比速度
3.3 可灰度(灰度切量读)
读切流,按照供应商和采销白名单+百分比来切流
3.4 可回滚(灰度切量写)
本文详细梳理了线上生产环境的全流程,包括迁移和切换的灰度方案对比。在数据源选型方面,根据实际业务需求选择合适的中间件是整个工作的基石。在代码改造和数据异构方面,选择恰当的设计模式和合理的架构方案是关键所在。存量数据迁移和增量数据同步是不可或缺的步骤。上线过程中,确保系统具备可监控、可回滚和可灰度的能力,是实现平滑切换的保障。欢迎各位同学一起交流探讨。
本文由高可用架构转载。技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿