如果我们的线上服务不重要,一般来个单体的数据库DB来存储数据即可来。
单体应用 优点:简单,省事,方便。 缺点:数据并发性,稳定性都有问题。
随着数据量的不断增大,一般我们要对数据进行水平切分,水平切分的规则你可以简单根据用户id或者用户IP对数据进行取模,实现路由功能。当然也可以增加Slave跟KeepAlived来实现高可用。
主从+路由 但问题是,如果随着业务发展,目前我们2个库的性能扛不住了,还要继续水平拆分,造出更多库咋办?你一般是如何实现丝滑扩容的呢?
停机扩容 简单直接暴力的方法。
优点:简单 缺点:中间停服务了,无法保证高可用。数据切换前跟切换过程中需确保无任何出错。
在线双写
优点:高可用了。 缺点:不够丝滑,来回挪动数据较大。
目标:打算将原来到两个数据库扩容到4个。
修改配置
服务层reload配置,可以重启服务,也可以CLoud那样配置中心发送信号来实现重读配置文件。
至此,数据库的2 --> 4 扩容完成,原来是2个数据库实例提供服务,现在变为4个数据库实例提供服务。
丝滑扩容 此时 id % 4 = 0 跟 id % 4 = 2 的两个DB 还在同步数据。id % 4 = 1 跟 id % 4 = 3的两个DB还在同步数据。需做一些收尾操作。