高性能MySQL(第三版)第十一章:可扩展的MySQL

本文详细介绍了MySQL的可扩展性,包括向上扩展(升级硬件),向外扩展(如读写分离、数据分片),向内扩展(数据清理和归档)以及负载均衡策略。强调在扩展前应充分利用单机性能,同时指出分片并非总是必要的,应根据实际需求谨慎选择。文章还探讨了不同负载均衡方法的优缺点,如轮询、最少连接数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11.1 什么是可扩展性

可扩展性。 即通过增加资源提升整个系统吞吐量的能力

一般会有如下的角度影响负载:

  • 数据量
  • 用户量 更多的用户,意味着更多的数据,更复杂的查询,更多的事务
  • 用户活跃度 容易造成热点
  • 相关数据集的大小 即关联数据,比如好友

可扩展性的数学表现:

  • 最简单的是线性的,资源翻倍,吞吐量翻倍
  • 但是由于有些工作是线性的,无法通过并发来提升,这样曲线就会趋于平缓
  • 再引入扩展带来的内部节点或者是线程间的通信,会造成曲线的不降反升
  • 考虑到有一些I/O密集型的应用,扩展只会可能变成全都读取内存,还有可能造成曲线上扬

11.2 扩展MySQL

通常系统初建时要考虑一点可扩展性。在扩展之前,要先压榨单机性能,比如算法调优等等。

11.2.1 向上扩展

向上扩展就是换CPU,磁盘等等。对部分应用来说这是唯一需要做的。

优点:

  • 单台服务器比多台服务器更加容易开发和维护,能显著节省开销
  • 在单台服务器上备份和恢复应用同样简单;
  • 无需关心一致性;

为了能够更好的在大型服务器上运行MySQL,一定要尽量使用最新的版本。
如果应用变得非常庞大,向上扩展可能就没有办法。

11.2.2 向外扩展

向外扩展有时也称为横向扩展或者水平扩展,策略划分为三个部分:复制、拆分,以及数据分片(sharding)。

最简单的扩展方法是通过复制将数据分发到多个服务器上,然后将备库用于读查询,即读写分离。

另外一个比较常见的向外扩展方法是将工作负载分布到多个“节点”。许多大型的MySQL应用不能自动分布负载,就算有也没有做到完全的自动化。

一个节点可能就是一台服务器,如果设计冗余,那么一个节点通常是下面的某一种:主主复制,一主多备复制,一主多备DRBD复制,共享存储。大多数情况下,一个节点内的所有服务器应该拥有相同的数据。我们倾向于把主主复制架构作为两台服务器的主动被动节点。

安功能拆分
按功能拆分,或者说按业务拆分,意味着不同的节点执行不同的任务。将独立的服务节节点分配给不同的应用,这样每个节点只包含特定应用的数据,即按库划分。

另一个可能的按功能划分方法是对单个服务器的数据进行划分,确保划分的表集合之间不会执行关联操作,即按表划分。

但是功能划分不能无限地进行扩展,因为如果一个功能区哉被捆绑到单个MySQL节点,就只能进行垂直扩展。如果进行了太多的功能划分,以后就很难采用更具扩展性的设计了。

数据分片
在目前用于扩展大型MySQL应用的方案中,数据分片是最通用且最成功的方法。它把数据分割成一小片,或者说一块&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值