性能测试调优模型、思想和技术

2023-11-06

最近阅读《软件性能测试、分析与调优实践之路》一书,个人认为性能调优章节为整部书的精华,该章节包括了性能测试调优模型、调优思想和调优技术。下面是摘抄整理自书中内容:

调优模型

下图为互联网中常见的用户请求的分层转发和处理的过程,在性能调优时就是 不断采集系统中的性能指标以及系统模型中各层的资源消耗,从中发现性能瓶颈和性能问题,然后对瓶颈和问题进行分析诊断来确定性能调优方案,最后通过性能压测进行验证调优方案是否有效,如果无效继续重复这个过程进行性能分析,直到调优方案有效,瓶颈和问题得到解决。

性能测试调优模型、思想和技术

系统模型中相关的组件描述如下表所示:

组件

描述

网络分发

网络分发是高速发展的互联网时代常用的降低网络拥塞,快速响应用户请求的一种技术手段,最常用的网络分发就是CDN(Content Delivery Network,即内容分发网络),依靠部署在世界各地的边缘服务器,通过中心平台的负载均衡、源服务器内容分发、调度等功能模块,使世界各地用户就近获取所需内容,而不用每次都到中心平台的源服务器获取响应结果,比如南京的用户直接访问部署在南京的边缘服务器,而不需要访问部署在遥远的北方的北京的服务器

Web服务器

Web服务器用于部署Web服务,Web服务器的作用就是负责请求的响应和分发以及静态资源的处理

Web服务

Web服务指运行在Web服务器上的服务程序,最常见的Web服务就是Nginx和Apache

Web Cache

Web Cache指Web层的缓存,一般都是临时缓存HTML、CSS、图像等静态资源文件

应用服务器

应用服务器用于部署应用程序,如Tomcat、WildFly、普通的Java应用程序(如jar包服务),IIS等

应用程序服务

应用程序服务指运行在应用服务器上的程序,比如Java应用,C/C++应用、Python应用,一般用于处理用户的动态请求

应用缓存

应用缓存指应用程序层的缓存服务,常用的应用缓存技术有Redis、Memcached等,这些技术手段也是动态扩展的高并发分布式应用架构中经常使用的技术手段

数据库(DB)

用于数据的存储,可以包括关系型数据库以及NoSql数据库(非关系型数据库),常见的关系型数据库有Mysql、Oracle、Sqlserver、DB2等,常见的NoSql数据库有Hbase、MongoDB、ElasticSearch等

外部系统

指当前系统依赖于其他的外部系统,需要从其他的外部系统中通过二次请求获取数据,外部系统有时候可能会存在很多个

调优思想

1、分层分析

分层分析指的就是 按照系统模型以及系统架构分层、按照调用链进行监控分析和问题排查,如下图所示:

性能测试调优模型、思想和技术

  • 分层排查一般需要对系统的应用架构层次以及部署架构非常的熟悉,需要熟悉请求的处理链过程。
  • 分层排查一般需要对每一层建立checklist,然后按照每层的checklist逐一进行分析。
  • 分层排排查效率较低,但是往往能发现更多的性能问题。
  • 分层排查可以自上而下也可以自下而上。

2、科学论证

通常包括发现问题、问题假设、预测、试验论证、分析:

性能测试调优模型、思想和技术

  • 发现问题:指通过性能采集和监控,发现了性能瓶颈或者性能问题,比如并发用户数增大后TPS并不增加、每台应用服务器的CPU消耗相差特别大等。
  • 问题假设:指根据自己的经验判断,假设是某个因素导致了出现瓶颈和问题。
  • 预测:指根据问题假设,预测可能出现的一些现象或者特征。
  • 试验论证:根据预测,去检查预期可能出现的现象或者特征
  • 分析:根据获取到的实际现象或者特征进行分析,判断假设是否正确,如果不正确,就重新按照这个流程进行分析论证。

科学论证法进行性能分析与调优的示例如下图所示:

性能测试调优模型、思想和技术

3、问题追溯与归纳总结

1、问题追溯分析

问题追溯分析指的是根据问题去追溯最近系统或者环境发生的变化,通过在追溯和描述中去逐步排查可能导致问题的原因,一般适用于生产已上线系统的版本发布或者环境变动导致的性能问题。

性能测试调优模型、思想和技术

2、归纳总结 

根据经验的总结,在出现某种性能瓶颈或者性能问题时根据以往总结的原因进行逐一排查。

调优技术

1、缓存调优

性能测试调优模型、思想和技术

缓存调优的关键点:

  • 如何让缓存的命中率更高?
  • 如何注意防止缓存穿透?
  • 如何控制好缓存的失效时间?
  • 如何做好缓存的监控分析?比如slow log分析、连接数监控、内存使用监控。
  • 如何防止缓存雪崩?

其中,缓存雪崩 指的是服务器在出现断电等极端异常情况后,缓存中的数据全部丢失,导致大量的请求全部需要从数据库中直接获取数据从而数据库压力过大造成数据库崩溃,防止缓存雪崩需要注意:

  • 要处理好缓存数据全部丢失后,如何能快速把数据重新加载到缓存中。
  • 缓存数据的分布式冗余备份,当出现数据丢失时,可以迅速切换使用备份数据。

2、同步转异步推送

同步:指的是系统收到一个请求后,在该请求没有处理完成时,就一直不返回响应结果,直到处理完成了才返回响应结果。如下图所示:

性能测试调优模型、思想和技术

异步:与同步相比,异步指的是系统收到一个请求后,只立即返回请求调用方请求接收成功,在请求处理完成后,再异步推送处理结果给调用方,或者请求调用方在间隔一定时间再重新来获取请求结果。如下图所示:

性能测试调优模型、思想和技术

同步转异步主要是解决同步请求时的阻塞等待,一直处于阻塞等待的请求,往往会造成连接不能快速释放,从而导致高并发处理时,连接数不够用,通过队列异步接收请求后,请求处理方再进行分布式的并行处理,从而达到处理能力扩展,并且网络连接也可以快速释放。

3、拆分

拆分 指的是将系统中的复杂的业务调用拆分为多个简单的调用,一般遵循的原则如下:

  • 对于高并发的业务请求调用都单独拆分为单个的子系统应用。
  • 对于并发访问量接近的业务,可以按照产品业务进行拆分,相同的产品业务都归类到一个新的子系统中。

性能测试调优模型、思想和技术

系统拆分带来的好处就是高并发的业务不会对低并发业务的性能造成影响,而且系统在硬件扩展时,也可以有针对性的进行扩展,避免资源的浪费。

4、任务分解与并行计算

任务分解与并行计算指的是将一个任务拆分为多个子任务,然后将多个子任务并行进行计算处理,最后只需要再将并行计算的结果合并在一起返回即可。目的是通过并行计算的方式来增加处理性能。

性能测试调优模型、思想和技术

另外对于包含多个处理步骤的串行任务,也可以尽量按照如下图所示的方式转换为并行计算处理。

性能测试调优模型、思想和技术

5、索引与分库分表

索引 

指应用程序在查询时,尽量走数据库索引查询,数据库表在创建时也尽量对查询条件的字段建立合适的索引,这里强调一定是合适的索引,如果索引建立不合适,不仅对查询效率没有任何的帮助,反而会使数据库表在插入数据时变的更慢,因为一旦建立了索引后,数据在插入时,索引也会自动更新,这样就加大数据库的插入时的资源消耗。

分库 

一般指的是一个数据库的存储已经很大了,查询和插入时I/O消耗非常大,此时就需要将数据库拆分成2个库来减轻读写时I/O的压力。

性能测试调优模型、思想和技术

常见的分库分表方式如下:

  • 按照冷热数据分离的方式:一般将使用频率非常高的数据称之为热数据,查询频率较低或者几乎不被查询的数据称之为冷数据,冷热数据分离后,热数据单独存储,这样数据量就会下降下来了,查询的性能自然也就提升了,而且还可以更方便的单独针对热数据做I/O的性能调优了。
  • 按照时间维度的方式:比如可以按照实时数据和历史数据分库分表,也可以按照年份、月份等事件区间进行分库分表,目的是尽可能的减少库表中的数据量。
  • 按照一定的算法计算的方式:此种方式一般适用于数据都是热数据的情况,比如数据无法做冷热分离,所有的数据都经常被查询,而且数据量又非常的大。此时就可以根据数据中的某个字段做算法计算(注意的是这个字段一般是数据查询时的检索条件字段),使得数据能均匀的落到不同的分表中去,查询时再根据查询条件字段做算法计算就可以快速的定位到是需要到哪个表中去进行查询。

数据分库分表后,带来的另一个好处就是,如果单次查询时,需要查询多个分表,那么此时就可以通过多线程并行的方式去查询每个分表,最后对每个分表的查询结果做一次合并即可,这样也可以使得查询的效率更高。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能测试调优模型、思想和技术 的相关文章

  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 基于Loadrunner的性能分析及调优经验分享

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|深入了解Python中的super()函数用法

    简介 Python中的super 函数是一种强大的工具 用于在子类中调用父类的方法 它在面向对象编程中非常有用 可以让你轻松地扩展和重用现有的类 本文将详细介绍super 函数的用法 并提供一些示例来帮助你更好地理解它的功能 什么是supe
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错

随机推荐

  • pcb走线电流计算器。

    PCB走线载流计算器 EDA365电子论坛通信数码 人工智能 计算机 半导体 手机家电消费电子硬件门户网站 pcb走线电流计算器 PCB相关知识 3W 10H 55 电子工程师必备知识 3W原则的实质及详解 知乎 zhihu com 走线
  • django实现部门表的增删改查界面

    1 前期准备 部署好mysql数据库 创建好unicom数据库 下载好bootstap的插件 下载好jquery的插件 下载好mysqlclient 1 4 6 cp36 cp36m win amd64 whl的安装包 根据python的版
  • 如何在UnrealEngine虚幻引擎中加载Web页面

    对于非游戏开发团队来讲 在面向非游戏领域的UE项目中嵌入Web页面并实现交互无疑能充分利用现有开发资源和流程 WebUI插件能提供完整的Web页面加载及交互手段 让团队中的UE开发工程师和Web开发工程师能够各司其职 紧密配合 WebUI的
  • python-自动化之进度条估算问题

    在本文中 我将尝试打破有史以来最短 最简洁的文章的记录 因此 不费吹灰之力 我们开始吧 事先声明一下 这只是最简单的进度条 若想运用于代码中 很简单 原文以及视频演示效果 请点这里 tqdm tqdm 介绍 请直接看执行效果 tqdm 是适
  • FFmpeg中可执行文件ffmpeg用法汇总

    从https ffbinaries com downloads 下载最新的4 1版本的Windows 64位FFmpeg FFmpeg是一个快速的音频 视频转换工具 FFmpeg可以作为一个命令行程序单独使用 通过执行以下命令将FFmpeg
  • 彻底解决 PowerBuilder9.0打开OLE控件页崩溃的问题

    使用powerbuilder9 0时 insert coltrol gt ole时 PB崩溃了 今天又遇到这个问题了 原因不知道是安装了哪个软件引起来的 分析了原因 1 PB检索注册表 HKEY CLASSES ROOT CSLID下面的带
  • 驱动的Makefile

    一个典型的编译驱动模块的Makefile文件如下所示 KERN DIR root driver kernel obj m module test o all make C KERN DIR M pwd modules PHONY clean
  • 思考:入侵检测(一)

    2020 03 21 文章 1 没有具体的去描述某个入侵检测的模型 而是从运维的角度 阐述了一些思考 我觉得 这种思考在工业界是非常有用的 并不是那种单纯学术角度的模型 前段时间听了计算机视觉的课程 我也是仔细思考了一下 他们总是能够找出来
  • Linux常用命令(一)目录、文件(系统:CentOS7)

    Linux常用命令 一 目录 文件 系统 CentOS7 一 目录操作 1 结构 root localhost 当前用户 linux系统安装的主机地址 系统根目录 当前用户家目录 2 切换目录 cd 绝对路径 从根目录开始 如 cd opt
  • win10 Jdk 版本切换

    环境信息 系统 Win 10 jdk 7 8 11 安装方式 可执行文件安装 exe 格式 切换步骤 1 jdk 安装后 一般我们会手动添加 JAVA HOME 系统环境变量 然后将 JAVA HOME bin 添加到系统环境变量 Path
  • 【计算机网络笔记】物理层:概念&传输媒体&传输方式

    传输媒体 用来传输数据 物理层 解决在各种传输媒体上传输比特01的问题 物理层给数据链路层提供传输透明比特流的服务 使数据链路层只需要考虑如何完成本层的协议和服务 而不必考虑网络的具体的传输媒体是什么 透明 数据链路层无需知道物理层是如何传
  • 一个类成员函数访问另一个类的私有成员方法(不依靠继承与友元),仅供娱乐 :XD

    class B class A public A double a 0 int b 0 y a x b cout lt lt A is creat lt lt endl A void show cout lt lt A y is lt lt
  • 7-7 12-24小时制 (15 分) (C语言实现)

    题目 思路 直接跟着题目往下写 没有过多思考 后面答案部分正确 才重新写了12点那里的程序 11min 代码 include
  • Java连接mysql数据库和oracle连接数据库驱动对比

    oracle安装复杂 占用空间大 很多人用了oracle之后就不用了 项目需要复现 如何实现 那就使用mysql数据库 mysql数据库安装和一般软件安装毫无区别 另外公司中最常用数据库文件就是保存整个的数据库的文件 这样可以进行不断的维护
  • 【环境配置】Windows10终端和VSCode下能够直接打开Anaconda-Prompt

    很多小伙伴在 Windows 下做深度学习开发的时候 遇到终端没有在 Linux 那么方便 那么我们现在就可以来设置一下 这样我们也可以在文件夹内部右键打开终端 也可以在 VS Code 里面新建一个虚拟环境的控制台 这里主要是针对 Ana
  • 嵌入式Linux入门指南(一)——学习路线篇

    嵌入式Linux入门指南 一 学习路线篇 摘要 文章介绍在Linux入门过程中的学习路线 必看书籍分享 1 开始学习实践Linux之前先清楚如何学习很重要 虽然条条大路通罗马 殊途同归 但是不同的路线要付出的代价 时间成本 显然差别巨大 总
  • C#GDI+编程基础(一:Graphics画布类)

    GDI 存在的意义 将变成与具体硬件实现细节分开 GDI 步骤 获取画布 绘制图像 处理图像 命名空间 using System Drawing 提供对GDI 基本图形功能的访问 using System Drawing Drawing2D
  • 5. Java数据类型

    数据类型 基本类型 整数类型 byte short int long 浮点类型 float double 字符类型 char String 布尔类型 true false public class demo2 public static v
  • 第十三届蓝桥杯Python 大学B组真题详解

    第十三届蓝桥杯Python B组真题详解 试题A 排列字母 试题B 寻找整数 试题C 纸张尺寸 试题D 位数排序 试题E 蜂巢 试题F 消除游戏 试题G 全排列的价值 试题H 技能升级 试题I 最长不下降子序列 最优清零方案 本届比赛 两道
  • 性能测试调优模型、思想和技术

    最近阅读 软件性能测试 分析与调优实践之路 一书 个人认为性能调优章节为整部书的精华 该章节包括了性能测试调优模型 调优思想和调优技术 下面是摘抄整理自书中内容 调优模型 下图为互联网中常见的用户请求的分层转发和处理的过程 在性能调优时就是