全网最全性能测试总结,分析性能测试问题+性能调优方案...

news2024/11/18 20:31:46

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

性能分析和优化一直是技术领域热门的一个话题,无论是三高(高性能、高可用、高稳定),还是CAP(数据一致性、服务可用性、分区容错性),都强调了服务的性能和可用。

那么在工作中,该如何去测试并进行性能优化呢?

常见的性能问题与原因

网络带宽:
网络对性能的影响不言而喻。如果带宽不足,单位时间内的请求过多,就会导致数据包的传输延迟较大。

如果网络不稳定,也会导致RT的曲线抖动较为剧烈,产生毛刺甚至丢包,这个时候P90/P99的数值也可能变大。因此稳定和足够的网络带宽,对系统的性能来说是很重要的。

负载均衡:
现在的SLB层已经优化的足够好,但如果负载均衡出现问题,可能会导致流量分发不均匀,导致部分应用节点流量异常,健康检查不通过从而被踢下线。

甚至服务注册重试失败或者弹性扩容不够及时,还会导致可用的节点承受了较多的请求最终导致雪崩效应。

安全策略:
现在的软件系统,常见的安全防护策略有ddos高防以及WAF,一般都是部署在SLB和流量网关之间或者更上层。

安全防护策略常见的场景有异常检测、输入验证、安全补丁、状态管理以及基于规则和异常的保护功能。

这些安全策略能够有效的保护系统不受到一些恶意的攻击和侵入,但这些策略生效也是需要耗费时间的。

流量网关:
上面提到的几个部分都可以看做是互联网时代的基础通用层,而网关是伴随着微服务和容器化出现的,作为用户流量的系统入口,网关也承担了较多的功能。

比如:日志、身份鉴权、灰度发布、限流熔断、可观测性metrics、应用限流apm tracing

上述的功能,无论是身份鉴权还是可观测性的metrics的实现,都需要耗费一定时间。特别是对于请求的RT比较敏感的业务,对流量网关功能的耗时要求更为严格。

Web应用层:
这几年前后端分离的系统设计越来越多,web层更多的负责页面的渲染展示和部分讨好用户的交互设计。

如何让用户更快的感知到他所感兴趣的东西,这个时候CDN和缓存就派上用场了。

利用CDN和缓存的特性“就近加载”,让用户感知到的性能更快,也是性能优化领域很重要的一点。

APP应用层:
前面讲了web层负责页面渲染展示和友好的交互,那App应用层(即我们常说的后端服务)则更多的负责逻辑计算。逻辑计算是很吃资源的,当然和它的一些参数配置以及技术架构也有较大关联。

常见的影响后端服务性能的因素如下:
硬件资源:如CPU/Memory;
参数配置:如Activethreads/TimeOut;
缓存配置:缓存中的大Key及缓存命中率;
并行计算:请求下游依赖是串行还是并行?
代码逻辑:最经典的例子——for循环无线套娃;
日志处理:特别是异常日志的处理以及生产日志级别;
处理机制:同步还是异步?如果是异步,MQ容量及消费能力如何?

数据存储层:
数据存储层我们通常理解为数据库。数据库层面影响性能的因素应该是最常见也是最多的。

比如:
锁:不合理的锁使用导致的请求等待;
索引:未加索引或索引未生效导致慢SQL;
数据量:表数据量过大导致的读写变慢等问题;
针对业务扩张以及数据量变大的问题,常见的优化策略有分表、数据库垂直拆分、读写分离等;

压测不是发现问题的唯一手段

回到性能定位分析和优化的话题上,关于性能优化,如下三点是必须铭记的。

1、性能优化的目标
在保持和降低系统99%RT的前提下,不断提高系统吞吐量,提高流量高峰时期的服务可用性。

2、性能优化的挑战
日益增长的用户量(带来访问量的提升,大数据量的存储和处理);
越来越多样的业务(业务的不断迭代和发展,会使其复杂性指数提升);
越来越复杂的系统(为了支撑业务迭代发展,系统架构会变得很复杂);

3、性能优化的路径
降低响应时间;
提高系统吞吐量;
提高服务可用性;

PS:三者关系在某些场景下互相矛盾冲突,不可兼得!

基于上述关于性能优化的几点内容,结合我个人的实践经验和看法,性能定位和分析可以分为:
熟悉业务逻辑,了解系统架构;
掌握技术原理,熟知问题定位和分析优化的软件工程方法论;
不断实践踩坑,总结归纳性能验证、定位分析的方法和经验;
熟练使用性能测试、监控追踪、问题分析和优化的各种工具并擅加利用;

性能优化运行的更快更稳定

分层优化:
请求的处理过程要经过多个链路环节,除了优化耗时最长难度和成本较低的环节之外,在每个环节都进行一定优化,则对整体性能的提升有很大帮助。下面是流量高峰时的一些优化或者说应对案例:

数据库:
扩容:DB是有状态服务,计算层便于扩容,将DB节点放到容器中,有需要扩容;
灾备:对于大流量读场景可通过流量切换方式,将部分流量迁移到备份集群分流;
巡检:慢SQL是常见的问题,可通过自动监控和历史数据分析,提供辅助式决策;

应用层(计算层):
限流:控制访问应用的流量在系统承载范围内
在业务请求入口(网关)限流,避免内部互相调用放大流量;
限流是个演进状态,从连接池、IP、指定SQL到更细的层级粒度做限流;
每个调用层都做限流,每个应用先保证自己可用,对其他依赖调用要做到“零信任”;

降级:强依赖通过熔断做紧急处理,弱依赖提前主动降级
主动降级:提前进行风险识别,然后针对性的降级,可降低已知的风险;
紧急降级:假设出现重大的问题,才需要决策是否启用的方案(风险较大);
预案平台:预案平台的目的是留痕,方便后续把限流降级等配置恢复回来;

熔断:熔断下游强依赖的服务
双十一零点的前半小时, 做一个动态推送,把日志关掉;
真正流量来的时候,留一台机器来观察错误和异常的日志;

隔离:核心和非核心业务做隔离

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

每一次的努力都不会白费,终究会有回报。只要不放弃,坚持到底,你就能看到自己所期待的美好未来。因为奋斗是人生最珍贵的经历,它能让你变得更加坚强、勇敢和有智慧。只有不停地前行,才能走出属于自己的辉煌人生!

每一次的挫折和失败,都是你成长的机会。不要轻易放弃,坚持下去,你会发现自己变得越来越强大,最终实现自己的梦想。

只要你有梦想,就有无限的可能性。不要害怕失败,因为失败不是终点,而是成功的起点。勇往直前,不断尝试,你会发现自己比想象中更强大。坚持不懈,相信自己,你必将创造属于自己的辉煌人生!

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

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

相关文章

【录用案例】2区毕业快刊仅34天录用,新增8篇录用、9篇见刊、13篇检索

2023年5月13日-2023年5月19日,经核实,由我处Unionpub学术推荐的8篇论文已被期刊部录用、9篇见刊、13篇检索: 2区系统类SSCI 【期刊简介】IF:2.5-3.0,JCR2区,中科院4区 【检索情况】SSCI 在检,正刊 【征稿…

本地项目上传到Git(Gitee)仓库

一、步骤解答(详细图解步骤见第二大点) 1、打开我们的项目所在文件夹,我们发现是不存在.git文件 2、在你的项目文件夹外层【鼠标右击】弹出菜单,在【鼠标右击】弹出的菜单中,点击【Git Bash Here】,弹出运…

循环队列+OJ题之设计循环队列

生命不是要等待风暴过去,而是要学会在风暴中跳舞。 ——卡莉尔吉布朗目录 🌺前言: 🍁一.循环队列是什么? 🍏二.循环队列有什么作用? 🍀三.OJ题之设计循环队列 1…

实战演练 | Navicat 数据生成功能

数据生成的目的是依据某个数据模型,从原始数据通过计算得到目标系统所需要的符合该模型的数据。数据生成与数据模型是分不开的,数据生成的结果应该符合某个数据模型对于数据的具体要求。所以,随着数据模型的发展,数据生成的方法相…

window 利用Qt-windeployqt打包exe程序 一个简单的实例

用一个简单的实例展示下window 如何使用QT-windeployqt打包exe程序使得其可以在别的电脑上运行 一、release模式获得exe可执行文件 新建一个QT项目 构建选择使用CMake base class选择QMainWindow Kit Selection一定要注意,我选的是MinGW 32-bit UI设计 mainwindow.…

手机充电宝电子充气泵方案

该充气泵产品方案的运行原理是通过电动机将电能转化为机械能,带动电机做往复运动,从而产生大量压缩空气,达到快速充气的效果。该充气泵可用于气垫床、汽车轮胎、自行车轮胎、足球、游泳圈等各类充气物品。产品设计以人性化为主,简…

VMware重新安装后没有VMnet1和VMnet8网络

问题: VMware重新安装后,没有自动生成VMnet1和VMnet8网络, 并且使用VMware自带的虚拟网络编辑器也无法生成。 导致主机无法ping通虚拟机。 如下图:点击该选项,然后应用,转一会圈也没有产生对应的网络适配器。 问题原…

物联网技术助力物流智能化:从货物追踪到配送优化

目录 前言 物流领域的IoT设备 物流领域的应用 二、仓库管理 三、物流配送 IoT组合应用 区块链在物流领域应用 展望 前言 随着全球贸易和物流业的快速发展,物流领域的智能化和自动化已成为不可避免的趋势。而物联网技术作为一种重要的数字技术,已经在物流…

VIsual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本

前言 本篇在讲什么 在Visual Studio中引入lua的解释器 使用C调用Lua文件 本篇适合什么 适合初学Lua的小白 适合需要C/C和lua结合开发的人 本篇需要什么 对Lua语法有简单认知 对C/C语法有简单认知 依赖Lua5.1的环境 依赖VS 2017编辑器 本篇的特色 具有全流程的图文…

Shellcode分离加载实现免杀的两种方式(VT免杀率:1/68)

简介 本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载,以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程,并提供了相关的C代码。 为了避免被杀毒软件检测,利用动态API调…

自动化测试-DevOps如何实施?看看10年测试大佬的总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Selenium4自动化测…

2023最新!软件测试高频面试题基础知识点分享

近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备了一整套软件测试复习面试的刷题以及答案,我知道很多同学不知道怎么复习,不知道学习过程中哪些才是重点,其实,你们经历过的事…

内网渗透(八十二)之 CVE-2019-1040 NTLM MIC 绕过漏洞

CVE-2019-1040 NTLM MIC 绕过漏洞 漏洞背景 2019年6月11日,微软发布6月份安全补丁更新。在该安全补丁更新中,对 CVE-2019-1040 漏洞进行了修复。该漏洞存在于Windwos 大部分版本中,当中间人攻击者能够成功绕过NTLM 消息完整性校验(MIC)时,Windows 存在可能可篡改的漏洞…

R语言实践——rWCVP生成可发表级别的物种发现记录矩阵

rWCVP生成可发表级别的物种发现记录矩阵 介绍1. 查询一组示例数据2. 生成和格式化出现矩阵3. 额外地对国家进行处理 介绍 世界维管植物名录(WCVP)提供了已知的>340,000种维管植物物种的分布数据。该分布数据可用于构建植物物种名录的发现…

解密报错-java.security.InvalidKeyException: Illegal key size(本机解密正常,服务器解密报错)

记录在对接微信接口时需要的问题,对微信消息进行解密时报错,在本地进行解密是正常的,但部署到服务器进行解密就会报错 报错信息 java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:…

windows 系统扩容C盘注意事项

windows系统大家都不陌生,是大家用的最多的操作系统。在实际的使用中,遇到需要扩容C盘的情况不是很多,但是如果遇到了,有以下几个事项需要大家注意: 剩余空间是否充足 不论当前服务器是物理服务器还是虚拟机&#xff…

Slack工作区SolidUI 集成Claude使用流程,替代GPT3.5

背景 Claude 由 OpenAI 副总裁离职创立的和chatGPT对位的AI机器人,号称是chatGPT一生的对手! 比之前的一些模型如GPT-3 要强大得多,因此Claude 被认为是ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研究的初创公司Anth…

谷歌Bard_VS_Baize-7B_VS_文心一言体验对比

2023年4月4日,来自加州大学圣迭戈分校、中山大学和微软亚研的研究者提出了Baize,该模型是让ChatGPT 自我对话,批量生成高质量多轮对话数据集,利用该数据集对LLaMA进行微调得到的(目前版本还没有RLHF) 关于B…

使用Dockerfile搭建rtthread 瑞萨开发环境

文章目录 1. 装docker2. 拉代码3. 构建镜像4. 启动容器5. vscode打开并编译6. 程序下载 整体分为6步 安装docker拉取rtthread_瑞萨仓库代码使用仓库中的dockerfile构建一个镜像使用构建好的镜像启动一个容器使用vscode打开并编译代码下载程序 1. 装docker Docker的安装方式可…

vue自动更新版本号

在项目中创建buildTime.js //npm run build打包前执行此段代码 let fs require(fs); //返回package的json数据 function getPackageJson() { let data fs.readFileSync(./package.json);//fs读取文件 return JSON.parse(data);//转换为json对象 } let packageData getPackag…