性能测试中“并发度”的意义

之前的文章中曾出现过“并发度”这个概念,这个词不知道是不是我原创,它意在表达“并发”的可能性,是压力的一种度量。一些同学可能还没有理解这个概念的意义,下面我们看看它是怎么来……

  看过之前文章的同学应该知道,我将“并发”这个容易产生误解的词拆分成了“相对并发”和“绝对并发”。为什么这么做呢?那是因为“绝对并发”说的是同一时刻发生的事情,这通常是我们无法观测和衡量的。而“相对并发”说的是一个时间段内发生的事情,这是很容易观测到的。从某种程度上,也可以说“相对并发”是为了弥补我们无法有效评估“绝对并发”的压力而出现的。

  但是有时候,性能测试工程师仍然需要回答“系统可以处理多少个并发请求”这类的问题,或者是需要测试一些绝对并发的极限场景。这类问题和测试场景是有意义的,但是在没有“绝对并发”相关数据的情况下,我们如何处理?显然胡乱拍板是不可以的,那么我们只有根据一些可观测的数据进行合理的推测和估算,“并发度”就是这样产生的。

  假设我们已经分析得出,系统的使用压力集中在2个小时内,在这个时间段内共有100个用户访问(活跃用户),且压力是平均分布的(否则就可以说压力集中在更小的时间段内了),平均每个用户使用系统的时间是30分钟(活跃时间),那么我们可以画出下面一张图来表示服务端所承受的压力。

  这是一张从服务端视角来看的交互图。横轴是时间,纵轴是访问用户,每一条横线表示一个用户与系统的交互过程,不同的用户用不同颜色做了标识。在这张图中,什么是并发度呢?我们选取时间轴上的一个点,延纵轴方向做一条平行线,这条线穿过的横线的数量,就是并发度。

  并发度表示,在一个时间点上,可能与服务端进行交互的用户的数量。为什么说是“可能”呢?因为图中的每一条横线代表的是用户与系统的交互过程,也可以说是用户的活跃区间,在这个区间段内,用户只是处于一种活跃状态,而并不是说一直保持着与服务端的交互,这也是图中的横线用的是虚线的原因。所以,并发度表达的,是系统在一定的访问分布下,可能承受的最大并发压力,它是一种可能性。

  这样这个概念应该比较容易理解了,我们再来看看并发度的值是如何得出的。继续之前的分析结果“系统的使用压力集中在2个小时内,在这个时间段内共有100个用户访问,且压力是平均分布的,平均每个用户使用系统的时间是30分钟”,依然利用刚刚做的那条线,记对应的时间轴刻度为B,我们需要知道的是,有多少条代表交互过程的横线与之相交。

  很明显,开始时间点在B之前,结束时间点在B之后的横线,它的起点必须落在从B向前一个用户活跃时长的区间内,即下图的AB区域内。

  接下来只需简单的算术就可以了,100个用户访问平均分布在2小时内,AB时长为平均用户活跃时间,即30分钟,那么在AB区域内有100*30min/2h=25个用户访问。这25个用户在B时刻都可能会与系统发生交互,对系统照成压力,虽然只是一种理论上的可能性。

  这就是并发度,理解它的意义了么?

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-30 07:32:58

性能测试中“并发度”的意义的相关文章

性能测试中如何确定并发用户数

近日,Hitest在其技术博客上发表了一篇题为<并发用户数与TPS之间的关系>的文章,文章对TPS和并发用户数做了详细的解释,并针对性能测试中系统性能的衡量维度和测试策略给出了自己的建议.Hitest是阿里巴巴技术质量部提供的一款Web&移动应用安全测试SaaS化服务平台,旨在帮助开发者简单快捷地进行安全测试. 在文中,作者首先对并发用户数和TPS做了解释: 并发用户数:是指现实系统中操作业务的用户,在性能测试工具中,一般称为虚拟用户数(Virutal User).并发用户数和注册用户

[推荐系统]Mahout中相似度计算方法介绍

Mahout中相似度计算方法介绍      在现实中广泛使用的推荐系统一般都是基于协同过滤算法的,这类算法通常都需要计算用户与用户或者项目与项目之间的相似度,对于数据量以及数据类型不同的数据源,需要不同的相似度计算方法来提高推荐性能,在mahout提供了大量用于计算相似度的组件,这些组件分别实现了不同的相似度计算方法.下图用于实现相似度计算的组件之间的关系: 图1.项目相似度计算组件 图2.用户相似度计算组件 下面就几个重点相似度计算方法做介绍: 皮尔森相关度 类名:PearsonCorrela

Storm Topology的并发度

Understanding the parallelism of a Storm topology https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology   概念 一个Topology可以包含一个或多个worker(并行的跑在不同的machine上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个topology

性能测试中如何选取被测对象的业务逻辑

很多搞性能测试的人员,只会跟着网上.前辈教导的方法进行测试:挑选业务逻辑中并发量.访问量最高的业务逻辑.结合读写等业务进行测试,然后取整条业务逻辑(模拟用户全流程动作)的逻辑进行测试:结果就是:准备大堆的测试数据,复杂的准备工作:其实那些数据只是用来满足业务流中的条件,而不是真的能产生压力的部分: 笔者采用的方法: 1.B/S结构中,用户操作功能流程其实是前端js依次调用不同的CGI接口,后台实现上面其实并没有强依赖关系(只要满足对应条件进行发包都能执行). 所以,首先挑选业务逻辑中用户访问最高

UNIX环境高级编程:线程属性之并发度

并发度控制着用户级线程可以映射的内核线程或进程的数目.如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到.但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能. pthread_setconcurrency函数可以用于提示系统,表明希望的并发度. #include <pthread.h> int pthread_getconc

探讨性能测试中的计时问题

在系统测试时,尤其在需要测试算法或者某些模块的运行时间时,往往需要调 用一些时间函数库(如VC中的timeGetTime等可以获取毫秒级的时间),在待测试 的模块前后分别测试时间,然后,计算前后两个时间的差值,就得到模块的运行 时间,如图 1. 性能测试中的计时问题-互联网性能问题探讨"> 图 1 一个典型的模块计时方法 但是,使用原始的计时函数直接进行时间测试 在很多复杂情况下不方便,如图 1,当在一个模块中有多个子模块需要分别计时 ,所编写的计时代码甚至比原有的代码还多,这增加了程序维

操作系统中并发与共享的问题

问题描述 操作系统中并发与共享的问题 并发与共享的问题:并行程序访问共享数据问题举例:(count为共享变量初值=300) Program A: - N=count N=N+100 count=N - Program B:- M=count M=M+200 count=M - 如果按以下次序占处理机运行: N=count,N=N+100; M=count,M=M+200,count=M; count=N. 结果count=400(应为600)* 解决方案 如果为400,说明Program A存在

java语言中线程知识点的意义和作用!

问题描述 java语言中线程知识点的意义和作用! 请问在java的学习中,线程有什么意义?老师说线程可以提高运算速度,但是线程不是同时执行多个程序呢?怎么反倒可以提高性能呢? 解决方案 因为现在的计算机有不止一个cpu(内核),多个线程可以同时使用多个cpu同时计算,同时,多线程还可以在网络.io阻塞的时候做别的事情,提高效率,所以提高了性能.

云架构中数据冗余度问题研究

1 引言 随着科学技术的进步,IT行业所在的环境复杂性与日俱增,更多的http://www.aliyun.com/zixun/aggregation/13546.html">IT预算被用于维护基础架构和维持应用程序的正常运行,而不是更好地满足客户的需要.云的出现似乎给人们带来了新的希望,于是有人做出这样的预测--未来云时代. 2 云架构体系设计 2.1 云架构的概念及特点 云架构这一概念是Google在2006年首次提出的,它是为满足按需分配的服务而设计的软件架构.云架构与我们所熟悉的传统