通用架构师应该如何把控迁移技术方案

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

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

迁移的具体过程如下。

1. 双写

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

![image.png](http://upload-images.jianshu.io/upload_images/4310879-8b3807d7619de48c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


这里,我们仍然按照旧的规则,也就是关键字哈希除以2取余来路由分片,同时按照新的规则,也就是关键字哈希除以4取余来路由到新的4个分片上,来完成数据的双写。

2. 迁移历史数据

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

![image.png](http://upload-images.jianshu.io/upload_images/4310879-c9c2cc77b2a45c54.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


在这个过程中,我们需要迁移历史数据,在迁移的过程中可能需要迁移工具,这也需要一部分开发工作量。在迁移后,我们还需要对迁移的数据进行验证,表明我们的数据迁移成功。

3. 切读

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

image.png

在这一步骤里,把应用中读取的操作的数据源转换成新的数据集群,这是应用的读写操作已经完全发生在新的数据库集群上了。这一步一般不需要上线代码,我们会在一开始上双写时就实现开关逻辑,这里只需要将读的开关切换到新的集群即可。

4. 下线双写

在这一步,我们把写入旧的集群的逻辑下线,,如下图所示。 
这一步通常是在双写和切读后验证没有任何问题,并保证数据一致性的情况下,才把这部分代码下线。同时可以把旧的分片下线,如果是扩容的场景,并且重用了旧的分片1和分片2,则还可以清理分片1和分片2中的冗余数据。

可以用“软着陆”来形容双写迁移方案,这和新领导上任后,一般先招心腹,慢慢的替代老下属的职责,慢慢淘汰老下属,慢慢实现软着陆如出一辙。

更多的关于“通用架构师应该如何把控迁移技术方案”的内容,请参加艳鹏在gitchat上的唠嗑节目。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

打造前端 Deepin Linux 工作环境——安装配置 atom 编辑器

打造前端 Deepin Linux 工作环境——安装配置 atom 编辑器 好,我个人推荐大家使用 atom 编辑器,第一是免费,第二是好看,第三是好用。 安装...

2788
来自专栏Java3y

纳税服务系统总结

纳税服务系统总结 纳税服务系统是我第一个做得比较大的项目(不同于javaWeb小项目),该项目系统来源于传智Java32期,十天的视频课程(想要视频的同学关注我...

2829
来自专栏Coco的专栏

【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

1418
来自专栏BeJavaGod

搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器

solr,什么是solr,就是你要吃的东西“馊了”,不能吃了,out of date~ 嘛。。。开个玩笑,发音就是‘搜了’,专门用于搜索的一个开源框架,lunc...

3016
来自专栏云计算教程系列

CentOS 如何配置NTP加入NTP池项目

准确的计时对于几乎所有服务或软件都至关重要。在分布式平台上运行的电子邮件,记录器,事件系统和调度程序,用户身份验证机制和服务都需要准确的时间戳来按时间顺序记录事...

1320
来自专栏运维

Ubuntu10.04 sudoers文件损坏又没有root密码修复

Ubuntu10.04 sudoers文件损坏又没有root密码修复 昨天遇到一个案子: 一台GIT服务器是安装的Ubuntu10.04的系统,上面有几个普...

762
来自专栏武军超python专栏

2018年8月9号飞机大战项目答辩得到的经验和基本的win终端命令

今天遇到的新单词: adapter n适配器 virtual adj 虚拟的 interface n接口 corporation n公司,法人

883
来自专栏区块链

XSS攻击——每周小讲堂

我们从一个很蠢的例子开始。 假设网站上有一个很简单的输入框,如果输入123并提交,就会保存并显示在url上。 比如现在填一段JS代码字符串并提交,就会得到一个包...

1756
来自专栏葡萄城控件技术团队

HTML5 & CSS3初学者指南(3) – HTML5新特性

介绍 本文介绍了 HTML5 的一些新特性。主要包含以下几个方面: Web 存储 地理位置 拖放 服务器发送事件 Web存储 HTML5...

1978
来自专栏腾讯NEXT学位

React 16 加载性能优化指南(上)

公司的新项目迁移到了 React 16 和 Webpack 4.0,写一篇文章来总结一下。

5155

扫码关注云+社区