0%

记一次不可回滚的数据迁移

记录一次系统重构升级时涉及数据迁移的注意事项;

问题描述

主要核心服务有用户、设备、机构、人员和人脸;

  1. 系统分层问题,由于刚开始系统开发由业务驱动,机构、设备和人员服务是在业务平台中实现;
  2. 为满足市场变化,新产品不断推出时,技术架构也要做响应调整:提取公共业务组件作为基础服务,甚至将所有基础服务提取出来做成一个独立的系统(IOT开放平台);
  3. 由于初期需求局限,导致重构时动作特别大,业务流程,数据结构都发生了很大变动;

问题来了,为了不影响已有客户,现在线上新老系统双轨运行,要废弃老系统前,必须得完成数据迁移工作。

注意事项

  • 迁移前编写完整的数据迁移实施流程,并和相关业务负责人确认影响范围;
  • 迁移工具的触发要自动化,做到用户无感知迁移:比如在App升级到特定版本时完成数据迁移;
  • 迁移触发方式可以用异步任务的形式实现,收到迁移信号后push到mq,然后消费者pull迁移任务异步完成迁移;
  • 迁移的系统架构可参考如下步骤:

    • context(基础数据准备)
    • before(迁移前数据统计)
    • execute(执行迁移)
    • after(迁移后数据统计、释放资源)
  • 允许重复执行迁移:数据库操作幂等,可用ON DUPLICATE KEY UPDATE实现;

  • 针对数据库的新字段要set default;
  • 针对更新/删除的数据要delete缓存;
  • 用户的部分设备数据迁移后,用户的报表服务需要从同时从新&老系统中读取数据,合并后生成报表;
  • 迁移结果要持久化存储,方便问题回溯;