每日一句:我解过那么多数学题,可是我却解不开你的。
Mysql作为数据库,保存系统中所有的需要持久化的数据,那么当单机的性能和存储已经无法满足程序的要求了,就需要对Mysql进行扩展,下面就简单介绍一下Mysql的可扩展性
Mysql的扩展主要围绕的主要方面有:CPU、内存、磁盘、网络等
扩展的场景
Mysql在什么样的场景下,或者从什么维度认为Mysql是需要进行扩展了
- 数据量:当数据量已经非常大,或者Mysql服务器的磁盘已经无法容纳更多的数据文件
- 用户量:和数据量太大基本一致,用户量过大会导致存储大量的数据文件和让查询变慢
- 相关数据表的大小:当一个数据表中的数据量已经非常大,或者说查询非常缓慢
当出现以上情况或者为更好的性能做规划时,那么就需要对Mysql的扩展性进行计划,Mysql的扩展有哪些方面呢?
向上扩展
向上扩展(垂直扩展),保持Mysql单机节点,增加性能更好的硬件来提高Mysql的性能,主要有增加更多的CPU、增加内存、增加磁盘等
-
优点
提升硬件可以保证Mysql单机,减少程序和Mysql的复杂性,便于维护,保证数据一致性
-
缺点
单机不能很好的保证高可用,以及单机的提升是相对有限
在数据量并不是特别大的场景下,采用这种方式较好,高可用可以使用定期备份的方式来弥补
向外扩展
向外扩展(水平扩展),可以从三个方面来进行水平扩展:复制、拆分、水平分片。主要为增加多个Mysql节点的方式
复制
主从复制的方式即复制的场景,将Mysql的数据保存到多个节点,来减少单点的负载,并且同时可以实现可用性。
-
优点
多个Mysql节点保证了可用性,并且降级了主库的负载,将数据分发到多个节点可以继续做读写分离等提高性能
-
缺点
多个Mysql节点在同步数据的时候会有一定的延迟,不能保证数据的一致性
数据的强一致性可以保证,不过就无法保证并发度和性能,分别有两种方式:
- Mysql5.5的特性—半同步复制
- 全同步复制
拆分
将Mysql按照不同的功能拆分为多个节点,每个节点连接不同的程序,可以用来做备份、报表等不同的业务,某些功能可以在执行的时候会增加Mysql的负载,所以单独的使用Mysql节点不会相互影响,可以提高效率和可用性
-
优点
根据不同的策略来拆分节点,保证单点的可用性和效率
-
缺点
拆分之后会增加系统的复杂性和Mysql的可维护,并且对于多个单点还是需要去垂直扩展