性能专家深度解读:常见的压测模型

溢出苔藓
• 阅读 517

本文介绍了几大性能测试场景,对压力测试相关指标、资源的估算模型进行了解析,并深度分析了常见压测模型适用的业务场景及需考虑的技术细节,让您在使用压测验证系统能力时不再迷茫。

一、性能测试场景

1.冒烟测试

  • 介绍:冒烟测试是常规的负载测试,配置为最小负载(1个VU),每次新增或者更改脚本,你可以利用冒烟测试作为完整性检查。
  • 目的:验证测试脚本没有执行错误,验证服务端在最小负载下不会出现错误。

2.负载测试

  • 介绍:负载测试主要关注在正常并发用户数或者固定rps 下评估系统的性能,正常会采用满负载的50%~70%长时间的运行,中间会增加几个坡度变化来观察系统反应。
  • 目的:评估系统在一定负载下的性能,确认系统的重构、更改不会造成系统严重性能问题。

3.压力测试

  • 介绍:在高负载的压力下,评估系统的可用性和稳定性。压力测试下又细分为:阶梯测试(多阶梯渐进达到最大压力)、尖峰测试(短时间内极端的负载)、峰值- 测试(1分钟的低负载,达到高负载,再消退)。
  • 目的:
    1)用于评估系统在用户或者吞吐量的最大容量值。
    2)确认系统在高负载情况下的资源指标表现。
    3)确认系统的熔断机制以及是否具备故障自动发现、恢复的模式。
    4)人工干预的流程演练,如何快速定位、降级、消除故障范围。

4.浸泡测试

  • 介绍:浸泡测试配置为系统容量的80%左右,并且尽量以小时为单位。
  • 目的:在长时间处于高压力状态下,发现系统的错误和可靠性问题,通常用于快速定位内存泄漏、句柄释放、查找并发锁竞争问题。

二、性能测试场景

压测指标估算模型
假设一个脚本执行耗时500ms,一个线程一秒能执行2次,一个线程能够造成2rps的压力,因此工作线程数会直接影响请求的吞吐量。
假设一个脚本执行耗时2秒,100个线程在第一秒能造成100个请求的压力,平均一秒50个请求,但是跟50rps是有根本的区别,请求的时间跨度不一致。
pod资源估算模型
一个并发用户=一个VU=一个线程/协程
假设一个并发用户在golang运行对应是一个协程,一次脚本执行可能包括该用户的多次接口请求,一次请求需要进行socket连接,这里需要确认每次请求是否进行连接复用。
golang创建一个协程资源只需2KB资源,协程的切换成本比较低(只需要三个寄存器的值修改 PC / SP / DX),但是如果禁用了连接复用,每次请求需要创建新的连接,对pod的资源消耗是极大的。

操作系统linux优化网络配置:

sysctl -w net.ipv4.ip_local_port_range="1024 65535"

sysctl -w net.ipv4.tcp_tw_reuse=1

sysctl -w net.ipv4.tcp_timestamps=1

ulimit -n 250000

三、常用压测模型

常用的压测模型主要包括两种,并发用户模型固定rps模型

并发用户模型用于模拟用户持续阶段增长阶段,用于验证服务端的负载不断增长或者流量减缓的前提下,性能指标的变化。

固定rps指标通常是由业务方根据活动波峰估算后需要达到的服务rps容量,因此正常只需要衡量在该rps压力,服务的负载(包括latency、cpu、memory、iostat等负载)是否正常以及链路风险。

在模拟真实流量大容量压测场景下,存在几个问题

  1. 用户IP来自全球各地,如何设置ip池,避免由于负载均衡导致的流量分布不均匀。
  2. 如何按照用户地域的真实流量来分配发压机(对应k8s的pod)流量占比。
  3. 采用rps压测模型下,由于网络的抖动以及跨idc的带宽差异,不同地域相同数量的VU造成的rps差异会比较大,并且脚本的请求耗时越低,这个差异越会被放大。
  4. 排除用户自定义黑白名单限制。

需要考虑的细节点

  1. 一个用户请求10次,10个用户请求1次,同样是造成10rps的压力,但是对服务端的资源消耗不同,10个用户可能存在10条长连接。
  2. 假设真实用户是端上用户,browse会采用http2连接复用技术,如何在同一条tcp连接进行请求的模拟、编排,当然特殊场景下可能会存在短链接场景。
  3. 同一个用户(uid标志)多次请求同一个接口,可能命中缓存,不能真实的模拟不同用户的并发场景,需要提供大量的测试数据账号。

分布式场景下,需要摸顶每个pod(假设是4C8G)能启动的最大并发线程/协程数。
并发用户模型,相对简单,通过均匀切片用户设置的并发用户数指标,并且按照地域流量比例下发到各个地域的pod。
固定rps模型,需要设置初始的用户线程数,由于每个pod每个地域存在网络抖动,每个线程数能造成的rps压力也在浮动,存在两个技术方案——
前提:先通过短时间小范围的预压测,摸底每个地域pod单个线程执行脚本能造成的rps压力,能够提供精准的时延数据供operator计算调度。

  1. 用户设置的rps指标直接切片到各个pod,假设每个pod误差不大并且在负载范围内,能够达到用户设置的rps指标。
    优点:实现简单。
    缺点:存在些许误差,容错能力、扩展能力差。
  2. 预设初始每个pod的并发用户数,每个pod上报请求次数到全局限流中间件限流,operator根据聚合的指标按照pod资源粒度进行弹性扩缩容,最终达到rps目标。
    优点:具备自动容错机制,运行中支持全局动态调度。
    缺点:增加了第三方组建依赖,调度实现复杂。

四、优测压力测试简介

优测压力测试是一款云原生性能测试工具,可模拟百万用户发压,支持单接口、全链路及JMeter压测。提供多维度性能测试报告,帮助业务快速定位产品性能瓶颈、准确验证系统能力,全面提升稳定性。
性能专家深度解读:常见的压测模型
性能专家深度解读:常见的压测模型

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Socket接口固定QPS性能测试实践
在学习了Socket协议的知识和完善固定QPS压测模型之后,打算对Socket.IO协议的接口进行一波压测实践,来验证自己写的功能是否存在BUG和更多能做的优化空间。总结下来,修复了两三个BUG,性能测试进度条的计算方式进行了优化,不然在类似Socket这种异步处理的请求,可能会由于统计的doing()方法耗时太少
Stella981 Stella981
3年前
OceanBase数据库实践入门——性能测试建议
概述本文主要分享针对想压测OceanBase时需要了解的一些技术原理。这些建议可以帮助用户对OceanBase做一些调优,再结合测试程序快速找到适合业务的最佳性能。由于OceanBase自身参数很多、部署形态也比较灵活,这里并没有给出具体步骤。数据库读写特点压测的本质就是对一个会话的逻辑设计很高的并发。首先需要了解单个会话在
Stella981 Stella981
3年前
Jmeter
性能测试最关键的一个方面是能够模拟应用程序的实际负载。但是,确定目标负载的并发用户数是不够的。在测试阶段使用的相同目标负载下,经过测试的应用程序可能会失败。或者当问题是系统中的瓶颈时,应用程序可能会在测试负载下失败。发生这些事情是因为除了目标负载之外,开发人员和性能测试人员还应该关心在测试执行期间如何分配负载也就是模拟各种负载压力场景。JMeter的Ra
研发视角浅谈R2流量回放测试
一、背景测试小伙伴们在2023年保障了团队线上系统0问题,这简直就是一项了不起的壮举!这得益于咱们测试组同事对工作的细致投入、风险把控、以及严格遵循流程规范进行测试用例评审、自动化建设、联调推动、回归验证、常态化压测、大促高保真压测、引流回放等多重保险策略
京东云开发者 京东云开发者
7个月前
业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
作者:京东物流樊芳渝一、前言当前所测试业务需求为集成在业务系统WMS的jar包,jar包测试主要集中在本地拉取开发编写的代码做单元测试,因为jar包没有单独的应用,每当大促压测或日常压测,架构师或开发同事问道:这个jar包的JVM指标如何?jar包的火焰图
京东云开发者 京东云开发者
3个月前
业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
京东物流:樊芳渝一、前言当前所测试业务需求为集成在业务系统WMS的jar包,jar包测试主要集中在本地拉取开发编写的代码做单元测试,因为jar包没有单独的应用,每当大促压测或日常压测,架构师或开发同事问道:这个jar包的JVM指标如何?jar包的火焰图是什
京东云开发者 京东云开发者
1星期前
业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
一、前言当前所测试业务需求为集成在业务系统WMS的jar包,jar包测试主要集中在本地拉取开发编写的代码做单元测试,因为jar包没有单独的应用,每当大促压测或日常压测,架构师或开发同事问道:这个jar包的JVM指标如何?jar包的火焰图是什么样的?对此,只
CGLIB动态代理对象GC问题排查 | 京东云技术团队
一、问题是怎么发现的最近有个新系统开发完成后要上线,由于系统调用量很大,所以先对核心接口进行了一次压力测试,由于核心接口中基本上只有纯内存运算,所以预估核心接口的压测QPS能够达到上千。压测容器配置:4C8G先从10个并发开始进行发压,结果cpu一下就飙升
谈谈压测方案的那点事 | 京东物流技术团队
前言在现阶段大促备战的压测不算是一件新鲜事,已经不存在什么技术瓶颈或者资源问题,每个团队都有很多人能够执行性能测试,在一些团队也已经落地了日常常态化,但压测也没有简单到只在压测平台上设置参数、运行脚本,然后去看压测报告中某个指标是否满足压测目标那么简单,我
【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队
一、前言性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构分析、流量分析、压测实施和剖解调优等主要环节中,引发对于系统能
溢出苔藓
溢出苔藓
Lv1
江南二月多芳草,春在蒙蒙细雨中。
文章
4
粉丝
0
获赞
0