系统吞吐量QPS并发数响应时间,以及提高吞吐量的思路

Posted 阿征new

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统吞吐量QPS并发数响应时间,以及提高吞吐量的思路相关的知识,希望对你有一定的参考价值。

一.系统吞度量要素:

吞吐量是指系统在单位时间内处理请求的数量

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

        QPS(TPS):每秒钟request/事务 数量

        并发数: 系统同时处理的request/事务数

        响应时间:  一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间  

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

举个例子:

银行窗口业务,窗口数量为10个窗口,平均每个人办理业务的时候为2分钟。可以用下面的方法计算。

并发数=10个窗口

平均响应时间为 = 2分钟

吞吐量 = 10/2 =5个每分钟

真实的系统吞吐量:

如果一个系统接口在 4核8G的机器上跑

给接口分配4个线程,并发执行 : 并发数= 4

平均响应时间是 100ms

QPS=4/0.1=40

提高吞吐量:

1. 并发数的优化:4个CPU

       接口处理可能包括:CPU处理 20ms、 本地IO 30ms、网络IO  50ms

       可以在本地IO和网络IO阻塞时,并发处理其他线程:每个线程任务真正占用CPU的时间是 20ms

       那么,单个CPU100ms可以并发 5个线程,4个CPU*5=20个并发数

       忽略线程切换的耗时:100ms 单个CPU可以并发5个线程,每个线程占用CPU时间片20ms,等都执行完了,各自的IO也已经返回数据,再分别耗时1ms(忽略) 去接收IO返回

2. 响应时间优化:100ms优化到50ms

     本地IO+网络IO 增加响应的二级三级缓存,并优化网络通信,可能可以提审一倍以上的性能,比如30ms

     加上CPU处理耗时的20ms= 50ms        

QPS=并发数20/响应时间50ms = 20/0.05 = 400QPS

        一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降。

1. 并发数不变:QPS不断增加,QPS超过最大吞吐量后,会有大量请求等待,平均响应时间急剧下降

2. QPS不变:增加并发数,会导致CPU并发线程过多,线上上下文切换频繁,内存消耗增加,从而使平均响应时间下降

二.如何提高系统QPS?

由前面的公式:QPS(TPS)= 并发数/平均响应时间 可以看出,要提高qps,我们必须做2个方面努力

2.1增加并发数

1.比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。

2.增加数据库的连接数,预建立合适数量的TCP连接数

3.后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求

4.调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。
5.RPC调用的尽量使用线程池,预先建立合适的连接数。

2.2减少平均响应时间

1.请求尽量越前结束,越好,这样压力就不要穿透到后面的系统上,可以在各个层上加上缓存

2.流量消峰。放行适当的流量,处理不了的请求直接返回错误或者其他提示。和水坝道理很类似

3.减少调用链

4.优化程序

5.减少网络开销,适当使用长连接

6.优化数据库,建立索引

最后,要优化的地方还有很多,上面只是列举常见一些要注意的地方

优化的指导原则就是增加并发数 和减少平均响应时间

 

下面的内容整理引用其他博客,用于参考

三.系统吞吐量评估:

我们在做系统设计的时候就需要考虑CPU运算、IO、外部系统响应因素造成的影响以及对系统性能的初步预估。

而通常境况下,我们面对需求,我们评估出来的出来QPS、并发数之外,还有另外一个维度:日PV。

通过观察系统的访问日志发现,在用户量很大的情况下,各个时间周期内的同一时间段的访问流量几乎一样。比如工作日的每天早上。只要能拿到日流量图和QPS我们就可以推算日流量。

通常的技术方法:

        1. 找出系统的最高TPS和日PV,这两个要素有相对比较稳定的关系(除了放假、季节性因素影响之外)

        2. 通过压力测试或者经验预估,得出最高TPS,然后跟进1的关系,计算出系统最高的日吞吐量。B2B中文和淘宝面对的客户群不一样,这两个客户群的网络行为不应用,他们之间的TPS和PV关系比例也不一样。

A)淘宝

淘宝流量图:

淘宝的TPS和PV之间的关系通常为  最高TPS:PV大约为 1 : 11*3600 (相当于按最高TPS访问11个小时,这个是商品详情的场景,不同的应用场景会有一些不同)

B) B2B中文站

B2B的TPS和PV之间的关系不同的系统不同的应用场景比例变化比较大,粗略估计在1 : 8个小时左右的关系(09年对offerdetail的流量分析数据)。旺铺和offerdetail这两个比例相差很大,可能是因为爬虫暂的比例较高的原因导致。

在淘宝环境下,假设我们压力测试出的TPS为100,那么这个系统的日吞吐量=100*11*3600=396万

这个是在简单(单一url)的情况下,有些页面,一个页面有多个request,系统的实际吞吐量还要小。

无论有无思考时间(T_think),测试所得的TPS值和并发虚拟用户数(U_concurrent)、Loadrunner读取的交易响应时间(T_response)之间有以下关系(稳定运行情况下):
TPS=U_concurrent / (T_response+T_think)。

并发数、QPS、平均响应时间三者之间关系

   上图横坐标是并发用户数。绿线是CPU使用率;紫线是吞吐量,即QPS;蓝线是时延。
    开始,系统只有一个用户,CPU工作肯定是不饱合的。一方面该服务器可能有多个cpu,但是只处理单个进程,另一方面,在处理一个进程中,有些阶段可能是IO阶段,这个时候会造成CPU等待,但是有没有其他请 求进程可以被处理)。随着并发用户数的增加,CPU利用率上升,QPS相应也增加(公式为QPS=并发用户数/平均响应时间。)

随着并发用户数的增加平均响应时间也在增加,而且平均响应时间的增加是一个指数增加曲线。而当并发数增加到很大时,每秒钟都会有很多请求需要处理,会造成进程(线程)频繁切换,反正真正用于处理请求的时间变少,每秒能够处 理的请求数反而变少,同时用户的请求等待时间也会变大,甚至超过用户的心理底线。

 

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

一、软件性能的关注点

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

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

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

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

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

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

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

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

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

参考:

如何提高系统的吞吐量(QPS/TPS)

系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

以上是关于系统吞吐量QPS并发数响应时间,以及提高吞吐量的思路的主要内容,如果未能解决你的问题,请参考以下文章

吞吐量(TPS)QPS并发数响应时间(RT)概念

QPS相关的概念收集(吞吐量(TPS)QPS并发数响应时间(RT))

吞吐量(Throughput)QPS并发数响应时间(RT)对系统性能的影响

什么是吞吐量(TPS)每秒查询率(QPS)响应时间(RT)以及并发数?

什么是吞吐量(TPS)每秒查询率(QPS)响应时间(RT)以及并发数?

吞吐量(TPS)QPS并发数响应时间(RT)概念