性能指标术语&理发店模型
2015-11-26 09:13:53
响应时间
响应时间=呈现时间+系统响应时间
呈现时间取决于数据在被客户端收后到呈现出页面所消耗的时间;
系统响应时间指应用系统从请求发出开始到客户端接收到数据所消耗的时间。
通常可以认为:响应时间=系统响应时间
对一个web应用来说,它的页面响应时间=网络传输时间+应用延迟时间=网络传输时间+数据库延迟时间+应用服务器延迟时间。详细的分解更容易定位性能瓶颈所在。
并发用户数
从业务角度,并发用户数=同一时间段内访问系统的用户数量。
从服务器端承受的压力出发,并发用户数=在同一时刻与服务器进行了交互的在线用户数量。
注意“系统用户数”、“同时在线用户人数”、“并发用户数”的区分,并发用户数取决于业务并发用户数和业务场景。
在实际的性能测试过程中,为了方便,直接把业务并发用户数称为并发用户数。
估算并发用户数:
C=n*L/T; Cmax=C+3√C
C是平均的并发用户数;n 是 login session 的数量;L 是 login session 的平均长度;T是考察的时间段长度;Cmax是并发用户数的峰值。
吞吐量
吞吐量是指单位时间内系统处理的客户请求的数量
一般来说,以请求数/秒或者页面数/秒来衡量。
吞吐量计算:
F=Nuv*R/T
F表示吞吐量;Nuv表示虚拟用户的数量;R表示每个虚拟用户发出的请求数量;T表示性能测试所用的时间。
性能计数器
性能计数器是描述服务器或操作系统性能的一些数据指标,例如对于windows系统,使用内存数、进程时间等都是常用的计数器。
另一个相关术语是“资源利用率”,指的是系统各种资源的使用状况,例如CPU占用率68%,内存占用率90%。
思考时间
think time,也称为休眠时间,从业务的角度来说,这个时间指的是用户在进行操作时,每个请求之间的间隔时间。用户在使用系统时,不大可能持续不断的发出请求。体现在脚本中,就是在操作之间放置一个think的函数,使得脚本在执行两个操作之间等待一段时间。
每个虚拟用户发出的请求数量R和性能测试所用时间T、思考时间Ts满足关系 R=T/Ts。
通过理发店模型来理解最佳并发用户数和最大并发用户数
模型描述如下:
1、理发店共有3名理发师;
2、每位理发师剪一个发的时间都是1小时;
3、理发店设有等待区,当顾客来到理发店发现没有理发师空闲而为他理发时,顾客就在等待区排队等待,每次理发师要为下一个顾客理发时就从等待区队列的最前面喊一个顾客为其理发,等待区可供排队的长度为无穷大;
4、顾客们都是很有时间观念的人而且非常挑剔,他们对于每次光顾理发店时所能容忍的等待时间+剪发时间是3小时,而且等待时间越长,顾客的满意度越低。如果3个小时还不能剪完头发,顾客就会极度的不满意而无法容忍,甚至可能生气走人。
假设理发店里一次来了9位顾客(按照到来时间的早晚排位,从A到I),根据我们上面的场景,不难推断,这9位顾客中A、B、C的“响应时间”为1小时,D、E、F的“响应时间”为2小时(等待1小时+剪发1小时),G、H、I 的“响应时间”为3小时(等待2小时+剪发1小时)——已经到达用户所能忍受的极限。假如在把这个场景中的顾客数量改为10,那么我们已经可以断定,一定会有1位顾客因为“响应时间”过长而无法忍受,最终离开理发店走了。
横轴代表并发用户数(Number of Concurrent Users),即到来的顾客数。
纵轴代表资源的利用情况(Utilization,包括硬件资源和软件资源),即理发店中忙于理发的理发师数量;
代表吞吐量(Throughput,这里是指每秒事务数),即单位时间(1小时)内完成理发的次数;
代表响应时间(Response Time),即顾客等待开始理发的时间与理发所花时间之和。
划分区域:Light Load(较轻的压力)、Heavy Load(较重的压力)和 Buckle Zone(用户无法忍受并放弃请求)
最佳并发用户数(The Optimum Number of Concurrent Users)在Light Load和Heavy Load 两个区域的交界处;
最大并发用户数(The Maximum Number of Concurrent Users)在Heavy Load和Buckle Zone两个区域的交界处。
显然,每小时3个顾客就是这个理发店的最佳并发用户数,每小时9个顾客则是它的最大并发用户数。当每小时都有3个顾客到来时,理发店的整体工作效率最高;而当每小时都有9个顾客到来时,前几个小时来的顾客还可以忍受,但是随着等待的顾客人数越来越多,等待时间越来越长,最终还是会有顾客无法忍受而离开。同时,随着理发店里顾客人数的增多和理发师工作时间的延长,理发师会逐渐产生疲劳,还要多花一些时间来清理环境和维持秩序,这些因素将最终导致理发师的工作效率随着顾客人数的增多和工作的延长而逐渐的下降,到最后可能要1.5小时甚至2个小时才能剪完1个发了。
对于一个确定的被测系统来说,在某个具体的软硬件环境下,它的“最佳并发用户数”和“最大并发用户数”都是客观存在。以“最佳并发用户数”为例,假如一个系统的最佳并发用户数是50,那么一旦并发量超过这个值,系统的吞吐量和响应时间必然会 “此消彼长”;如果系统负载长期大于这个数,必然会导致用户的满意度降低并最终达到一种无法忍受的地步。所以我们应该 保证最佳并发用户数要大于系统的平均负载。
对于最大并发用户数的识别,需要考虑和鉴别一下以下两种情况:
1.当系统的负载达到最大并发用户数后,响应时间超过了用户可以忍受的最大限度——这个限度应该来源于性能需求,例如:在某个级别的负载下,系统的响应时间应该小于5秒。这里容易疏忽的一点是,不要把顾客因为无法忍受而离开时店内的顾客数量作为理发店的“最大并发用户数”,因为这位顾客是在3小时前到达的,也就是说3小时前理发店内的顾客数量才是我们要找的“最大并发用户数”。而且,这位顾客的离开只是一个开始,可能有会更多的顾客随后也因为无法忍受超长的等待时间而离开;
2.在响应时间还没有到达用户可忍受的最大限度前,有可能已经出现了用户请求的失败。以理发店模型为例,如果理发店只能容纳6位顾客,那么当7位顾客同时来到理发店时,虽然我们可以知道所有顾客都能在可容忍的时间内剪完头发,但是因为理发店容量有限,最终只好有一位顾客打道回府,改天再来。
对于一个系统来说,我们应该 确保系统的最大并发用户数要大于系统需要承受的峰值负载。
理发店模型的进一步扩展
扩展场景1:有些顾客已经是理发店的老顾客,他们和理发师已经非常熟悉,理发师可以不用花费太多时间沟通就知道这位顾客的想法。并且理发师对这位顾客的脑袋的形状也很熟悉,所以可以更快的完成一次理发的工作。缓存、cookie
扩展场景2:理发店并不是只有剪发一种业务,还提供了烫发染发之类的业务,那么当顾客提出新的要求时,理发师服务一位顾客的时间可能会超过标准的1小时。而且这时如果要计算每位顾客的等待时间就变得复杂了很多,有些顾客的排队时间会比原来预计的延长,并最终导致他们因为无法忍受而离开。
扩展场景3:随着烫发和染发业务的增加,理发师们决定分工,两位专门剪发,一位专门负责烫发和染发。想到了设计模式中的职责单一原则
扩展场景4:理发店的生意越来越好,理发师的数量和理发店的门面已经无法满足顾客的要求,于是理发店的老板决定在旁边再开一家店,并招聘一些工作能力更强的理发师。增加服务器,增加CPU
扩展场景5:理发店的生意变得极为火爆了,两家店都无法满足顾客数量增长的需求,并且有些顾客开始反映到理发店的路途太远,到了以后又因为烫发和染发的人太多而等太久。可是理发店的老板也明白烫发和染发的收入要远远高于剪发阿,于是他脑筋一转,决定继续改变策略,在附近的几个大型小区租用小的铺面开设分店,专职剪发业务;再在市区的繁华路段开设旗舰店,专门为烫发、染发的顾客,以及VIP顾客服务。并增设800电话,当顾客想要剪发时,可以拨打这个电话,并由服务人员根据顾客的居住地点,将其指引到距离最近的一家分店去。系统架构,还想到了数据库中添加索引进行优化
性能指标术语&理发店模型的更多相关文章
- AMQP技术术语
什么是AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基 ...
- 接口性能测试方案 白皮书 V1.0
一. 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间.响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网 ...
- pyhanlp文本分类与情感分析
语料库 本文语料库特指文本分类语料库,对应IDataSet接口.而文本分类语料库包含两个概念:文档和类目.一个文档只属于一个类目,一个类目可能含有多个文档.比如搜狗文本分类语料库迷你版.zip,下载前 ...
- ASP.NET MVC 5 05 - 视图
PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...
- 通过一组RESTful API暴露CQRS系统功能
命令和查询责任分离(CQRS)是由Greg Young提出的一种将系统的读(查询).写(命令)操作分离为两种独立子系统的架构模式.命令通常是异步执行的,并存储在一个事务型数据库中,而读操作则通常是最终 ...
- 用户视角 vs 系统视角 看性能
如何评价性能的优劣: 用户视角 vs. 系统视角 对于最终用户(End-User)来说,评价系统的性能好坏只有一个字——“快”.最终用户并不需要关心系统当前的状态——即使系统这时正在处理着成千上万的请 ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- 国际制造执行系统(MES)应用与发展
某些专家认为,当今制造业的生存三要素是信息技术(IT).供应链管理(SCM)和成批制造技术.使用信息技术就是由依赖人工的作业方式转变为作业的快速化.高效化,大量减少人工介入,降低生产经营成本:供应链管 ...
- 成为一个PHP专家:缺失的环节
这一篇文章是“Becoming a PHP Professional”系列 4 篇博文中的第 1 篇. 当浏览各类与PHP相关的博客时,比如Quora上的问题,谷歌群组,简讯和杂志,我经常注意到技能的 ...
随机推荐
- 【BZOJ4819】新生舞会(分数规划,网络流)
[BZOJ4819]新生舞会(分数规划,网络流) 题面 BZOJ Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买 ...
- 设计模式--建造者模式C++实现
建造者模式C++实现 1定义 将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示 注:在模板方法中,实现了父类调用子类方法的功能,且,通过钩子实现了方法的选择性调用.但是其中整体 ...
- p标签多行文字内容实现上下垂直居中兼容ie8
之前实现上下居中一般都是用height和line-height的来设置. 今天在修改样式的时候,p标签的文字内容可能是一行也可能是两行, 所以用height和line-height就没效果. 今天找到 ...
- 二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)
1.概述 作用:用于取得局域网或Internet环境中的主机名和IP地址. 2.包的组成 1).get_host_name作用:用于取得指定IP地址所对应的主机名语法:utl_inaddr.get_h ...
- C++内存分配与对象构造的分离
在C++中,我们基本用new(delete)操作符分配(释放)内存.new操作符为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类 ...
- avr 烧录失败
用Atmel studio 6.0 配置mkII烧录器 使用上位机bat程序烧录 提示错误:firmware is old... 1参考(关于FUSe setting) http://www.cnbl ...
- Miscosoft Visual Studio项目guid取值
There isn't an easy way to change the type of a project in Visual Studio project once it is created; ...
- Jmter操作数据库
1.导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql,如下操作: 2.创建数据库连接如下: 3.配置mysql的url.端口号.账号. ...
- Linux运维-Rsync+Inotify
Rsync+Inotify Rsync:linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. 特性: 可 ...
- webpack 实现自动刷新,复制文件,实现开发环境和发布环境
webpack例子:https://github.com/Aquarius1993/webpackDemo 安装: webpack , webpack-dev-server 1.如何在使用webpac ...