如何做好性能压测(一):压测环境的设计和搭建

news2024/10/6 1:41:18

本文是阿里巴巴 PTS 团队《Performance Test Together》系列专题分享,霍格沃兹测试学院经特别授权转载,也会结合学员实际需求组织大咖公开课主题分享,文末有福利!

性能压测,是保障服务可用性和稳定性过程中,不可或缺的一环。我们将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战

一般来说,保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候,即便是压测环境和生产环境有很细微的差别,都有可能导致整个压测活动评测出来的结果不准确。

01 性能环境要考虑的要素


1. 系统逻辑架构

系统逻辑架构,即组成系统的组件、应用之间的结构、交互关系的抽象。最简单最基本的就是这三层架构。

三层逻辑结构图

  • 客户层:用户请求端。

  • Web层:处理客户端所有的业务请求逻辑和服务端数据。

  • 数据库层:维护业务系统的数据。

             

更复杂的逻辑结构

  • 逻辑架构中的任意一层,有可能是在独立的物理集群机器上,也有可能跨多个物理机器或者跟其他逻辑层共享同一个物理集群。

  • 逻辑架构间的箭头是数据流,不是物理网络连接。

2. 物理架构

物理架构图

3. 硬件、软件和网络

  • 软件:环境中涉及到哪些基础软件、中间件。

  • 硬件:实体机/虚拟机,单机配置(CPU、内存、硬盘大小),集群规模。

  • 网络:内网还是外网,网络带宽,是否有跨网段问题,是否隔离。

软件中对系统使用到的中间件有一个了解,不仅可以帮助设计更仿真的压测环境,也有助于在压测过程中,加快瓶颈、问题的定位和解决。

02 不同性能压测环境的优缺点对比


我们通过表格的形式以下 4 个压测环境方案在使用场景、优缺点、成本、阿里云及其客户的应用情况做了对比。

从表格中,我们可以看待,不管是哪种压测环境方案,在落地成本,满足需求程度上都是有所区别的,接下来,我们结合在阿里/阿里云客户的应用情况,对这 4 种压测环境进行介绍。

1、低配生产环境子集-研发阶段性能瓶颈发现

方案价值

既然是低配环境,压出来的数据似乎完全不能用作生产环境运行的参考,但实际上,这种环境下的压测,也是非常重要的一环。主要体现在项目研发阶段的价值上。

  • 新应用上线前,应用代码本身的瓶颈发现。代码本身的性能问题,例如连接未释放,线程数过多,通过低配的环境,一定时长的压测完全可以提前发现很多。

  • 应用维度基线数据。跑出来的数据不能给线上做参考,但是如果每次迭代,发布前,都在同一套低配环境运行性能压测,跟低配基线数据进行对比,也能起到衡量系统迭代的时候,性能是否有提升或者下降的参考。

  • 帮助研发进行快速的性能调优。系统越复杂的时候,发生性能问题后定位的难度会指数增加。进行过性能调优的研发都有体会,有时候调优,就是改一个配置,然后重新部署,跑压测,看结果是不是改善了,直到找到最佳的配置。这个过程如果不能轻量起来,对于研发调优就是噩梦。

存在的问题:

构建低配环境,可以是普通的测试环境,和线上完全隔离。但是要解决以下问题:

  • 压测会影响测试环境的功能测试。这一点很容易理解。压力大了,可能影响同一套测试环境的功能测试结果,所以性能压测环境最好独立。

  • 依赖的基础应用在性能测试中没有。例如要压测的目标业务是发贴,肯定会依赖到用户相关的业务,用户中心就是一个基础应用(当然很多小型公司可能没独立这块业务)。

  • 研发阶段无法快速部署要压的分支。有一点规模的互联网公司,一周的迭代,同一个应用可能会有多个分支,需要支持快速部署指定的分支到性能环境。

阿里内部有一套完整的系统用于支撑集团每日成千上万的研发阶段的性能压测需求。

2、同配生产环境子集 - 容量规划

方案价值

  • 容量规划是一个持续的过程,如何减少人力投入,如何才能“无人值守”。

  • 成本和效果平衡:尽量贴近线上运行环境,同时容量规划的数据对线上容量布置有很好的指导作用。

  • 完全独立不影响线上。

  • 随时可运行,结果可跟踪。

存在的问题

容量规划不是直接在生产环境进行的,因为生产环境的最终容量配比,是参考自容量规划产出的数据。在生产环境进行的压测,是最后的验收阶段,在容量规划完成之后。提供一套独立的的生产环境子集-隔离环境,用于容量规划要解决的问题:

  • 构建的环境集如何定义,规模和架构如何贴近线上。

  • 流量如何走到隔离环境。

  • 隔离环境写的数据是否需要清理,如何清理?

如何解决

想详细了解阿里容量规划的技术演进,可参考:这里。

隔离环境就是最新容量规划生态中的重要基础。隔离环境的支持,才能支撑常态化的容量规划运行,持续不断的改进。

  • 首先,提炼机器比例。基于线上核心应用的现有规模情况,提炼出一个缩小版的完全模型。即线上机器之间的比可能是5000:2000:1000,整体比例缩放100倍,在隔离环境的机器比是50:20:10。使用这种方式,有效的保证了同线上机器同比例,同时成本上做了很好的控制。

  • 其次,确定隔离目标流量。根据接下来线上的目标流量大小,同比例计算出隔离环境应该支撑的流量,作为隔离环境打压测流量时的目标流量。

  • 然后,通过压测流量从小到目标流量探索,边压边弹。

  • 最后,收集隔离环境达到目标流量后,新的机器比例及数据。应用间的比例关系很可能已经有了改变,有的应用可能缩容,有的应用可能扩容,作为线上机器关系的参考。

当然这里面的涉及的技术细节还有很多:

  • 全链路压测新应用:整个压测流量其实是沿用了线上压测的全链路压测机制,带流量标,数据落影子库的方式,所以隔离环境写的数据不需要特殊的处理。

  • 环境标隔离环境:流量同时会带上一个“环境标”,通过环境标的识别,接入层会把流量导到隔离环境,从而做到流量的环境隔离。

  • "RPS"模式施压:在系统整体的流量数据获取上,我们摒弃了一直以来备受追捧的"并发量"的方式。众所周知,业务提出来的目标一般会是,"希望峰值支持xxxx个用户登陆"这种,进行容量规划的时候需要将并发的用户数跟系统能承受的QPS,进行一个映射关系。我们容量规划就直接使用阿里云压测平台(PTS)的"RPS"模式,压出来拿到的QPS数据,直接是系统维度的数据,不用转换,这样也更减少了转换过程中的失真。

  • 边压边弹技术:在隔离环境压测中,何时弹新机器,弹多少机器,整个过程如何控制,这里面包含了一整套完整精密的算法。整个过程示意图如下。

3、生产环境复制版 - 云时代的优势

方案挑战

生产环境复制版面临的挑战非常多。其中,如果要对生产环境进行完全的复制,将要面临以下挑战:

  • 复制生产环境服务器的架构

  • 复制生产环境网络基础环境

  • 复制生产环境的所有应用分层

  • 网络带宽

  • 数据库以及所有的基础数据集

  • 负载均衡

  • ......

存在的问题

对于传统时代的压测工程师来说,这样一系列的操作,就是新搭建一套“影子系统”了,看起来有点像不可能完成的任务。要完成上述任务,压测工程师面临巨大的挑战:

  • 沟通协调几乎所有的技术部门(开发、运维、网络、IT...);

  • 如果即用即销毁,那么劳民损财只用个一两次,成本太大;

  • 如果持续维护,那么维护成本显然同样不可忽略;

所以我们很少看到有公司进行这样的“生产环境复制”操作。小型公司可能没那么多人力实现,大中型公司,成本就更加难以接受了。但是现在云化趋势的潮流中,这种方案有其自身的先天优势。

如何解决

我们先看一下云上的产品架构图:

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

搭建一个云上应用的最小集应该需要用到:

  • SLB - 用来负载均衡;

  • ECS - 用来部署业务应用;

  • RDS - 用来存储业务数据;

如果要在云上复制以上线上系统,只需:

Step1:购买跟线上集群同规模同配置的ECS,部署应用;

Step2:复制线上RDS;

Step3:SLB配置新入口,指向复制环境;

Step4:开始线上压测;

在云上进行生产环境复制有以下优势:

  • 操作便捷。可视化界面,系统所需要的组建配置安装即可。

  • 即用即毁,节约成本。复制一套线上环境,如果是足够复杂的系统,使用的组件多,流量大,成本问题肯定要考虑。传统时代搭建的成本本身就高,继续维护和再搭建的成本同样也高。但是云时代,就是点几个按钮搭建,点几个按钮销毁的过程,按使用量付费,验证完就释放,对于资源成本的浪费可控性很好。

  • 机器配比根据情况可自由调控。在云上显然也可以快捷进行低配、同配生产环境子集复制,相对于非云化的系统同样有明显的优势。

  • 架构信息清晰。如果云端提供了“架构感知”的功能,那么可以直观绘制除业务系统在云上的整体架构,准确直观,压测工程师不用再花很长的时间梳理系统的架构,还面临可能不准确的问题。

03 生产环境 - 老生常谈


谈分布式性能压测,就离不开全链路压测技术。目前,也有不少互联网企业开始构建自己的全链路压测体系,我们将阿里的实践浓缩成一张全链路压测模型图。

04 总结


  • 仿真的性能压测环境,是执行有效性能压测的前提。

  • 不同的压测环境都有不同的应用场景,企业应根据自身情况进行选择。

  • 规模中小的公司独立搭建一套隔离的压测环境成本高昂,可维护性差。

  • 云上的性能压测,在操作、成本和维护方面,有较高的优势。

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

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

相关文章

MySQL校招集锦

数据库面试集锦 1.请说下你对MySQL架构的了解 先看一下MySQL的架构图 大体来说,MySQL 可以分为 Server 层和存储引擎两部分。 Server 层包括:连接器、查询缓存、分析器、优化器、执行器等,涵盖了 MySQL 的大多数核心服务功能,…

2.hadoop系列之组成简介

本文我们了解hadoop3的组成部分,如下图所示,包括HDFS数据存储、Yarn资源调度、MapReduce计算 1. HDFS概述 HDFS: Hadoop Distributed File System,是一个分布式文件系统 HDFS由NameNode、DataNode、Secondary NameNode组成 NameNode:存储文…

Zabbix监控docker容器状态信息详解

前言 本篇文章针对zabbix server已部署完成的情况。docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机…

UGUI-ContentSizeFitter之最简单实现maxSize限制

步骤 方法思路如下: 复制ContentSizeFitter源码出来,改名为ContentSizeFitterEx (AddComponentMenu里面的名字也需要改。)FitMode增加枚举MaxSize增加序列化属性m_MaxHorizontal和m_MaxVertical修改HandleSelfFittingAlongAxis增…

智能商业化模式:信息流广告的动态展现策略

丨目录: 摘要 引言 问题建模 实验 总结与展望 关于我们 参考文献▐ 摘要大多数的信息流场景会向用户展现自然内容和商业化内容(广告)的混合结果。一种比较常见的做法是,将广告限定在固定位置进行展现,但由于这种静态广…

7 常用类实例

常用类 1 object类 类的声明:public class object 类所属的包:java.lang object是所有类的根类Java中的所有类,如果没有特殊说明,则默认继承object object的派生类对象都可以调用这些方法,派生类一般会对根据需要重…

2022最新CKA认证指南看这里

目录 🧡CKA简介 🧡CKA报名 🧡注意事项 🧡题目 💟这里是CS大白话专场,让枯燥的学习变得有趣! 💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话&…

代码随想录——二叉树

二叉树遍历 基本介绍: 二叉树主要有两种遍历方式: 深度优先遍历:先往深走,遇到叶子节点再往回走。【前中后序遍历】广度优先遍历:一层一层的去遍历。【层序遍历】 这两种遍历是图论中最基本的两种遍历方式 深度优…

录制电脑内部声音,2个方法,轻松解决

在我们日常的学习、娱乐和工作中,我们经常会遇到需要使用电脑录屏的情况。在电脑录屏的时候,怎么录制电脑内部声音?今天小编分享2个方法,教你如何轻松解决这个问题,一起来看看吧。 录制电脑内部声音方法1:Q…

Python基于PyTorch实现BP神经网络ANN分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Perceptron,MLP)网络曾对人工神…

什么是真正的骨传导耳机,五款真骨传导耳机推荐

市面上真假骨传导耳机不能辨别?真骨传导耳机是没有喇叭传播声音的,通过振子传播声音,我们在区分耳机是不是真骨传导耳机时,可以看看机身有没有喇叭音孔,有音孔的就不是利用骨传导传播声音的方式,下面就给大…

新的AI技术展望

“科学史是克服我们自身认知局限的不懈动力。”——约翰克拉考尔 这些是关于未来人工智能的话语。现在你可能在想,人工智能将如何影响我们,我们将如何处理它? 不用担心; 我有一个答案。AI(人工智能)已经在很多方面影…

easyexcel案例之类型转换,合并单元格,批注,下拉框,导入校验

文章目录easyexcel案例之类型转换,合并单元格,批注,下拉框,导入校验一、依赖二、导出1.类型转换导出2.自定义文件标题3.合并单元格导出注解方式通过 registerWriteHandler 方法注册进去自定义合并规则进行合并4.批注和下拉框导出批…

vulnhub DC系列 DC-2

总结:cewl和wpscan的使用,rbash逃逸,suid提权 下载地址 DC-2.zip (Size: 847 MB)Download: http://www.five86.com/downloads/DC-2.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-2.zip使用方法:解压后,使用vm直接打开ova文件 漏…

MergeTree原理之二级索引

二级索引 除了一级索引之外,MergeTree同样支持二级索引,二级索引又称跳数索引,由数据的聚合信息构建而成。根据索引类型的不同,其聚合信息的内容也不同,当然跳数索引的作用和一级索引是一样的,也是为了查询…

【SpringCloud】什么是微服务?什么是SpringCloud?

【SpringCloud】什么是微服务?什么是SpringCloud? 一、什么是微服务? 1. 微服务架构的演变历程 单体架构 单体架构优缺点 2. 分布式架构 分布式架构优缺点 存在问题 3. 微服务 微服务的架构特征 微服务的优缺点 二、SpringClo…

头部3D建模新应用:护目镜类产品定制,省时高效好选择

自从越来越多人开始了运动健身,不少运动爱好者已经从小白用户升级为高级运动玩家。随着大家对运动装备的要求也越来越高,不少爱好者开始选购一些轻量化的私人订制装备。例如,高度符合用户头部外型的游泳眼镜、骑行护目镜等等。 游泳眼镜是为了…

用ACLS去控制访问文件

ACLs可以针对多个用户以及群组,其他人做出权限控制。文件系统需要挂载被ACL支持。XFS文件系统支持ACL。EXt4在7版本中默认激活ACL.但在更早的版本需要使用acl选项去挂载申请。 上图第十个字符.代表已经有了acl.表示已经设置ALC。文件的owner可以对文件设置ACL. get…

【结构型】组合模式(Composite)

目录组合模式(Composite)适用场景组合模式实例代码(Java)组合模式(Composite) 将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 适用场景 想表示对象的部分-整体层次结构。希望用户忽略…

Java判断null的几种方式

组内code review时,有同学提到字符串判断空值的写法,如下两种,(1)null在后,Test public void testDemo1() {String str null;if (str null) {System.out.println("null在后");return;} }&#…