简要地说,可扩展性表明了当需要增加资源以执行更多工作时系统能够获得划算的等同提升的能力。
从较高层次看,可扩展性就是能够增加资源来提升容量的能力。
另一种说法,可扩展性是当增加资源以处理负载和增加容量时系统能够获得的投资产出率。
通常只有在无法满足增加的负载时才会考虑到可扩展性,具体表现为工作负载从CPU密集型变成IO密集型,并发查询的竞争,以及不断增大的延迟。
规划可扩展性最困难的部分是估算需要承担的的负载到底有多少,这个值不一定非常精确,但必须在一定的数量级范围内。如果估计过高,会浪费开发资源,但如果估计过低,则难以应付可能得负载。
以下的一些问题可以帮助规划可扩展性:
向上扩展意味着购买更多性能强悍的硬件。
可以把向外扩展策略划分为三个部分:复制、拆分,以及数据分片。
最简单也是最常见的向外扩展的方法是通过复制将数据分发到多个服务器上,然后将备库用于读查询。
处理不断增长的数据和负载最简单的方法是对不再需要的数据进行归档和清理。
在设计归档和清理策略时需要考虑以下几点:
负载均衡的基本思路很简单:在一个服务器集群中尽可能低平均负载量。通常的做法是在服务器前端设置一个负载均衡器。然后负载均衡器将请求的连接路由到最空闲的可用服务器。
负载均衡常用的五个目的:
Mysql复制产生了多个数据副本,可以选择在备库还是主库上执行查询,由于备库复制是异步的,因此主要的难点是如何处理备库上的脏数据。
比较常见的读写分离方法如下: