如何做好性能压测 —— 压测环境设计和搭建!

简介:一般来说,保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候,即便是压测环境和生产环境有很细微的差别,都有可能导致整个压测活动评测出来的结果不准确。
1. 性能环境要考虑的要素
1.1 系统逻辑架构
系统逻辑架构,即组成系统的组建,应用之间的结构,交互关系的抽象。最简单最基本的就是三层架构。

三层逻辑结构图
- 客户层:用户请求端。
- web层:处理客户端所有的业务请求逻辑和服务端数据。
- 数据库层:维护业务系统的数据。

更复杂的逻辑结构说明:
- 逻辑架构中的任意一层,有可能是在独立的物理集群机器上,也有可能跨多个物理机器或者跟其他逻辑层共享同一个物理集群。
- 逻辑架构间的箭头是数据流,不是物理网络连接。
1.2 物理架构
下图为物理架构图。

1.3 硬件、软件和网络
- 软件:环境中涉及到哪里基础软件、中间件。
- 硬件:实体机/虚拟机,单机配置(CPU、内存、硬盘大小),集群规模。
- 网络:内网还是外网,网络带宽,是否有跨网段问题,是否隔离。
软件中对系统使用到的中间件有一个了解,不仅可以帮助设计更仿真的压测环境,也有助于在压测过程中,加快瓶颈,问题的定位和解决。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

2. 不同性能压测环境优缺点对比
2.1 对比表格

不管哪种压测环境方案,在落地成本,满足需求程度上都有区别,接下来对几种压测环境结合在阿里的应用进行介绍。
3. 低配生产环境子集-研发阶段性能瓶颈发现
既然是低配环境,压出来的数据似乎完全不能用作生产环境运行的参考,但实际上,这种环境下的压测,也是非常重要的一环。主要体现在项目研发阶段的价值上。
3.1 价值
- 新应用上线前,应用代码本身的瓶颈发现。代码本身的性能问题,例如连接未释放,线程数过多,通过低配的环境,一定时长的压测完全可以提前发现很多。
- 应用维度基线数据。跑出来的数据不能给线上做参考,但是如果每次迭代,发布前,都在同一套低配环境运行性能压测,跟低配基线数据进行对比,也能起到衡量系统迭代的时候,性能是否有提升或者下降的参考。
- 帮助研发进行快速的性能调优。系统越复杂的时候,发生性能问题后定位的难度会指数增加。进行过性能调优的研发都有体会,有时候调优,就是改一个配置,然后重新部署,跑压测,看结果是不是改善了,直到找到最佳的配置。这个过程如果不能轻量起来,对于研发调优就是噩梦。
3.2 问题
构建低配环境,可以是普通的测试环境,跟线上完全隔离。但是要解决以下问题:
- 压测会影响测试环境的功能测试。这一点很容易理解。压力大了,可能影响同一套测试环境的功能测试结果,所以性能压测环境最好独立。
- 依赖的基础应用在性能测试中没有。例如要压测的目标业务是发贴,肯定会依赖到用户相关的业务,用户中心就是一个基础应用(当然很多小型公司可能没独立这块业务)。
- 研发阶段无法快速部署要压的分支。有一点规模的互联网公司,一周的迭代,同一个应用可能会有多个分支,需要支持快速部署指定的分支到性能环境。
3.3 方案
阿里内部有一套完整的系统用于支撑阿里内部每日成千上万的研发阶段的性能压测需求。
4. 同配生产环境子集-容量规划
4.1 挑战
- 容量规划是一个持续的过程,如何减少人力投入,如何才能“无人值守”。
- 成本和效果平衡:尽量贴近线上运行环境,同时容量规划的数据对线上容量布置有很好的指导作用。
- 完全独立不影响线上。
- 随时可运行,结果可跟踪。
4.2 问题
容量规划不是直接在生产环境进行的,因为生产环境的最终容量配比,是参考自容量规划产出的数据。在生产环境进行的压测,是最后的验收阶段,在容量规划完成之后。
提供一套独立的的生产环境子集-隔离环境,用于容量规划要解决的问题:
- 构建的环境集如何定义,规模和架构如何贴近线上。
- 流量如何走到隔离环境。
- 隔离环境写的数据是否需要清理,如何清理?
4.3 方案
阿里容量规划的技术演进,可参考文后资料了解详情[1]
现在隔离环境就是最新容量规划生态中的重要基础。隔离环境的支持,才能支撑常态化的容量规划运行,持续不断的改进。
- 首先,提炼机器比例。基于线上核心应用的现有规模情况,提炼出一个缩小版的完全模型。即线上机器之间的比可能是5000:2000:1000,整体比例缩放100倍,在隔离环境的机器比是50:20:10。使用这种方式,有效的保证了同线上机器同比例,同时成本上做了很好的控制。
- 其次,确定隔离目标流量。根据接下来线上的目标流量大小,同比例计算出隔离环境应该支撑的流量,作为隔离环境打压测流量时的目标流量。
- 然后,通过压测流量从小到目标流量探索,边压边弹。
- 最后,收集隔离环境达到目标流量后,新的机器比例及数据。应用间的比例关系很可能已经有了改变,有的应用可能缩容,有的应用可能扩容,作为线上机器关系的参考。
当然这里面的涉及的技术细节还有很多:
- 全链路压测新应用:整个压测流量其实是沿用了线上压测的全链路压测机制,带流量标,数据落影子库的方式, 所以隔离环境写的数据不需要特殊的处理。
- 环境标隔离环境:流量同时会带上一个“环境标”,通过环境标的识别,接入层会把流量导到隔离环境,从而做到流量的环境隔离。
- PTS首创"RPS"模式施压:在系统整体的流量数据获取上,我们摒弃了一直依赖备受追捧的"并发量"的方式。众所周知,业务提出来的目标一般会是,"希望峰值支持xxxx个用户登陆"这种,进行容量规划的时候需要将并发的用户数跟系统能承受的QPS,进行一个映射关系。我们容量规划就直接使用阿里云压测平台(PTS)的"RPS"模式,压出来拿到的QPS数据,直接是系统维度的数据,不用转换,这样也更减少了转换过程中的失真。
- 边压边弹技术:在隔离环境压测中,何时弹新机器,弹多少机器,整个过程如何控制,这里面包含了一整套完整精密的算法。整个过程示意图如下。

5. 生产环境复制版-云时代的优势
5.1 挑战
生产环境复制版面临的挑战非常多:
其中,如果要对生产环境进行完全的复制,将要面临以下挑战:
- 复制生产环境服务器的架构
- 复制生产环境网络基础环境
- 复制生产环境的所有应用分层
- 网络带宽
- 数据库以及所有的基础数据集
- 负载均衡
......
5.2 问题
对于传统时代的压测工程师来说,这样一系列的操作,就是新搭建一套“影子系统”了,看起来有点像不可能完成的任务。要完成上述任务,压测工程师面临巨大的挑战:
- 沟通协调几乎所有的技术部门(开发、运维、网络、IT...);
- 如果即用即销毁,那么劳民损财只用个一两次,成本太大;
- 如果持续维护,那么维护成本显然同样不可忽略;
所以我们很少看到有公司进行这样的“生产环境复制”操作。小型公司可能没那么多人力实现,大中型公司,成本就更加难以接受了。但是现在云化趋势的潮流中,这种方案开始体现出优其越性了。
5.3 方案
我们先看一下阿里云的产品架构图。

产品服务非常丰富,但是不太利于我们理解和复制线上环境用于压测这个主题。具体到某一个场景的系统在阿里云的落地:

网友的云产品架构总结,可参考文后资料了解详情[2]
搭建一个云上应用的最小集应该需要用到:
- SLB-用来负载均衡;
- ECS-用来部署业务应用;
- RDS-用来存储业务数据;
如果要在阿里云上复制以上线上系统。
step1 购买跟线上集群同规模同配置的ECS,部署应用;
step2 复制线上RDS;
step3 SLB配置新入口,指向复制环境;
step4 开始线上压测;
在阿里云进行生产环境复制有以下优势:
- 操作便捷。可视化界面,系统所需要的组建配置安装即可。插播一下,阿里云上的压测服务PTS将来有机会提供一键搭建和销毁性能环境的功能,彻底解放压测工程师。
- 架构信息清晰。阿里云上有“架构感知”的功能,可以直观绘制除业务系统在阿里云上的整体架构,准确直观,压测工程师不用再花很长的时间梳理系统的架构,还面临可能不准确的问题;
- 即用即毁,大大节约成本。复制一套线上环境,如果是足够复杂的系统,使用的组建多,流量大,成本问题肯定要考虑。传统时代搭建的成本本身就高,继续维护和再搭建的成本同样也高。但是云时代,就是点几个按钮搭建,点几个按钮销毁的过程,按使用量付费,验证完就释放,对于资源成本的浪费可控性很好。
- 机器配比根据情况可自由调控:在阿里云上显然也可以快捷进行低配、同配生产环境子集复制,相对于非云化的系统同样有明显的优势。
6. 生产环境-老生常谈
阿里的全链路压测技术已经是很成熟,并且得到很广泛的推广的线上压测技术。互联网大大小小的公司均有落地,在此只概括为一个模型图,想知道更多细节内容的,读者可以网上收集以下,有大量的文章详细阐述了各自落地实施的过程。
以下是阿里经典的全链路压测模型图。

经过多年的发展,由全链路压测系统演进出可对阿里以外的企业提供跨行业的通用的性能压测服务的系统PTS。目前PTS也提供流量隔离解决方案给外部企业使用。

7. 总结
- 仿真的性能压测环境,是执行有效性能压测的前提。
- 不同的压测环境都有不同的应用场景,企业应根据自身情况进行选择。
- 规模中小的公司独立搭建一套隔离的压测环境成本高昂,可维护性差。
- 云时代的性能压测,阿里云上的PTS给高效压测带来更大的可能性。
END今天的分享就到此结束了,点赞关注不迷路!
相关文章:
如何做好性能压测 —— 压测环境设计和搭建!
简介:一般来说,保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候,即便是压测环境和生产环境有很细微的差别,都有可能导致整个压测活动评测出来的结果不准确。 1. 性能环境要考虑的要素 1.1 系…...
手机弱网测试工具:Charles
我们在测试app的时候,需要测试弱网情况下的一些场景,那么使用Charles如何设置弱网呢,请看以下步骤: 前提条件: 手机和电脑要在同一局域网内 Charles连接手机抓包 一、打开Charles,点击代理,…...
Axios七大特性
Axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js环境中发起HTTP请求。它有许多强大的特性,下面将介绍Axios的七大特性。 1. 支持浏览器和Node.js Axios既可以在浏览器中使用,也可以在Node.js环境中使用,提供了统一的AP…...
【机器学习基础】K-Means聚类算法
🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…...
Vite - 配置 - 自动修改 index.html 中的title
需求描述 在Vue3项目的开发过程中,我们为了能区分正式环境和测试环境, 通常会进行环境配置文件的区分, 例如,开发环境一个配置文件、生产环境一个配置文件。因此,我们就希望 在项目的index.html 的 title 标签中&…...
基于安卓android微信小程序美容理发店预约系统app
项目介绍 为美容院设计一个系统以减少员工的工作量就成为了想法的初始状态。紧接着对美容院进行进一步的调查发现我的想法已然落后。基本上每个美容院都以有了自己的信息系统,并且做的已经较完善了。 在这时我突然想到,现在关注美容养生的人越来越多&am…...
*** stack smashing detected ***: terminated
有一个函数返回值是bool类型,但忘了return了,编译可以通过,但是运行的时候报这个错误。...
鸿蒙系统扫盲(二):再谈鸿蒙是不是安卓套壳?
最近小米发布了澎湃OS,vivo发布了蓝OS,好像自从华为回归后,大伙都开始写自己的OS了,小米官方承认是套壳安卓,然后被大家喷了,于是鸿蒙是不是安卓套壳的话题又回到了大众的视野,今天在讨论下这个…...
PG数据中DBeaver上传csv文件作为数据表
DBeaver 是一个开源的数据库工具,还是蛮好用的,有时候需要我们上传数据做表,数据为CSV格式的,DBeaver本身自带有功能实现的。 可打开连着的数据库,找到模式,点到下面的表里,选择一个表直接导入…...
第十七篇-Awesome ChatGPT Prompts-备份-百度翻译
Awesome ChatGPT Prompts——一个致力于提供挖掘ChatGPT能力的Prompt收集网站 https://prompts.chat/ 第十六篇-Awesome ChatGPT Prompts-备份【英文】 第十七篇-Awesome ChatGPT Prompts-备份-百度翻译 【中文】 高效提示词请参考,各种场景,2023-11-16内容如下(百…...
[Android] Amazon 的 android 音视频开发文档
https://developer.amazon.com/zh/docs/fire-tv/audio-video-synchronization.html#22-getplaybackheadposition-api-level-3https://developer.amazon.com/zh/docs/fire-tv/audio-video-synchronization.html#22-getplaybackheadposition-api-level-3...
UE4基础篇十六:自定义 EQS 生成器
UE4 中的 EQS 带有一组很好的查询项生成器,但在某些情况下,您可能更喜欢根据需要创建生成器。我决定编写自己的生成器,因为我必须编写一个查询来找到查询器周围的最佳位置,但又不能太靠近它。我知道我可以添加一个距离测试来随着距离增加分数,但我什至不想考虑距查询器一定…...
轿车5+1汽车变速器变速箱同步器操纵机构机械结构设计CAD汽车工程
wx供重浩:创享日记 对话框发送:汽车变速器 获取完整论文报告说明书工程源文件 变速器工程图 操纵机构3D图 一、机械式变速器的概述及其方案的确定 1.1 变速器的功用和要求 变速器的功用是根据汽车在不同的行驶条件下提出的要求,改变发动机…...
STM32F4移植SPI注意事项
一、注意事项 可以看我之前移植的文章,那些就不提了,记得要复用,把IO复用成对应的功能io,然后还要注意时钟,看你需要的功能,去调对应的时钟,把时钟调匹配了,基本上不会有问题。 比如…...
CV计算机视觉每日开源代码Paper with code速览-2023.11.16
点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】ConvNet vs Transformer, Supervised vs CLIP: Beyond ImageNet Accuracy 论文地址:https://arxiv.org//pdf/23…...
Git 简介及使用(1)
目录 一、在 Linux 环境中安装 Git 1. 先检查当前服务器中是否有 Git(如果有显示如下图) 2. 安装Git 3. 然后重复第一步:查看 Git 的版本信息即可 二、Git 的初始化及配置 1. 创建目录 2. 对仓库进行初始化 3. 新增两个配置项(…...
HTTPS流量抓包分析中出现无法加载key
HTTPS流量抓包分析(TLSv1.2),这篇文章分析的比较透彻,就不班门弄斧了 https://zhuanlan.zhihu.com/p/635420027 写个小问题:RSA密钥对话框加载rsa key文件的时候注意不要在中文目录下,否则会提示:“Enter the passwor…...
学习Rust适合写什么练手项目?【云驻共创】
Rust是一门备受关注的系统级编程语言,因其出色的内存安全性、高性能和并发性能而备受赞誉。对于那些希望学习和掌握Rust编程语言的人来说,练手项目是一个不可或缺的环节。通过实际动手完成项目,你可以加深对Rust语言特性和最佳实践的理解&…...
Spring Cloud学习(九)【Elasticsearch 分布式搜索引擎01】
文章目录 初识 elasticsearch了解 ES倒排索引ES 的一些概念安装es、kibana安装elasticsearch部署kibana 分词器安装IK分词器ik分词器-拓展词库 索引库操作mapping 映射属性索引库的 CRUD 文档操作添加文档查看、删除文档修改文档Dynamic Mapping RestClient 操作索引库什么是Re…...
jvm 内存结构 ^_^
1. 程序计数器 2. 虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 程序计数器 定义: Program Counter Register 程序计数器(寄存器) 作用,是记住下一条jvm指令的执行地址 特点: 是线程私有的 不会存在内存溢出 虚拟机栈…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
