首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

作为通用架构师,我是如何把控迁移技术方案的

本文讲解的方法论是一种通用的迁移方案,既适合字段迁移、表迁移、也适合库迁移以及应用迁移,既适合数据库的迁移也适合缓存的迁移,虽然在细节上有些不同,但是在方法论上则大同小异,我们以分片后的数据容量不能满足需求,需要对分片后的数据扩容为例,这里的扩容实际上是迁移的一种特殊案例,我们以扩容为例来说明相应的步骤和实现细节。

1. 平滑迁移

平滑迁移适合对可用性要求较高的场景,例如,线上的交易服务对缓存或者数据库依赖较大,不能忍受停机带来的业务损失,也没有交易的低峰期,我们对此只能采用平滑迁移的方式。

平滑迁移,是指将正在提供线上服务的数据,从一个地方数据存储到另一个数据存储,整个迁移过程中要求不停机,服务不受影响。根据数据所处层次,可以分为缓存迁移、数据库存储迁移、应用迁移等等;根据数据迁移前后的变化,又可以分为数据平移和数据转移。数据库对数据库的迁移属于平移,数据库对其他Nosql库的迁移属于数据转移。

数据平移是指迁移前后数据组织形式不变,比如Mysql数据库从1个实例扩展为4个实例,Redis缓存从2个实例扩展到8个实例,等等。

如果在最初的设计里就为以后的扩容做好准备,也就是做了充分的容量评估,关于容量评估,请参考《分布式服务架构:原理、设计与实战》的第3章的内容,那么数据迁移工作就会简单很多,比如Mysql已经做了分库分表,扩展实例的时候,只需要多做几个从库,切换访问关系,最后将冗余的库表删除即可达到扩容的效果,当然,这需要短暂的停止服务。

近年来出现很多支持自动可伸缩的数据库,在实现上已经做到全自动数据迁移,如HBase、TiDB等,那就更简单了,只要通过管理功能来添加机器,手工修改配置或者系统自动发现,就可完成数据库容,也就免去了发杂的数据迁移等工作。

数据转移是指在数据迁移前后,数据组织形式发生了变化。比如将Mysql数据库迁移到HBase数据库,微博就经历过这样的过程。

平滑迁移通常使用的是双写方案,方案分成4个步骤:双写、迁移历史数据、切读、下双写。

这种方式如果应用与缓存扩容的迁移的场景,则还有一个变种,就是不需要迁移旧数据,在第1步中双写后,在一定的时间里通过新规则对新缓存进行写入,新缓存已经有了足够的数据,这样我们就不用再迁移旧数据,直接进入第3步即可。

首先,假设我们的应用现在使用了具有两个分片的数据集群,通过关键字哈希的方式进行路由,如下图所示。

因为两个分片已经不能满足容量的需求,所以现在需要扩容到4个分片,达到原来两倍的总大小,因此我们需要迁移。

迁移的具体过程如下。

1. 双写

按照新规则和旧规则同时往新新旧数据系统中写数据,如下图所示。

2. 迁移历史数据

把旧缓存集群中的历史数据读取出来,按照新的规则写到新的数据集群中,如下图所示。

3. 切读

把应用层所有的读操作路由到新的数据集群上,如下图所示。

4. 下线双写

在这一步,我们把写入旧的集群的逻辑下线,,如下图所示。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180221B0E3TL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券