一次线上生产库的全流程切换完整方案

京东云开发者
• 阅读 6

作者:京东零售 杨亚龙

一、现状梳理

本篇介绍了一次数据库迁移的完整方案。 本次需要改造的系统为一个较为陈旧的技术栈系统,其中MongoDB作为核心数据存储中间件,承担着存储全部核心数据的重要任务。该系统目前的配置为1主1副本模式,涉及1个数据库和2张表,服务于7个不同的应用。尽管系统架构相对简单,但其在日常运营中发挥着不可或缺的作用。目前需要将MongoDB存储在其它介质中,如何能够保障在不影响线上使用的情况下,平滑切流到新库,是本文主要探讨的问题。

二、迁移方案

2.1 迁移节奏

整体节奏分为

1.梳理范围,因为系统内不仅有mongo还同时有mysql数据源,需要梳理出使用mongo的所有业务范围

2.确定好原有的数据,应该存储在哪个介质中,确定好存储标准,需要能够cover住原有的所有业务,包括读写性能

3.对原有数据结构的DAO层进行改造

4.需要对数据进行双写并进行数据迁移

5.R2流量验证/测试回归/数据比对 进行验证

6.切量:放量节奏

一次线上生产库的全流程切换完整方案



2.2 代码改造/数据异构

采用装饰器模式,统一控制双写逻辑(主写,辅写),统一控制切量逻辑,下线逻辑, 抽取代码中原有的直接调用底层mongodb API的代码,将其不改业务逻辑的情况下迁移到Dao层。这样做的目的是为了后续做切流适配逻辑。不改逻辑及出入参的目的是为了避免对当前业务造成影响。

选用数据源的依据为

特性 JimKV HBase
优势 - 支持多存储引擎(SSD、AEP)- 基于 Raft 协议的强一致性和多机房容灾
- 完善的运维监控和弹性伸缩能力
- 支持PB级别的存储容量- 云原生架构,支持单集群和主备集群
- 高吞吐性能,适合写密集型应用
劣势 - 由于Raft协议,写性能低于JimDB - 故障恢复时间较长,约1—2分钟
适用场景 - 数据一致性和可靠性要求高- 数据存储量大- 读流量大于写流量 - 存储量非常大(PB级别)- 写密集且性能要求高的场景
技术选型推荐理由 - JimKV满足存储量和吞吐量要求- 数据一致性和可靠性优于HBase
- 适合读流量大于写流量的应用场景
- 适用于存储量极大的场景,但对一致性要求较高的场景不如JimKV适合

基于以上原则,我们选用JImKV(京东自研中间件),Mysql和ES作为MongoDB的替换的数据源,数据源切换Dao层的改造方式如下:

一次线上生产库的全流程切换完整方案





2.3 存量数据迁移

方案 是否可实现 难度
使用大数据抽数任务
使用代码异步任务的方式
DRC同步 从mongo到数据库不支持

考虑整体的数据量并不大单表300w,通过大数据离线表的方式效率并不高,通过代码更加的灵活,可以随时调整速度和范围存量数据分了两部分1、已经审核通过,申请单不会在有任何变更,可以随时迁移,比对2、申请单处于过程中的数据,数据随时会变更。凌晨迁移,打开双写



一次线上生产库的全流程切换完整方案





2.4 增量数据同步

创建申请单和更新不包含状态字段时的操作

先写mongo再写mysql,以mongo写入成功为准,写mysql失败,mq异步补偿



一次线上生产库的全流程切换完整方案

一次线上生产库的全流程切换完整方案

三、上线三板斧(灰度/监控/回滚)

本章节主要探讨在进行数据迁移和代码改造这些基础工作完成之后,如何保障上线没有线上问题,如何保障平滑切流和听写,工作主要聚焦于上线三板斧,可灰度,可回滚,可监控等方面,具体工作如下:

3.1 可监控(数据对比读逻辑)

增量数据比对

双写数据完成后发送MQ,消息里面查询新库,老库的数据进行实时比对,不一致数据记录不一致字段,关键字业务报警,写入日志文件,导出分析

存量数据比对

遍历全量老库数据,与新库查出数据,转换成相同对象对比数据一致性,异常数据写入日志文件分析

一次线上生产库的全流程切换完整方案

3.2 可监控(对比读逻辑)

对比逻辑,引入R2流量回放对比,提高对比速度,

 一次线上生产库的全流程切换完整方案



3.3 可灰度(灰度切量读)

读切流,按照供应商和采销白名单+百分比来切流

 一次线上生产库的全流程切换完整方案



切流时,由于需要根据pin对流量分散,但是不在同一线程内,使用threadlocal对商户信息进行设置和读取

 一次线上生产库的全流程切换完整方案

3.4 可回滚(灰度切量写)

写切流 分为四步

1.首先验证 写新库没问题 相当于对新加代码进行灰度 如果有问题 进行回切

2.当验证写新库没问题,需要补齐数据库数据

3.当数据补齐后 转换为主写新库

4.后续如果读写新库都没问题 可以彻底下线旧库存

 一次线上生产库的全流程切换完整方案



四、总结

本文详细梳理了线上生产环境的全流程,包括迁移和切换的灰度方案对比。在数据源选型方面,根据实际业务需求选择合适的中间件是整个工作的基石。在代码改造和数据异构方面,选择恰当的设计模式和合理的架构方案是关键所在。存量数据迁移和增量数据同步是不可或缺的步骤。上线过程中,确保系统具备可监控、可回滚和可灰度的能力,是实现平滑切换的保障。欢迎各位同学与我交流探讨。

点赞
收藏
评论区
推荐文章
直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊
开始进入正题一、技术介绍@MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。
交易系统之数据库弱依赖解决方案
随着互联网的普及,大流量高并发的场景越来越多,数据库成为整个系统最终重要服务,不能出一点问题,尤其核心P0系统哪怕瞬间的DB操作异常可能造成大量异常交易,可能产生致命的问题,所以核心系统弱依赖数据库都是必须考虑的。本期介绍下实践过的三种解决方案:DB灾备机制方案、DB高并发替换方案、财富系统弱依赖DB方案。
Stella981 Stella981
3年前
ClickHouse在京东流量分析的应用实践
前言ClickHouse是一款开源列式存储的分析型数据库,相较业界OLAP数据库系统,其最核心优势就是极致的查询性能。它实现了向量化执行和SIMD指令,对内存中的列式数据,一个batch调用一次SIMD指令,大幅缩短了计算耗时,带来数倍的性能提升。目前国内社区火热,各大厂也纷纷进入该技术领域的探索。引言本文主要讨论京东黄
Wesley13 Wesley13
3年前
MySQL数据库语法(一)
MySQL数据库语法数据库管理系统(DBMS)的概述1.什么是DBMS:数据的仓库  方便查询    可存储的数据量大    保证数据的完整、一致    安全可靠  1.DBMS的发展:今天主流数据库为关系型数据库管理系统(RDBMS使用表格存储数据)2.常见DBMS:Orcale、MySQL、SQLSer
Easter79 Easter79
3年前
TiDB 异构数据库复制最佳实践
作者简介:秦天爽,PingCAP解决方案事业部架构总监。纵观现有业务系统的分布式改造,其中一个难点在于数据库的迁移:迁移使用全量还是增量?在线还是离线?使用现成的工具还是开发作业?……用户往往面对多种选择。下面将为大家分享PingCAP团队在多年的实践中积攒的大量异构平台迁移经验,以及数据库复制技术
Wesley13 Wesley13
3年前
Mysql(14):数据库基础
2018/1/3一、数据库系统数据库系统(DatabaseSystem,DBS),是由数据库及其管理软件组成的系统。    数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。!(http
天翼云TeleDB系列产品升级发布会开幕在即,精彩邀您共鉴!
数据库作为计算机行业的基础核心软件,是底层硬件基础资源与上层应用之间的重要支撑,承担着管理和组织、存储和计算数据的重任。近年来,我国高度重视数字经济发展,将其上升为国家战略,数据作为新型关键生产要素,在指导业务决策、驱动业务创新等方面的价值日益凸显,国产数据库也由此迎来重要发展机遇。目前,国产数据库已经逐步实现从边缘系统到核心系统的国产化,产品不断迭代、性能
京东云开发者|京东云RDS数据迁移常见场景攻略
云时代已经来临,云上很多场景下都需要数据的迁移、备份和流转,各大云厂商也大都提供了自己的迁移工具。本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案。场景一:数据迁移上云数据迁移上云是最常见的一类场景,目前京东云提供了两个
京东云开发者 京东云开发者
5个月前
一次线上生产库的全流程切换完整方案
作者:京东零售杨亚龙一、现状梳理需要改造的xx系统为一个较为陈旧的技术栈系统,其中MongoDB作为核心数据存储中间件,承担着存储全部xx数据的重要任务。该系统目前的配置为1主1副本模式,涉及1个数据库和2张表,服务于7个不同的应用。尽管系统架构相对简单,