MySQL 可扩展性-垂直扩展 & 水平扩展

MySQL 可扩展性-垂直扩展 & 水平扩展

如果将应用所有的数据简单的放到单个MySQL服务器实例上,则无法很好的扩展,迟早会碰到性能瓶颈。对于许多类型的应用,传统的解决方法是购买更多强悍的机器,也就是常说的 “垂直扩展”或者“向上扩展”。另外一个与之相反的方法是将任务分配到多台计算机上,这通常称为“水平扩展”或者“向外扩展”。

垂直扩展

对于垂直扩展,意味着购买更多性能强悍的硬件,对很多应用来说这是唯一需要做的事情。但是在现代硬件上MySQL能扩展的合理值为256 GB RAM,32核CPU以及一个PCIE flash驱动器,并且需要使用尽可能最新的MySQL版本。如果在此基础上继续提升硬件的配置,MySQL的性能虽然还能提升,但性价比就会降低。

 

水平扩展

一般策略划分为三个部分:复制、拆分、以及数据分片(sharding)。

最简单也最常见的水平扩展(向外扩展)的方法是通过复制将数据分发到多个服务器上,然后将备库用于读查询。这种技术对于以读为主的应用很有效。他也有一些缺点,例如重复缓存,但如果数据规模有限就不存在这个问题。

MySQL节点的概念:

在MySQL架构中,一个节点(node)就是一个功能组件。如果没有规划冗余和高可用性,那么一个节点可能就是一台服务器。如果设计的是能够故障转移的冗余系统,那么一个节点通常可能就是下面的某一种:

  • 一个 主-主 复制双机结构,拥有一个主动服务器和被动服务器
  • 一个 主库和多个备库
  • 一个 主动服务器,并使用分布式复制块设备(DRBD)作为备用服务器
  • 一个 基于存储区域网络(SAN)的“集群”

在大多数情况下,一个节点内的所有服务器应该拥有相同的数据。

1.按功能划分

数据库拆分一般可以按照功能拆分或者说是业务拆分,也就是把不同的功能或者是不同的业务尽可能地拆分开,然后把各个功能或业务需要的数据库独立运行,也是一种很好的方式。可想而已肯定可以减小写入和读取数据的压力。

2.数据分片

在目前用于扩展大型MySQL应用的方案中,数据分片是最通用且最成功的方法。他把数据分割成一小片,或者说一块,然后存储到不同的节点中。

数据分片在和某些类型的按功能划分联合使用时非常有用。大多数分片系统也有一些“全局的数据”不会被分片(例如城市列表或者登陆数据)。全局数据一般存储在单个节点上,并且通常保存在类似memcached这样的缓存里。

分片数据存储看起来像是优雅的解决方案,但很难实现。那为什么要选择这个架构呢?答案很简单:如果想扩展写容量,就必须切分数据。如果只有单台主库,那么不管有多少备库,写容量都是无法扩展的。

3.选择分区键

选择分区键的时候,尽可能选择那些能够避免跨分片查询的,但同时也要让分片足够小,以避免过大的数据片导致问题。如果可能,应该期望分片尽可能同样小,这样在为不同数量的分片进行分组时能够很容易平衡。

4.多个分区键

5.跨分片查询

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

7.在节点上部署分片

8.固定分配

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

固定分配使用的分区函数仅仅依赖于分区键的值。哈希函数和取模运算就是很好的例子。

但固定分配也有如下缺点:

  • 如果分片很大并且数量不多,就很难平衡不同分片间的负载。
  • 修改分片策略比较困难,因为需要重新分配已有的数据。

9.动态分配

另外一个选择使用动态分配,将每个数据单元映射到一个分片。假设一个有两列的表,包括用户ID和分片ID。

create table user_to_shard {
	user_id INT NOT NUll,
	shard_id INT NOT NULL 
	primary key (user_id)
}

这个表本身就是分区函数。给定分区键(用户ID)的值就可以获取分片号。

动态分配增加了分区函数的开销,因为需要额外调用一次外部资源,例如目录服务器(存储映射关系的数据存储节点)。动态分配的最大好处是可以对数据存储位置做细粒度的控制。

......................................

......................................

========END========

转载于:https://my.oschina.net/xinxingegeya/blog/1545305

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值