架构师训练营第七周作业
一、题目
性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
用你熟悉的编程语言写一个 Web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
二、解答一
首先我们要明确,所谓吞吐量这个指标是如何计算的。吞吐量的计算公式如下:
吞吐量=(1000/响应时间ms) * 并发数
从公式上来说,吞吐量和并发数是正相关,和响应时间是负相关。换句话说就是,并发数越大,吞吐量就越高。响应时间越大,吞吐量就越小。也就是说,并发数量越大,响应越快,吞吐量就越大。
从理想的角度来看,假设我们有个完美的系统,无论多大的并发,都能满足响应的时间一致,那么吞吐量就是随着并发数线性增长,图形就如下:
但是实际的情况是,每个系统的性能是受制于硬件和操作系统本身的性能,包括网卡的IO,CPU上下文的切换等等,实际的情况是,随着并发数量的增加,系统的响应时间就会变得越来越长,相关的图形如下:
综合这两个图形,我们就可以得出实际的吞吐量和并发的关系,如下图所示:
网上是有一个经典的图,说明吞吐量和并发数,响应时间的关系:
来源:http://www.ha97.com/5095.html
三、解答二
这个问题的代码实现见如下的gitee地址:https://gitee.com/easonleeone/art-home-work.git
测试结果如下:
核心调用代码:
其中,支持1~100百分比的响应时间计算,可以很方便的得出90%线之类的统计数据。
本例子目前只实现了GET的请求部分的压测,用的框架是httpclient.实际的操作过程中,会有部分的请求的结果失败的情况,目前这部分失败的请求是直接抛弃了,后续可以考虑作为异常结果,也计算出来。
版权声明: 本文为 InfoQ 作者【李日盛】的原创文章。
原文链接:【http://xie.infoq.cn/article/2139c327ae0d98c1c5c0a440c】。文章转载请联系作者。
评论