11、可扩展的Mysql

什么是可扩展性

简要地说,可扩展性表明了当需要增加资源以执行更多工作时系统能够获得划算的等同提升的能力。
从较高层次看,可扩展性就是能够增加资源来提升容量的能力。

正式的可扩展性定义

另一种说法,可扩展性是当增加资源以处理负载和增加容量时系统能够获得的投资产出率。

扩展Mysql

规划可扩展性

通常只有在无法满足增加的负载时才会考虑到可扩展性,具体表现为工作负载从CPU密集型变成IO密集型,并发查询的竞争,以及不断增大的延迟。
规划可扩展性最困难的部分是估算需要承担的的负载到底有多少,这个值不一定非常精确,但必须在一定的数量级范围内。如果估计过高,会浪费开发资源,但如果估计过低,则难以应付可能得负载。
以下的一些问题可以帮助规划可扩展性:

  1. 应用的功能完成了多少
  2. 预期的最大负载是多少
  3. 如果依赖系统的每个部分来分担负载,在某个部分失效时会发生什么

为扩展赢得时间

  1. 优化性能
  2. 购买性能更强的硬件

向上扩展

向上扩展意味着购买更多性能强悍的硬件。

向外扩展

可以把向外扩展策略划分为三个部分:复制、拆分,以及数据分片。
最简单也是最常见的向外扩展的方法是通过复制将数据分发到多个服务器上,然后将备库用于读查询。

通过多实例扩展

通过集群扩展

向内扩展

处理不断增长的数据和负载最简单的方法是对不再需要的数据进行归档和清理。
在设计归档和清理策略时需要考虑以下几点:

  1. 对应用的影响
  2. 要归档的行
  3. 维护数据一致性
  4. 避免数据丢失
  5. 解除归档

负载均衡

负载均衡的基本思路很简单:在一个服务器集群中尽可能低平均负载量。通常的做法是在服务器前端设置一个负载均衡器。然后负载均衡器将请求的连接路由到最空闲的可用服务器。
负载均衡常用的五个目的:

  1. 可扩展性
  2. 高效性
  3. 可用性
  4. 透明性
  5. 一致性

直接连接

复制上的读/写分离

Mysql复制产生了多个数据副本,可以选择在备库还是主库上执行查询,由于备库复制是异步的,因此主要的难点是如何处理备库上的脏数据。
比较常见的读写分离方法如下:

  1. 基于查询分离
  2. 基于脏数据分离
  3. 基于会话分离
  4. 基于版本分离
  5. 基于全局版本/会话分离

修改应用配置

修改DNS

转移IP地址

引入中间件

负载均衡器

负载均衡算法

在服务器池中增加/移除服务器

一主多备间的负载均衡

  1. 功能分区
  2. 过滤和数据分区
  3. 将部分写操作转移到备库
  4. 保证备库跟上主库
  5. 同步写操作

你可能感兴趣的:(Mysql高性能学习,mysql,数据库,java,后端,面试)