记一次业务系统拆分的数据迁移及系统切换事项

article/2025/10/2 23:34:56

一.迁移背景

老系统使用商业化软件,同时包含模块较多,架构无法支撑,维护成本高等考虑,需要根据业务模块拆分多个系统,新系统支持水平扩缩容 ,rcp框架等,新系统基本上包含常用的技术栈(wildfly、mysql、mycat、redis、ehcache、mq、kafka、zookeeper、hive、spark、rpc、多活等)。老系统使用的db2,需要迁移50亿+数据。

数据迁移包括两步:1.全量数据迁移;2.增量数据迁移

迁移:db2->mysql

二.系统及数据迁移难点

  1. 数据库分库分表规则、表字段及结构变化。
  2. 系统拆分包含了所有业务梳理及部分业务流程调整、bug修复等,导致新系统和老系统的数据可能不一致,但是都是正确的,数据对比等困难。
  3. 增量迁移期间会有新业务需求,新老系统同步开发,增加工作量和迁移难度。

系统的拆分和数据迁移,尽量要避免逻辑模型和业务调整。

三.全量数据迁移

 

全量数据迁移,使用spark+hive相关技术完成。

  1. 使用spark程序将原系统相关数据全部抽取到hive库中,分表的数据会汇总到hive库中的一张表里,便于数据处理
  2. 原始数据需要根据规则进行过滤,重复的、无效的、一些脏数据放入“无效数据表中”;符合规则的有效的数据放入“有效数据表”;逻辑复杂的与目标库无法直接映射的需要拆分的则放入“转换后的数据表”。最后通过任务统一灌入到目标库。
  3. 问题会员数据修复:删除这部分会员数据,重新从原始库中抽出会员的数据经过转换后写入目标库。
  4. 为确保写入的数据是完整的没有遗漏的,还会把mysql中的数据反抽到hive后和原始数据对比与分析。

四.增量数据迁移

全量数据迁移后还要进行增量数据迁移,因为线上数据是在不停的变化的,业务不能停止。通过抽数的方法是没办法追平的,使用接口增量同步的方式,该数据同步基本上覆盖新系统提供的所有rpc接口,能验证新系统的RPC接口服务正确性。

  1. 全量抽数开始前记录增删改接口交易报文到“增量数据待处理记录表”中,老系统中任何引起数据变化的操作都需要被记录。
  2. 全量数据灌入新系统mysql后启动“增量数据处理job”,通过调用新系统接口,让报文在系统中按照新系统逻辑执行。新系统中除RPC接口外还需要额外开发一些特殊的接口用于追增量数据。监控待处理表中的处理情况,分析问题并修复。
  3. 待增量数据处理完后,将新老系统中的数据抽取到hive中进行对比分析,验证新系统中数据是否有错,业务逻辑是否有问题。需要经过多轮对比并修复。数据差异较大,问题较大时需要全部重新迁移。

五.系统灰度切换

为保证灰度切换顺利进行,能够平滑的切换到新系统。需要全面考虑接口的切换顺序与会员灰度范围。灰度号段和接口逐渐放开。

  1. 配置公司内部会员id灰度至新系统,全员分场景验证。
  2. 开启部分实时性要求低的查询类接口灰度配置,配置少量会员。
  3. 开启增删改类接口灰度,配置少量会员,逐步扩大灰度接口及会员范围
  4. 最后请求全部路由至新系统,老系统充当前置路由系统,开始推动外围切换新系统

 


http://chatgpt.dhexx.cn/article/ZdV3bMOn.shtml

相关文章

拆分盘系统开发

转载于:https://blog.51cto.com/12916096/1925453

微服务拆分之AKF原则

AKF是指可拓展模型,有3个坐标轴,分别是x,y,z 为了更好的诠释AKF原则,下面假定有一个系统 基于x轴拓展: 这种方式只能拓展无状态服务,是通过复制系统应用到其他服务器上,再通过给集群…

拆分系统拆分盘盛出不穷,互助系统的延续走出新的路子,农场果园直销系统返利系统开始火了!

在互联网时代,互助盘已经开始落伍了,时代是在进步,现在出现了新的营销模式拆分盘系统模式。 而且非常受大家欢迎,那么什么是拆分盘系统呢? 打个比方,如果发行100分财富,你购买其中的一份财富。 …

分布式架构之系统拆分

系统拆分是单体程序向分布式系统演变的关键一步,也是很重要的一步,拆分的好坏直接关系到未来系统的扩展性、可维护性和可伸缩性等,拆分工作不难理解,但是如何正确拆分、有什么样的方法和原则能帮助我们拆分得到一个我们理想中的系…

水平拆分

水平拆分 概述水平分库示例水平拆分的优点水平拆分的缺点分片原则 概述 水平拆分指的是通过某种策略将数据分片存储,包含库内分表和分库两种,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的…

微服务拆分策略

拆分策略可以按功能和非功能维度进行考虑,功能维度主要是划分清楚业务的边界,非功能维度主要考虑六点包括扩展性、复用性、高性能、高可用、安全性、异构性。接下来详细介绍下。 1、功能维度 功能维度主要是划分清楚业务边界,采用的主要设计…

微服务拆分

如何定义一个微服务架构?通常情况下,定义应用程序架构分三步。但是,世界上并没有一个机械化的流程可以遵守,然后指望这个流程输出一个合理的架构。这里只能介绍一个笼统的方法,现实世界中,这是一个不断迭代…

每日一题:为什么要进行系统拆分?

原文来自 GitHub 开源社区 Doocs,欢迎 Star 此项目,如果你有独到的见解,同样可以参与贡献此项目。 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始…

个人对系统拆分的理解

在本人现在的公司和本人工作过的上一家公司,本人有幸参与并实施了公司业务系统的架构拆分,现将之前的工作总结下。 1,为什么要进行系统拆分 首先我们需要想想,到底什么样的系统需要进行拆分?并不是所有的系统都需要进…

登录+注册界面的实现(代码)

先看效果图&#xff01; 话不多说&#xff0c;直接上代码&#xff01; //布局文件&#xff1a;activity_login.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android&qu…

简单WEB登录页面代码实现

longin.html&#xff1a;登录页面&#xff0c;此处action引用**/**类型的地址&#xff0c;JSP可以用${ pageContext.request.contextPath }/LS <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&qu…

编写简单的登陆页面

1.简单登录界面&#xff08;自己设置css样式&#xff09; 代码如下 <form id"loginForm" action"#" method"post" novalidate"novalidate"><div class"login_box"><div class"login_box_left"&g…

实现网页登录代码

python 一、前言 本文通过selenium工具实现工作所用网站的自动登录&#xff0c;下图为网站登录界面。 1、运行环境 操作系统&#xff1a;Windows10 python版本&#xff1a;python3.7 2、需要的python第三方库 1、selenium 安装&#xff1a; pip install selenium selen…

【html】【一个简单的用户登录页面代码】

结果 代码 <!DOCTYPE html> <html><head><title>用户登录.html</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"><meta http-equiv"description" content"this is my pag…

html 【一个简单的用户登录页面代码】

效果图 <!DOCTYPE html> <html><head><title>用户登录.html</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"><meta http-equiv"description" content"this is my page&…

简单登录页面html代码

【实例简介】 js/html基础示例&#xff1a;简单登录页面 【实例截图】 【核心代码】 文档&#xff1a;590m.com/f/25127180-496787472-732294&#xff08;访问密码&#xff1a;551685&#xff09; 以下内容无关&#xff1a; -------------------------------------------分…

登录界面源代码

拿走请三联&#xff0c;并注明出处&#xff01; 没有上传原背景图&#xff0c;使用的话需自己更改图片名称 可连接注册界面&#xff0c;和用户照片墙&#xff0c;此文只有登录界面代码&#xff0c;代码存在些许问题&#xff0c;望观看的大佬们多多指教&#xff01; <!DOC…

python实现网站的自动登录(selenium实现,带验证码识别)

python实现网站自动登录&#xff08;selenium实现&#xff0c;带验证码识别&#xff09; 一、前言 这是鄙人写的第一篇博客&#xff0c;旨在总结一下近期所学&#xff0c;本文通过selenium工具实现工作所用网站的自动登录&#xff0c;下图为网站登录界面。 1、运行环境 操作…

登录页面的代码

登录页面的代码 在把页面和数据库做好之后&#xff0c;我的登录页面只需要 用户名和密码 &#xff0c;所以代码比较简单。 先找到登录按钮&#xff0c;给一个点击事件&#xff0c;然后再获取他们的表单值&#xff0c;然后对用户名和密码进行判断&#xff0c;判断是否填写了资料…

核函数(多项式,高斯核)以及svm解决回归问题

文章目录 一、SVM最优化问题转换1、多项式核函数 二、高斯核函数1.引入库1、多项式特征2、高斯核函数升维举例3、高斯核函数超参数gamma 三、svm解决回归问题总结 一、SVM最优化问题转换 变换为数学上一个更好解的 在这个式子中有重要的一项Xi&#xff0c;Xj 两个样本的点乘…