一、什么是可扩展性
单台MySQL的服务能力终归是有限的,当单台机器服务不过来时,就需要对MySQL进行扩展。高性能mysql中对可扩展性的定义:可扩展性是当增加资源以处理负载和增加容量时系统能够获得的投资产出率。也就是说想要提升同等的性能,需要投入相应数据量的资源,越到后面,提升性能的性价比越低。在不同的场景下,选择最合适的扩展方案,能够获得更大的性价比。下文将介绍几种常见的扩展思路。
二、提升硬件
单节点扩展意味着购买更加强悍的硬件设备,以提高该机器上运行的软件的性能,更多更好的CPU,更大的内存,更快的硬盘。在一般数据量比较小的情况下,这是一个不错的选择。单台服务器更好维护和开发,降低系统的复杂性。但是如果确定知道数据量规模庞大,必定不可能以单台服务器去承载的,那么不应该浪费大量精力和财力在垂直扩展上,而应该提前做好集群规划。
三、读写分离
通过MySQL的复制,将主库上的数据同步到从库,主库承担所有的写请求,由从库去承担读请求,达到读写分离,可以根据读请求的量级来配置从库的数量。满足如下三个条件的场景可以考虑用读写分离:第一、数据规模有限,单台服务器能够容纳。第二、读多写少,读写分离不能扩展写操作,如果写操作过多,数据同步会有压力。第三、对读一致性要求不高,能够容忍一定的延时。对于某些场景下的业务数据,可以让写之后一小段时间的查询走主库查。比如用户对一部电影的评论,用户发表评论后,用户本身关心能否立即看到评论。但是其余用户并不需要立刻看到该用户的评论。
四、垂直拆分
这里的垂直拆分其