侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

不停机数据迁移方案

再见理想
2023-06-20 / 0 评论 / 0 点赞 / 1,345 阅读 / 575 字

一,场景

订单系统中,不同订单来源对应了不同的订单表(字段差异不大),导致后期订单表维护成本非常高。需要将多张订单表合成一张表,并对旧数据进行同步。

二,技术难点

1,属于to C服务,需要不停机无缝切换;

2,业务还在迭代开发中,不能更改数据源的访问;

3,订单属于核心链路,如何保证数据安全,数据切换一致性;

三,解决方案

先将新数据双写进新旧数据表,再将旧表数据同步到新表,然后灰度切换读流量,对数据进行校验、异常告警,逐步将读流量切到新表,观察一段时间数据无异常后停止写入旧表,完成迁移。大概流程可以参考下图:

3.1,实现步骤

  1. 双写或订阅binlog:

    需要注意:1,如果跨实例,可以采用订阅binlog方式,避免事务问题,不过需要处理数据延迟问题;2,多张表合成一张表,考虑id冲突问题。

  2. 历史数据同步:

    可以采用阿里云DTS等工具进行数据迁移。

  3. 切读流量:

    需要注意:1,灰度切换,风险控制;2,校验机制:读请求先读旧表,再读新表,校验新旧表数据一致才返回新表数据,否则还是走旧表,且发告警;3,新的读逻辑需要考虑更新延迟情况。

  4. 完成切流,观察一段时间正常后,停止写入旧表;

3.2,怎么保证新老表写入的一致性

首先将写入新老表放在同一个事务里;在数据同步过程中,update更新数据时,先更新旧表,发现新表没有数据,但下一刻旧表数据又同步过来,导致数据的不一致。这时还需要一个定时任务进行对账,发现问题进行告警。

0

评论区