读高性能MySQL(第4版)笔记18_扩展MySQL

news2025/2/26 22:29:23

1. 增长

1.1. 在高速的业务环境中,流量可能逐年增长几个数量级,环境会变得更加复杂,随之而来的数据需求也会快速增加

1.2. 扩展Web服务器

1.2.1. 在负载均衡的后端添加更多的服务器节点,而这通常就是扩展We b服务器的全部工作

2. 可扩展性

2.1. 系统支撑不断增长的流量的能力

2.1.1. 可扩展性就是能够通过增加资源来提升容量的能力

2.2. 一个系统扩展能力的好坏可以用成本和简单性来衡量

2.3. 容量是一个和可扩展性相关的概念

2.3.1. 系统容量表示在一定时间内能够完成的工作量

2.3.2. 容量可以简单地被认为是处理负载的能力,从几个不同的角度来考虑负载很有帮助

2.4. 系统的最大吞吐量并不等同于容量

2.4.1. 如果达到最大吞吐量,则性能会下降,响应时间会变得不可接受且非常不稳定

2.5. 即使系统性能不是很高也可以具备可扩展性

2.6. 数据量

2.6.1. 应用所能累积的大量数据是可扩展性最普遍的一个挑战

2.6.2. 应用从不删除任何数据

2.7. 用户数

2.7.1. 当查询依赖于用户间的关系时(关系的数量可以用N*(N-1)/2来计算,这里N表示用户数

2.8. 用户活跃度

2.8.1. 不是所有的用户的活跃度都相同,并且用户活跃度也不总是不变的

2.9. 相关数据集的大小

2.9.1. 社交网站经常会面临由那些人气很旺的用户组或朋友很多的用户所带来的挑战

2.10. 可扩展性的原则之一是避免节点之间的交叉访问

2.11. 请专注于确定业务是读限制的还是写限制的

3. 扩展MySQL的理论思想

3.1. 优先使用更小的实例

3.1.1. 按功能、水平方式或两者兼而有之来分割数据

3.1.2. 当故障发生时,实例越小,所造成的影响面也越小

3.2. 通过复制和自动写故障切换来增强弹性

3.2.1. 在发生故障时,自动进行写入故障切换,并管理拓扑更改和对数据库节点的应用程序访问,以使写停机时间尽可能短

3.3. 通过半同步复制保证持久性

3.3.1. 相对于默认的异步复制

4. 读限制与写限制工作负载

4.1. 工作负载

4.1.1. 系统能达到的QPS数

4.1.2. 是所有类型的查询及其延迟的混合

4.2. 读限制工作负载

4.2.1. 读限制工作负载是指读取(SELECT)总流量超过服务器容量的工作负载

4.2.2. 单源主机

4.2.2.1. 增加更多应用节点可以扩展服务用户请求的客户端数
4.2.2.2. 最终会被单源数据库主机的能力所限制,该数据库主机将要负责响应所有的读取请求
4.2.2.3. 高CPU使用率意味着服务器正花费所有的时间处理查询
4.2.2.4. CPU的使用率越高,查询的延迟也会越长

4.2.3. 引入副本来扩展读流量

4.3. 写限制工作负载

4.3.1. 写限制工作负载则超过了服务器提供DML(INSERT、UPDATE、DELETE)操作的容量

4.3.2. 当写入量成为瓶颈时,必须开始考虑使用拆分数据的方法,以便在单独的子数据集上接受并行的写入

4.3.3. 仔细检查schema,确定是否存在读需求增长比其他写需求增长更快的表数据子集

5. 功能拆分

5.1. 基于业务中的“功能”来拆分数据是一项和业务背景强相关的任务,需要深入了解数据的用途

5.2. 指导原则

5.2.1. 不要根据工程团队的组织架构进行拆分,它会经常变动

5.2.2. 根据业务功能来拆分表

5.2.3. 不要回避处理数据中混杂了不同业务关系的问题,你不仅需要倡导数据分离,还需要倡导应用程序重构,并需要引入API来实现相互跨界的访问

6. 用读池扩展读

6.1. 集群中的副本可用于多个目的

6.1.1. 副本是故障切换的候选对象

6.2. 并非所有的复制副本都在池中,这是一种防止不同的读取工作负载相互影响的常见方法

6.3. 使用读池时会有不止一台服务读请求的数据库主机

6.4. 管理这些读池的一种非常常见的方法是使用负载均衡器来提供虚拟IP

6.4.1. 该IP充当所有要访问读副本的流量的中介

6.4.2. 技术包括HAProxy、自用主机时的硬件负载均衡器,或在公共云环境中运行时的网络负载均衡器

6.5. 在MySQL中,建议使用leastconn实现池节点之间的平衡

6.6. 服务发现是一个很好的选择,它可以自动发现新的主机并将其加入池列表

6.7. 每个副本池至少还要有三个节点服务于特定应用

6.8. 读池健康检查

6.9. 选择负载均衡器算法

6.9.1. 随机

6.9.1.1. 负载均衡器将每个请求定向到从可用服务器池中随机选择的服务器

6.9.2. 轮询

6.9.2.1. 负载均衡器以重复的顺序向服务器发送请求

6.9.3. 最少连接

6.9.3.1. 下一个连接指向拥有最少活跃连接的服务器

6.9.4. 最快响应

6.9.4.1. 处理请求最快的服务器接收下一个连接

6.9.5. 哈希

6.9.5.1. 负载均衡器对连接的源IP地址进行哈希处理,这会将地址映射到池中的一台服务器

6.9.6. 权重

6.9.6.1. 负载均衡器可以组合几种算法并添加权重

6.9.7. MySQL的最佳算法取决于具体工作负载

6.9.7.1. 一定要考虑在特殊情况下和日常情况下会发生什么

7. 排队机制

7.1. 使用设计上倾向于一致性而不是可用性的数据存储来扩展写事务时,扩展应用程序层会变得复杂得多

8. 使用分片扩展写

8.1. 分片意味着将数据切分成不同的、更小的数据库集群

8.1.1. 可以同时在更多的源主机上执行更多的写入操作

8.2. 功能分割(Functional partitioning)

8.2.1. 职责划分

8.2.2. 将不同的节点用于不同的任务

8.3. 数据分片(Data sharding)

8.3.1. 当今扩展超大型MySQL应用程序最常见和最成功的方法

8.4. 只对需要分片的数据进行切分

8.4.1. 通常是数据集中增长非常大的部分

8.5. 切分方案

8.5.1. 目标是使最重要和最频繁的查询接触到尽可能少的分片

8.6. 多个分片键

8.6.1. 复杂的数据模型使数据分片更加困难

8.7. 跨分片查询

8.7.1. 主动缓存通常也是有必要的

8.7.2. 设计间歇性运行的清理程序

8.8. Vitess

8.8.1. Vitess是面向MySQL的一个数据库集群系统

8.8.2. 一个用于运行数据库层的稳定平台,而不是一个临时的解决方案

8.8.3. 测试并记录向整个系统引入的延迟

8.8.4. 使用金丝雀部署模型

8.8.5. 特性

8.8.5.1. 支持水平分片,包括数据分片
8.8.5.2. 拓扑结构管理
8.8.5.3. 源节点故障切换管理
8.8.5.4. schema变更管理
8.8.5.5. 连接池
8.8.5.6. 查询重写

8.8.6. 组件

8.8.6.1. Vitess pod
8.8.6.1.1. 对一组数据库和Vitess相关部件的通用封装
8.8.6.2. VTGate
8.8.6.2.1. 为应用程序与操作员控制数据库实例访问提供的服务
8.8.6.3. VTTablet
8.8.6.3.1. 在Vitess管理的每个数据库实例上运行的代理
8.8.6.4. Topology
8.8.6.4.1. 在给定的pod中保存由Vitess管理的数据库实例清单以及相应的信息
8.8.6.4.2. 元数据存储
8.8.6.5. vtctl
8.8.6.5.1. 对Vitess pod进行操作更改的命令行工具
8.8.6.6. vtctld
8.8.6.6.1. 用来进行相同管理操作的图形化界面

8.9. ProxySQL

8.9.1. René Cannaò

8.9.1.1. MySQL的长期贡献者

8.9.2. 专门为MySQL协议编写的,通过通用公共许可证(GPL)发布

8.9.3. 提供了一个易于部署的抽象,比HAProxy更复杂,但在基础设施和复杂性方面的前期投入较少

8.9.4. 可以使用ProxySQL作为任何应用程序代码和MySQL实例的中间层

8.9.5. 一个很好的轻量级中间层,而且是分片感知的,还可以相应地路由应用程序连接

8.9.6. 按用户分片

8.9.7. 按schema分片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【银河麒麟系统】备份还原工具显示“备份分区空间不足,请删除过期或者不需要的备份”解决方法

一.问题的现象 在进行银行麒麟V10的系统备份时,会因为所需备份的系统过大导致备份分区容量不足导致备份失败的情况: 二.解决方法 该问题的处理思路与之前写过的一篇文章:【linux】把home目录挂载到其他分区(数据盘/data等&#xf…

Day8力扣打卡

打卡记录 查找和替换模式&#xff08;哈希表 / find函数查询重复程度&#xff09; 链接 1.hash表双映射检测是否存在相同映射。 2.利用string的find函数返回下标来检测对应字符串的重复程度(妙)。 class Solution { public:vector<string> findAndReplacePattern(vect…

Web APIs——事件监听以及案例

1、事件监听 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情 比如用户在网页上单击一个按钮 什么是事件监听&#xff1f; 就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应&#xff0c;也称为绑定事…

基于斑点鬣狗算法的无人机航迹规划-附代码

基于斑点鬣狗算法的无人机航迹规划 文章目录 基于斑点鬣狗算法的无人机航迹规划1.斑点鬣狗搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用斑点鬣狗算法来优化无人机航迹规划。 …

LiveGBS流媒体平台GB/T28181常见问题-海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析

LiveGBS常见问题海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析&#xff1f; 1、硬件NVR配置接入示例2、通道数为0处置2.1、判断信令是否畅通2.1.1、点击更新通道2.1.2、有成功提示2.1.2.1、确认设备的视频通道编码是否填写2.1.2.2、确认是否超过授权数目…

【ArcGIS模型构建器】03:多个shp批量按属性分割(多个县区批量提取乡镇)

文章目录 一、数据预览二、模型构建三、保存模型一、数据预览 加载实验数据: 本试验实现将两个县区的数据分割为乡镇数据。 二、模型构建 1. 添加数据文件夹 将县区数据所在的根目录文件夹拖进模型。 2. 添加要素类迭代器 插入→迭代器→要素类。 用连接工具,将数据文件…

【计算机网络笔记】网络应用的体系结构

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

【C++入门篇】保姆级教程篇【上】

目录 一、第一个C程序 二、C命名空间 1&#xff09;什么是命名空间&#xff1f; 2&#xff09;命名空间的使用 3&#xff09; std库与namespace展开 4&#xff09;命名空间的嵌套使用 三、输入输出方式 四、缺省参数 1&#xff09;什么是缺省参数&#xff1f; 2&#xff0…

html web前端 登录,短信验证码登录

html web前端 登录&#xff0c;短信验证码登录 1&#xff0c;手机号码格式校验 2&#xff0c;按钮点击60秒倒计时&#xff0c;按钮限制点击 3&#xff0c;验证码/或密码长度校验&#xff08;被注释&#xff0c;公司发的验证码长度不一致&#xff0c;不一定是6位&#xff09; 4…

LabVIEW应用开发——控件的使用(三)

接上文&#xff0c;这篇介绍簇Cluster控件。 LabVIEW应用开发——控件的使用&#xff08;二&#xff09; 1、簇Cluster 1&#xff09;创建 蔟控件又称为组合、集群控件&#xff0c;顾名思义它是一个类似于C语言的结构体的一个数据结构控件。在描述一个对象的时候&#xff0c;…

SAP POorPI RFC接口字段调整后需要的操作-针对SP24及以后的PO系统

文章目录 问题描述解决办法 问题描述 在SAP系统的RFC接口结构中添加了字段&#xff0c;RFC也重新引用到了PO系统&#xff0c;Cache和CommunicationChannel都刷新或启停了&#xff0c;但是新增的字段在调用接口的时候数据进不到SAP系统&#xff0c;SAP系统内的值也出不来。经过…

图像处理之《基于多MSB预测和Huffman编码的加密图像可逆数据隐藏》论文精读

一、文章摘要 随着云存储和隐私保护的发展&#xff0c;可逆数据隐藏在加密图像中(RDHEI)作为一种技术越来越受到人们的关注&#xff0c;它可以&#xff1a;在图像加密领域嵌入额外的数据&#xff0c;确保嵌入的数据可以无差错地提取&#xff0c;原始图像可以无损地恢复。本文提…

安卓 实现60s倒计时的CountDownTimer(小坑)

安卓 实现60s倒计时的CountDownTimer&#xff08;小坑&#xff09; 前言一、CountDownTimer 是什么&#xff1f;二、代码示例1.使用2.小坑的点误差及时取消 总结 前言 前段时间写倒计时没有用线程&#xff0c;想换一种实现方式结果踩了个小坑&#xff0c;特此记录。 一、Count…

no main manifest attribute, in xxx.jar

使用Docker运行一个SpringBoot应用时&#xff0c;出现如下图所示的错误信息 解决方案&#xff1a; SpringBoot应用的pom.xml文件中添加以下配置;重新打包即可 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifac…

计算机网络——理论知识总结(上)

开新番&#xff0c;因为博主备考的学校计网只考察1/6的分值&#xff0c;而且定位偏向于送分题&#xff0c;因此在备考时并没有很高强度的复习。本帖基于王道考研的教辅总结归纳&#xff0c;虽然是408的教材&#xff0c;但忽略其中有难度的部分&#xff0c;如计算题、画图题等&a…

18.Raising and Lower Indexs

提高和降低张量索引 同样&#xff0c;使用的是非标准的符号。 我们对V和熟悉&#xff0c;一个是向量所在的空间&#xff0c;一个是协向量所在的 对偶空间 &#xff0c; 有一个问题&#xff1a; 有何办法能在V的向量与 的协向量之间 建立对应的关系&#xff1f; 换句话说&…

Git中 fork, clone,branch有什么区别?

一、是什么 fork fork&#xff0c;英语翻译过来就是叉子&#xff0c;动词形式则是分叉&#xff0c;如下图&#xff0c;从左到右&#xff0c;一条直线变成多条直线 转到git仓库中&#xff0c;fork则可以代表分叉、克隆 出一个&#xff08;仓库的&#xff09;新拷贝 包含了原来…

如何安装ubuntu22.04以及ubuntu各个版本配置国内源和ssh远程登录

目录 一.简介 二.配置root账号 三、配置IP地址 四、更换阿里云源 五、配置ssh&#xff0c;root可以远程登录安装ssh服务 VMware17.0安装教程(2023最新最详细)-CSDN博客 VMware虚拟机安装Ubuntu22.04教程&#xff08;2023最新最详细&#xff09;-CSDN博客 Ubuntu22.04&am…

JSX 中使用 js 表达式

学习目标&#xff1a; 能够在 JSX 中使用表达式 语法&#xff1a; {JS 表达式} function App() {// 1.识别常规变量const name 跟着老惠学前端// 2.原生js方法调用const age () > {return 25}//3.三元运算符const flag truereturn (<div className"App">…

webpack前端性能优化的操作有哪些?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…