问题描述
主要核心服务有用户、设备、机构、人员和人脸;
- 系统分层问题,由于刚开始系统开发由业务驱动,机构、设备和人员服务是在业务平台中实现;
- 为满足市场变化,新产品不断推出时,技术架构也要做响应调整:提取公共业务组件作为基础服务,甚至将所有基础服务提取出来做成一个独立的系统(IOT开放平台);
- 由于初期需求局限,导致重构时动作特别大,业务流程,数据结构都发生了很大变动;
问题来了,为了不影响已有客户,现在线上新老系统双轨运行
,要废弃老系统前,必须得完成数据迁移工作。
注意事项
- 迁移前编写完整的数据迁移
实施流程
,并和相关业务负责人确认影响范围; - 迁移工具的触发要
自动化
,做到用户无感知迁移:比如在App升级到特定版本时完成数据迁移; - 迁移触发方式可以用
异步
任务的形式实现,收到迁移信号后push到mq,然后消费者pull迁移任务异步完成迁移; 迁移的系统架构可参考如下步骤:
- context(基础数据准备)
- before(迁移前数据统计)
- execute(执行迁移)
- after(迁移后数据统计、释放资源)
允许重复执行迁移:数据库
操作幂等
,可用ON DUPLICATE KEY UPDATE
实现;- 针对数据库的新字段要set default;
- 针对更新/删除的数据要delete缓存;
- 用户的部分设备数据迁移后,用户的报表服务需要从同时从新&老系统中读取数据,合并后生成报表;
- 迁移结果要持久化存储,方便问题回溯;