并发量,QPS,TPS,看这一篇就够了

时间:2024-03-16 19:07:35

目录

引子

饭店问题 

网站

 类比饭店分析

性能测试

软件性能测试的基本概念和计算公式

一、软件性能的关注点

二、软件性能的几个主要术语


引子

并发量,QPS,TPS,看这一篇就够了

饭店问题 

并发量,QPS,TPS,看这一篇就够了

饭店优化

并发量,QPS,TPS,看这一篇就够了

 

网站

并发量,QPS,TPS,看这一篇就够了

 类比饭店分析

当一条请求从客户端发起时,它遵循着以上的线路传递,线性完成。这家网站的性能关键,在于应用服务器上。就像餐厅的服务能力,主要取决于后厨团队一样。当多个客户端同时发起请求时,服务器必须具备一定的“并行”能力,否则后续进来请求会排队而且可能超时。

上图画的是一个并发量,QPS,TPS,看这一篇就够了,但一般都服务器的并发量,QPS,TPS,看这一篇就够了都有多处理器,辅以超线程技术。

主流编程语言都有“多线程编程”的概念,其目的就在于合理的调度任务,将CPU的所有处理器充分的利用起来。也就是说这套应用服务本身就有不止一个“大厨”在烹饪。

取决于处理器数和多线程技术,数个事务可以以线程并发量,QPS,TPS,看这一篇就够了的方式并行处理。

 

不过当前服务器的性能并不满意,就像对于餐厅一样,针对这个应用服务思考了更多调优方案:

  • 大厨的数量真的够吗?是不是要继续增加人数(CPU核数,服务器节点数-硬件调优)?
  • 大厨的经验和技术到位吗?是不是要改聘更资深的大厨(改换具有更高频CPU的服务器-硬件调优;调整业务逻辑效率-逻辑调优)?
  • 改良热门餐品的备菜策略?(利用数据库索引、缓存等技术-逻辑调优)

除了强调的调优重点,应用服务/后厨团队,其他部分也是有可能成为瓶颈,需要调优解决的,比如:

  • 餐厅容量会不会无法容纳排队的客户?(服务器容量,线程池大小,最大连接数,内存空间)
  • 小二的下单和上菜速度有没有成为掣肘?(网络带宽,路由效率等。对于数据密集型服务而言,网络带宽很可能成为瓶颈。)
  • 等等

 

性能测试

 

线程数

要实现性能测试的一个必要条件,那就是我们必须要能模拟高峰期的访问量。这一点通过正常的应用客户端是很难办到的(比如web应用的客户端就是浏览器,你很难用浏览器并发向服务器发送大量请求)。

这里就需要性能测试工具来帮忙了,主流的性能测试工具比如并发量,QPS,TPS,看这一篇就够了并发量,QPS,TPS,看这一篇就够了等都能以线程式并发的方式,帮我们达成“短时间内向服务器发送大量请求”这一任务。

多线程式并发测试工具,顾名思义,会启动复数个线程,让每个线程独立向服务器端发出请求。

有时候我们在描述性能测试过程时,会将这个客户端的独立线程数表述为“并发数”。

但是注意,这里的“并发”指的是客户端并发,很简单,客户端能发出很多请求,服务器却未必能处理得了是不是?

 

并行数

那么服务器一次性能同时处理多少事务请求呢?

根据我们之前的讨论,同一时间节点上同时处理的事务数最大就是:CPU处理器数*服务器超线程倍率。

比如对于一个8核未超线程CPU,某时间节点上的同时处理的事务不会超过8个。类比于8个厨师,同一时间点上只能处理8份餐品。

而超线程技术就像是给厨师们来了一场“左右互搏”培训,让每个人都能一心二用,一次处理2份餐品。

这里我们描述的“同时8个”事务,就是“并行/平行”的含义。

 

并发数-Throughput

注意上面我们讨论的“并行数”,不是"并发数"。否则我们直接看CPU核数就能确定并发数了。

并发数指的是一个时间段内并发量,QPS,TPS,看这一篇就够了的事务完成数。这个切片“时间段”常取1秒钟或1分钟这样的整数来做换算。

假设一个厨师平均2分钟做完一道菜,那么8个厨师2分钟完成8道菜,换算一下就是4道/分钟。

如果以分钟为单位进行统计,那么这个数字就是最终结果。

 

每秒事务数-TPS(Transaction Per Second

一般应用服务器的处理速度跟厨师做菜是不在一个数量级的,常见的事务请求在应用服务器端的处理时间以毫秒为单位计算。

所以测试性能时,我们更常用“1秒钟”来作为切片时间段。

一秒钟完成多少个事务请求,这个数据就是我们耳熟能详的“每秒事务数”。

这个指标翻译成英文就是TPS - Transaction Per Seconds。

每秒事务数,就是衡量服务器性能的最重要也是最直观指标。

每秒能完成的事务数越多,那么每分钟能完成的事务就越多,每天完成的事务数就越多 -- 并发量,QPS,TPS,看这一篇就够了简单的小学数学。

那么他直接能影响到一个应用服务每天平均能承受的访问量/请求量,以及业务高峰期能承受的压力。

 

每秒查询率-QPS(Queries Per Second

每秒钟处理完请求的次数;注意这里是处理完。一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。

           QPS = 并发量 / 平均响应时间

           并发量 = QPS * 平均响应时间

  • QPS跟TPS类似,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,这些请求会计为QPS。

         例如:访问一个页面请求了三次服务器,则产生一个TPS 3个QPS。

  • QPS是数据库中的概念,每秒执行条数(查询),被引申到压测中来了,但是不包括插入、更新、删除操作,所以不建议用qps来描述系统整体的性能;建议用tps,这个t,你可以随意的定义,可以是一个接口,也可以是一个业务流程等等。

 

平均响应时间-RT(Tesponse Time

那么有哪些因素会影响到TPS数值?

有两个主要的维度:

  • 单个事务响应速度
  • 同一时间能并行执行的事务

第二点我们说了,它主要跟服务器资源配置,线程池容量,线程调度等相关。

第一点换一个说法就是:事务平均响应时间。单个事务平均下来完成的速度越快,那么单位时间内能完成的事务数就越多,TPS就越高 -- 并发量,QPS,TPS,看这一篇就够了简单的小学数学。

所以在进行性能调优时,除了服务器容量资源,单个事务响应速度是另一个关注的重点。

要关注事务响应速度/时间,可以考虑在事务内部逻辑节点添加“耗时探针”的方式,来探测每个步骤分别花费的时间,从而找出可优化的部分。

 

吞吐量

一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

吞吐量并发量,QPS,TPS,看这一篇就够了是在性能探测过程中经常冒出来的名词,怎么理解他呢?

简单的结论就是,吞吐量是站在“量”的角度去度量,是一个参考指标。

但是光有“量”的数据有时候并无太大价值,一家餐厅1个小时卖出100份餐品和一个月才卖出100份餐品,单从“量”的维度衡量肯定不行,时间维度很重要!

所以,性能测试领域的吞吐量通常会结合上时间维度进行统计。

如果吞吐量的“量”以“事务”为统计单位的话,结合时间维度,转化以后可以很容换算成TPS

 

PV  (Page View)

页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次。可以统计服务一天的访问日志得到。 

 

 UV(Unique Visitor

独立访客,统计1天内访问某站点的用户数。可以统计服务一天的访问日志并根据用户的唯一标识去重得到。 

 

DAU (Daily Active User)

日活跃用户数量。常用于反映网站、互联网应用或网络游戏的运营情况。DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似  

 

MAU (Month Active User)

月活跃用户数量,指网站、app等去重后的月活跃用户数量

 

测试类型

由于测试目标的不同,性能测试可能存在很多种形式。

比如明确了解日访问量和巅峰访问量,测试服务器是否能够承受响应压力的测试。

比如用于探测系统负载极限和性能拐点的测试。

比如衡量系统在高负载情况下,长时间运行是否稳定的测试。

这许多种形式我们暂且不做讨论,不过所有以上测试的基础都是它 -- “并发测试”。

制造并发,是性能测试的基本实现办法。

 

进一步细化理解客户端线程数和并发量的关系

设服务器并发能力为每秒完成1个事务,即TPS=1/s。且服务器使用单核处理器,现用Jmeter启动5个线程循环进行并发测试,那么每个切片时间(每秒)都发生了什么?

我们可以用如下图表来分析:

其中,并发量,QPS,TPS,看这一篇就够了为线程可执行(等待执行),并发量,QPS,TPS,看这一篇就够了为线程正在执行,并发量,QPS,TPS,看这一篇就够了表示线程执行完毕。

并发量,QPS,TPS,看这一篇就够了

 

假设其他条件不变,增加服务器并行处理数为2(增加CPU核数为2,以及合理的线程调度机制)那么变为:

并发量,QPS,TPS,看这一篇就够了

这里真实的并发数(服务器单位时间完成的事务数)就是图中每一秒钟完成的事务数。

而客户端启动的其他未处理的线程则在“排队等待”。

 

线程并发数量

那么制造多少并发,换言之,我应该用多少并发线程数去进行测试?

实际上客户端发起的线程数与服务器可达到的并发数并无直接关系,但你应该使用足够的线程数,让服务器达到事务饱和。

如何判断服务器是否达到饱和?这时我们可以采取阶梯增压并发量,QPS,TPS,看这一篇就够了的方式,不断加大客户端线程数量,直到服务器处理不过来,事务频繁超时,这时就得到了服务器处理能力极限。

根据不同的测试类型,取这个极限数量的一定百分比作为客户端线程数。

比如说,负载测试中,通常取达到这个极限数值的70%。

 

客户端损耗

我们在讨论餐厅订单流程和服务器事务流程时,流程图里包括了顾客/客户端。

顾客点餐要不要花时间?当然要,如果他患上选择困难症,甚至有可能在下单的时候花去大量时间。

同理,客户端从启动线程到构造请求并发出,这一过程也有一定的时间损耗。

通常在测试服务器性能的时候,客户端性能是应该被剥离出去的,所以测试时应该尽量降低客户端时间损耗。

  • 适当增加客户端线程循环次数 - 稀释这些线程启动的占用时间
  • 当客户端线程数需要较大数量时(对jmeter而言,超过1000左右),客户机/测试机的资源占用会增大,整个客户端的请求构造时间会拉长。应该考虑分布式测试。
  • 尽量减少客户端请求构造时间,比如beanshell请求加密,如果过程过于复杂也会耗去可观时间。极限测试情况下应考虑简化。

 

软件性能测试的基本概念和计算公式

一、软件性能的关注点

对一个软件做性能测试时需要关注那些性能呢?

我们想想在软件设计、部署、使用、维护中一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么,作为一个软件性能测试工程师,我们又该关注什么?

首先,开发软件的目的是为了让用户使用,我们先站在用户的角度分析一下,用户需要关注哪些性能。

对于用户来说,当点击一个按钮、链接或发出一条指令开始,到系统把结果已用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印象。也就是我们所说的响应时间,当相应时间较小时,用户体验是很好的,当然用户体验的响应时间包括个人主观因素和客观响应时间,在设计软件时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。如:用户在大数据量查询时,我们可以将先提取出来的数据展示给用户,在用户看的过程中继续进行数据检索,这时用户并不知道我们后台在做什么。

用户关注的是用户操作的相应时间。

其次,我们站在管理员的角度考虑需要关注的性能点。

1、 响应时间
2、 服务器资源使用情况是否合理
3、 应用服务器和数据库资源使用是否合理
4、 系统能否实现扩展
5、 系统最多支持多少用户访问、系统最大业务处理量是多少
6、 系统性能可能存在的瓶颈在哪里
7、 更换那些设备可以提高性能
8、 系统能否支持7×24小时的业务访问

再次,站在开发(设计)人员角度去考虑。

1、 架构设计是否合理
2、 数据库设计是否合理
3、 代码是否存在性能方面的问题
4、 系统中是否有不合理的内存使用方式
5、 系统中是否存在不合理的线程同步方式
6、 系统中是否存在不合理的资源竞争

那么站在性能测试工程师的角度,我们要关注什么呢?

一句话,我们要关注以上所有的性能点。

 

二、软件性能的几个主要术语

1、响应时间:对请求作出响应所需要的时间

网络传输时间:N1+N2+N3+N4

应用服务器处理时间:A1+A3

数据库服务器处理时间:A2

响应时间=N1+N2+N3+N4+A1+A3+A2

2、并发用户数的计算公式

系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是5000个,那么这个数量,就是系统用户数。

同时在线用户数:在一定的时间范围内,最大的同时在线用户数量。
同时在线用户数=每秒请求数RPS(吞吐量)+并发连接数+平均用户思考时间

平均并发用户数的计算:C=nL / T

其中C是平均的并发用户数,n是平均每天访问用户数(login session),L是一天内用户从登录到退出的平均时间(login session的平均时间),T是考察时间长度(一天内多长时间有用户使用系统)

并发用户数峰值计算:C^约等于C + 3*根号C

其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论。

3、吞吐量的计算公式

指单位时间内系统处理用户的请求数

从业务角度看,吞吐量可以用:请求数/秒、页面数/秒、人数/天或处理业务数/小时等单位来衡量

从网络角度看,吞吐量可以用:字节/秒来衡量

对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,他能够说明系统的负载能力

以不同方式表达的吞吐量可以说明不同层次的问题,例如,以字节数/秒方式可以表示数要受网络基础设施、服务器架构、应用服务器制约等方面的瓶颈;已请求数/秒的方式表示主要是受应用服务器和应用代码的制约体现出的瓶颈。

当没有遇到性能瓶颈的时候,吞吐量与虚拟用户数之间存在一定的联系,可以采用以下公式计算:F=VU * R /

其中F为吞吐量,VU表示虚拟用户个数,R表示每个虚拟用户发出的请求数,T表示性能测试所用的时间

4、性能计数器

是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着“监控和分析”的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用。

资源利用率:指系统各种资源的使用情况,如cpu占用率为68%,内存占用率为55%,一般使用“资源实际使用/总的资源可用量”形成资源利用率。

5、思考时间的计算公式

Think Time,从业务角度来看,这个时间指用户进行操作时每个请求之间的时间间隔,而在做新能测试时,为了模拟这样的时间间隔,引入了思考时间这个概念,来更加真实的模拟用户的操作。

在吞吐量这个公式中F=VU * R / T说明吞吐量F是VU数量、每个用户发出的请求数R和时间T的函数,而其中的R又可以用时间T和用户思考时间TS来计算:R = T / TS

下面给出一个计算思考时间的一般步骤:

A、首先计算出系统的并发用户数

C=nL / T F=R×C

B、统计出系统平均的吞吐量

F=VU * R / T R×C = VU * R / T

C、统计出平均每个用户发出的请求数量

R=u*C*T/VU

D、根据公式计算出思考时间

TS=T/R 


参考链接

https://www.cnblogs.com/dayu2019/p/11906855.html
https://blog.csdn.net/itkampong/article/details/82499633