《高性能mysql》第十一章读书笔记

一、什么是可扩展性

    可扩展性表明了当需要增加资源以执行更多工作时系统 能够获得划算的等同提升的能力。

    从较高层次上看是能够通过增加资源来提升容量的能力。

   容量:可以认为是处理负载的能力。

二、扩展mysql

2.1规划可扩展性

       难点:估算需要承担的负载到底有多少。

2.2为扩展赢得时间

     优化性能,购买更强的硬件来争取一些扩展工作的时间

2.3向上扩展

    意味着花钱升级硬件。

2.4向外扩展

      分为三个部分:复制、拆分和数据分片。

1.按功能拆分

    不同的服务器或节点配置不同的应用,每个节点包含这个应用需要的数据即可。

2.数据分片

    将数据分成一小片或一块存储到不同的节点。

    需要从初始就将单一数据存储结构转为分片结构。

3.选择分区键

    尽量选择那些能够避免跨分片查询的,同时也能让分片足够小,以免过大的数据片导致问题。

4.多个分区键

5.跨分片查询

6.分配数据、分片和节点

     分片尽可能的小于节点容量,则可以在单节点上部署多个分片。分片小易于管理,数据的备份和恢复都更容易

7.在节点上部署分片

     每个分片使用单一数据库。

     多个分片的表放到同一个数据库,每个表明包含分片号。

     每个分片使用一个数据库,这个数据库包含所有应用需要的表。

     每个分片使用一个数据库,并在数据库名和表名中包含分片号。

     每个节点上使用多个mysql实例,每个实例上有一个或多个分片,使用上述提到的方式的任意组合安排分片。

8.固定分配

    数据分配到分片的方式:固定分配和动态分配,种方法都需要使用一个分区函数,使用行的分区键值作为输入,返回存储该行的分片。

    固定分配:仅仅依赖分区键的值。eg:hash函数和取模运算。

    优点:简单,开销低,可以在应用中硬编码。

    缺点:分片大,数量少,很难平衡不同分片的负载。

    无法自定义数据放到哪个分片。修改分配策略较难,因为需要重新分配已有的数据

    结论:更倾向于使用动态分配的方式。

    动态分配:每个数据单元映射到一个分片,实际上就是维护一套分片的关系。

    增加了资源的开销,但是可以更好的对数据存储位置做细粒度的控制。

9.混合固定分配和动态分配

10.显示分配

    适用于新插入的数据,开发中极少使用。如果使用,需要将分片号码编码到ID中,防止 主-主 复制主键冲突。

11.重新均衡分片数据

     如有必要,可以通过在分片中移动数据来达到负载均衡。但是也要尽量避免重新均衡分片数据,可能会影响用户使用,和增加新特性。

12.生成全局唯一ID

     讲一个现有系统转为分片数据存储时,经常需要在多台机器上生成全局唯一ID。

     如下几个方法可以生成:

     使用auto_jncrement_jncrement和auto_jncrement_offset

     全局节点中创建表

     使用memcached或Redis

     批量分配数字

     使用复合值

     使用GUID值

13.分片工具

     在设计数据分片应用时,首先要做的是编写能够查询多个数据源的代码。需要设计一个抽象层。完成以下任务:

     连接到正确的分片并查询

     分布式一致性校验

     跨分片结果集聚合

     跨分片关联操作

     锁和事务管理

     创建新的数据分片

2.5通过多实例扩展

     核心实际上是充分利用服务器的资源,以较低的成本做较高效的设计。

2.6通过集群扩展

     1.MYSQL Cluster(NDB Cluster)

     2.Clustrix

     3.ScaleBase

     4.BenieDB

     5.Akiban

2.7向内扩展

     仅仅作为争取时间的短期策略

     设计归档和清理策略时要考虑下面几点:

     对应用的影响

     要归档的行

     维护数据一致性

     避免数据损失

     解除归档

三、负载均衡

     就是尽可能的平均负载量。

     负载均衡的目的:

     可扩展性

     高效性

     可用性

     透明性

     一致性

3.1直接连接

     1.复制上的读写分离

     常见的读写分离方法:

     基于查询分离

     基于脏数据分离

     基于会话分离

     基于版本分离

     基于全局版本/会话分离

     2.修改应用的配置

     通过代码来实现负载均衡,代码要有健壮性和精确性。

     3.修改DNS

     比较粗糙不太可控

     4.转移IP地址

     在服务器之间转移虚拟地址。

3.2引入中间件

     大部分的负载均衡都会引入中间件作为网络通信的代理。接受请求和派发请求到不同的服务器上。

     1.负载均衡器

     mysql都是正常的TCP/IP连接,所以可以在MYSQL上使用多用途负载均衡器。但由于缺少Mysql专有的特性,因此会有一些限制。

     a.无法真正做到负载均衡,不同功能的服务器的硬件不同就会有差异

     b.mysql连接是有状态的,负载均衡器不知道如何把所有从单个http会话发送的连接请求“固定”到一个mysql服务器上。

     c.连接池和长连接可能会阻碍负载均衡器分发连接请求。

     d.许多负载均衡器只会对http服务器做健康和负载检查。

     2.负载均衡算法

     常用的算法:

     随机

     轮询

     最少连接数

     最快响应

     哈希

     权重

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

     3.3一主多备间的负载均衡

     这是最常见的复制拓扑结构。

     功能区分

     过滤和数据分区

     将部分写操作转移到备库

     保证备库跟上主库

     同步写操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值