数据迁移的套路

标签: | 发表时间:2020-05-10 22:13 | 作者:
出处:https://mp.weixin.qq.com

数据迁移的类型

随着业务的发展,存储也会经常性的需要迁移。以下场景是我们开发过程中经常遇到的

  1. 业务、团队在快速扩张,需要适当时机进行微服务的拆分,需要独立的数据库,将数据从源数据库迁移到新的数据库

  2. 单表的记录数比较大,需要进行分库分表。需要将老表的数据迁移到新的分表中。

  3. 存储选型不对,比如关系型数据库的相互迁移, PG, MySQL,Oracle的相互迁移。NoSQL的Mongo,Cassandra,Hbase的相互迁移。

  4. 机房的迁移,自建机房到云的相互迁移

这些场景都需要进行数据迁移,虽然细节的方案有不同之处,但是也会有一些共同之处。

数据迁移的方案

数据迁移简单来说就是将数据从一个地方挪到另外一个地方。 因为我们的数据不是静态的,所以我们不能随便写个job迁移就好了。需要确保一些迁移上的标准

标准

数据一致性迁移完数据不能丢记录,单条记录的数据不能缺字段。

不停机数据在不断的写入,不能为了阻止写入,而不允许数据写入,需要保证业务写入的可用性。

迁移过程可中断、可回滚这点要求很高,是确保数据万无一失的策略。在迁移数据的各个阶段发现有问题,都可以回滚到原来的库,保证业务正常运行。

迁移方案

为了达到上述要求,一般采用双写策略。也就是写两份,既往老的写,也往新的写。

  1. 收敛读写 读写的入口越多,后续需要进行开关切换的地方就越多,就越容易出错,所以要尽可能的先将所有的读写入口都收敛到一个地方

  2. 双写 将增量的数据同时写入到两个存储系统。确保新的写入代码没问题。双写以写入老的为准,老的写入成功代表操作成功了,写入新的失败了需要记录失败日志,分析为何失败,进行修正和补偿

  3. 将老的存量数据迁移过来 老的存量数据迁移就是通过遍历id,写入新的存储。具体的方案有很多。可以使用同步工具,比如binlog +flink来处理。数据量比较少的就直接遍历就行。

  4. 数据校验 数据的一致性校验是重中之重,确保两边数据的记录数,单条记录的数据完整性。如果数据量不多,一般是全量校验。数据量很多,可以抽样校验。

  5. 切换新的读 数据校验通过后,就可以切换到新的读,万一还有问题,可以切换到老的读。排查问题,重新来过。

  6. 停止双写 在新的存储中安全平稳的运行了N天后,就可以停掉老的读了,整个迁移过程完成了。

注意事项

  1. 对于后端服务,存储是基石,是重中之重。稳定性要求是最高的。一定要确保数据是平滑迁移的,对业务无感知。

  2. 同时存储是有状态的,迁移难度比较大,开发者需要具备前瞻性,尽量在选型的时候慎重,选择合适的数据库,避免进行数据库迁移。发现数据库选型有潜在的问题时,需要当机立断,尽早迁移。不要以为出现问题的概率不大,就拖延了。否则一旦出现问题,就是重大故障,造成的损失难以估量。


相关 [数据 套路] 推荐:

数据迁移的套路

- -
随着业务的发展,存储也会经常性的需要迁移. 以下场景是我们开发过程中经常遇到的. 业务、团队在快速扩张,需要适当时机进行微服务的拆分,需要独立的数据库,将数据从源数据库迁移到新的数据库. 单表的记录数比较大,需要进行分库分表. 需要将老表的数据迁移到新的分表中. 存储选型不对,比如关系型数据库的相互迁移, PG, MySQL,Oracle的相互迁移.

缓存更新的套路

- - 酷 壳 – CoolShell.cn
看到好些人在写更新缓存数据代码时, 先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中. 试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库. 于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了.

柯南破案的标准套路

- sugar - 河蟹娱乐
具体套路就是这样,尸体绝大多数时候是由女性发现的,然后嗷的一嗓子人就都到齐了. 再看嫌犯,首先有一个凶神恶煞的、看着就不像好人的、跟曹爷似的嫌疑人,不过放心,这人肯定是好人. 还会有一个一听说案子就吓的屎尿俱出顺裤裆流明显跟案子有牵连的嫌疑人,这人肯定知道不少内情,但不是凶手,而且之后十有八九会被真凶干掉.

[译]最牛B的编码套路

- - 陆其明's Blog
最近,我大量阅读了Steve Yegge的文章. 其中有一篇叫“ Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:. 与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是真正意义上的锻炼——参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平.

招聘面试的套路与原则

- - mindwind
进入八月,开启了夏季的社招季. 近期集中的招聘、面试,形成了一些心得体会,或者说叫套路,而隐藏在这些套路背后的其实是一些更通用的原则. 所以,这一篇其实是写给招聘者的,不过,所有的应聘者也有可能有成为招聘者的一天,也可以参考. 一次集中的扩招需求,有点像每年一度的晋升评审,都需要对大量的候选人进行定级评审,因为每一个新招聘的人员都会对其有一个定级的过程.

分布式架构的套路No.74

- -
今天小蕉跟大伙一起聊聊分布式系统的架构的套路. 在开始说套路之前,大家先思考一个问题,为什么要进行分布式架构. 大多数的开发者大多数的系统可能从来没接触过分布式系统,也根本没必要进行分布式系统架构,为什么. 因为在访问量或者QPS没有达到单台机器的性能瓶颈的时候,根本没必要进行分布式架构. 那如果业务量上来了,一般会怎么解决呢.

Kubernetes日志收集的那些套路

- - DockOne.io
Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志. 引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置. 本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出)和STDERR(标准错误输出).

dotnet 一些代码审查套路

- - 林德熙
本文记录一些代码审查套路,在看到小伙伴写出某些代码的时候可以告诉他这样写有锅. 我在各个项目里面进行代码审查,我维护了很多个项目. 这是我截图某一天的一个核心项目的在 Gitlab 上的 MR 情况,我觉得头像应该是不用保密的,这样知道的小伙伴自然就知道了. 对了,那些挂了超过3天的都是标记 WIP 还在开发中的.

新读图时代:恐怖片的14个镜子套路

- 姜小白 - 东西