你好,我是任杰。这一讲我想和你聊一聊如何在运行时进行数据系统分库。
如果你需要进行数据系统分库,那么恭喜你,你的业务量又上了一个新的台阶。但是随之而来也有一个坏消息,那就是分库的过程想做得好的话会很困难。如果做得不好,可能你在每次集群的扩容前,都需要暂停业务,这样会带来一定的经济损失。
所以,为了解决这个问题,我们今天就来学习一下怎么做动态扩容。
支持分库功能的架构目标分析
在我们学习如何实现动态分库之前,先来看看我们的设计目标是什么。
最原始的分库方法是先将业务暂停,这样就不会有人修改数据系统。接着要完成数据系统备份,以防出错后回滚所有操作。然后按照预定的逻辑将数据切分到不同的机器上。如果测试结果没问题,那么就重启业务。
虽然这个方法清晰简单,但是带来的问题是业务需要暂停很久的时间。这个过程的示意图如下:
所以,分库并不是一个不能解决的问题,只是我们希望分库的时间越短越好。那前面说的这几个步骤在时间上还能不能再优化一下呢?其实也是可以的。
数据系统一般都会提供一个异步备份的容灾配置,你可以多备份一台机器。虽然这台备份机并没有所有数据,但是大部分数据都在,所以当你把业务系统停掉之后,只需要把备份机和主机之间的差别补全就可以了。