不停机数据迁移方案
序言
在微服务流行的当下,相信很多人遇到过老系统服务化的情况。服务的拆分也会涉及到数据存储的拆分,这就需要把原数据库的数据同步到新库。本文会介绍一种主流的不停机数据迁移的思路。
数据双写
文章图片
数据迁移-数据双写方案.jpg
原service A访问DB A的表a,现在要把涉及到表a的业务拆成Service B。不停机双写方案如下:
- service A改造服务,关于a的写(CUD)请求,同时同步给服务B。这是双写的由来。读请求还是走旧表。这里需要实现一个动态开关,控制数据的请求流向。
- CREATE 新旧表都没有数据,所以不会有问题,注意这里同步时要带旧表主键。
- DELETE 新表有数据旧表没有,旧表数据删除失败
- UPDATE相当于DELETE+CREATE
- 全量同步老表的数据到新表,出现主键冲突,以旧表数据为准。
- 循环执行数据校验脚本,发现数据不一致, 以旧表数据为准,覆盖新表数据。这一步要一行一行的比对步骤1开始之后变动的数据。
- 旧表有,新表也有,但是不一致。以旧表数据为准。
- 旧表有,新表没有,插入新表。(实际不存在这种情况)
- 旧表没有,新表有, 删除新表。
【不停机数据迁移方案】有读者可能会说以旧表为准,可能会导致旧数据覆盖新数据。确实存在这种情况,不过我们的数据校验脚本会一直执行,直到检查不到不一致数据为止,所以 数据最终会一致,而且一致前还是旧库提供服务,所以无伤大雅。
推荐阅读
- 急于表达——往往欲速则不达
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 家乡的那条小河
- Docker应用:容器间通信与Mariadb数据库主从复制
- 一个人的碎碎念
- 赠己诗
- 这辈子我们都不要再联系了
- 死结。
- 我从来不做坏事
- 时间老了