扩容方案
当系统用户进入了高速增长期时,即便是对数据进行分库分表,但数据库的容量,还有表的数据量也总
会达到天花板。当现有数据库达到承受极限时,就需要增加新服务器节点数量进行横向扩容。
首先来思考一下,横向扩展会有什么技术难度?
- 数据迁移问题
- 分片规则改变
- 数据同步、时间点、数据一致性
提供以下两种方案参考:
停机扩容
这是一种很多人初期都会使用的方案,在数据库较少时,业务较为简单时使用,大致步骤:
- 停止对外服务。
- 新增N哥数据库,写数据迁移程序,将原有的X个库数据导入最新的Y个库中。(比如更改分片规则)
- 数据迁移完成,修改数据库服务配置,原来x个库的配置升级为y个库的配置。
- 重启服务,连接新库重新对外提供服务。
优点:
- 简单,停机操作风险较低
缺点:
- 停止服务,缺乏高可用
- 如果有问题没有及时测试出来启动了服务,运行后发现问题,还需要继续刷数据,如果涉及数据量较大则较难修复。
平滑扩容
数据库扩容的过程中,如果想要持续对外提供服务,保证服务的可用性,平滑扩容方案是最好的选择。
平滑扩容就是将数据库数量扩容成原来的2倍,比如:由2个数据库扩容到4个数据库,具体步骤如下:
- 新增2个数据库
- 配置双主进行数据同步
- 数据同步完成之后,配置双主双写(同步因为有延迟,如果时时刻刻都有写和更新操作,会存在不
准确问题)
- 数据同步完成后,删除双主同步,修改数据库配置,并重启;
- 此时已经扩容完成,但此时的数据并没有减少,新增的数据库跟旧的数据库一样多的数据,此时还
需要写一个程序,清空数据库中多余的数据,如:
User1去除 uid % 4 = 2的数据;
User3去除 uid % 4 = 0的数据;
User2去除 uid % 4 = 3的数据;
User4去除 uid % 4 = 1的数据;
平滑扩容方案能够实现n库扩2n库的平滑扩容,增加数据库服务能力,降低单库一半的数据量。其核心
原理是:成倍扩容,避免数据迁移。
优点:
- 扩容期间,服务正常进行,保证高可用
- 相对停机扩容,时间长,项目组压力没那么大,出错率低
- 扩容期间遇到问题,随时解决,不怕影响线上服务
- 可以将每个数据库数据量减少一半
缺点:
- 程序较为复杂
- 数据量较大时,代价较高