51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1638|回复: 1
打印 上一主题 下一主题

性能指标之业务指标

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 530 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-11-2 15:32:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    经常在系统的需求书当中看到这样的描述“响应时间在3秒以内”,这类需求让测试人员无从下手,这是在多大的并发用户数下面得到这个结果?在多少存量数据的情况下得到这个结果? 1年、2年?即使随便设置个场景测完了,也不敢出具测试结论。
    业务指标是从用户操作的角度体现出来的,相对于服务指标。服务指标是从系统对外提供服务的角度设定的指标。主要指标有业务类型、业务配比、并发用户数。
    在描述一个系统的性能表现时,我们常常采用三段式的表达方法:业务指标-资源指标-服务指标。
    例如:在处理典型业务AAA与典型业务BBB、二者业务配比为1:3时,当CPU(10C)利用率达到70%时,系统的吞吐量为每秒200笔交易,交易响应时间为80毫秒。
    只有这“业务指标-资源指标-服务指标”三段论都说齐了,才算一个“相对”可参考的性能结论。之所以称之为“相对”是因为,随便改一个参数都可能对性能造成巨大的影响,任何性能结论都是在审慎的态度下给出的。
    一、业务类型
    业务的种类、名称。
    不同业务种类的处理逻辑、处理效率不一样,因此需要明确业务类型。
    二、业务配比
    不同业务在同一个场景中时,单位时间内数量的比例。
    三、并发用户数
    在详细解释并发用户数之前,可能需要分辨一下双方讨论的并发数是“并发用户数”?还是系统并发数?还是在系统中注册的用户数?还是在线用户数?
    我们知道,已登录的用户不一定有操作。
    并发用户数的确定必须和业务场景相结合。需要明确是哪个模块的系统并发数,登陆模块?查询模块?下载模板?这些都是不一样的。如果要看混合场景,需给不同模块操作的用户配比。具体但单个模块的场景,需给出用户的发起频率(这个后面还会介绍),比如5分钟操作一次,还是10秒钟操作一次。
    为什么并发用户数是一个重要的性能指标?
    最重要的原因是并发用户的数量直接影响了用户自身的体验。任何对系统性能的分析、测试、调优都是以用户为圆心的。当并发数多了的时候,用户感受到的响应时间可能会变长甚至服务中断。原因如下:
    当每个用户在服务器端都会有一个进程/线程来提供服务,当并发的用户多了之后,进程/线程的调度开销,CPU上下文切换增多,会影响执行效率。
    当并发的用户多了之后,由于程序的设计原因,可能会多个用户竞争同一个资源,由此产生内存栓锁、数据库锁、信号量等等控制竞争的机制,从用户的角度看到了排队。
    同时,系统中有最大连接/最大session/最大线程数量的限制。当达到最大值后,更多的用户请求不能接待,产生等待或报错。这些最大值的限制,有些是人工设置的结果(例如最大连接/最大session数),有些是系统自身计算的结果(例如最大线程数)。
    对于人工设置的最大值是可以调节的,有时调大会起到不错的效果,但并不是所有情况下调大都有正面的作用。人工设置最大值和系统自身计算最大值本质上是一样的,即系统的资源是有限的,总会有一个天花板。
    以Linux为例,最大线程数是多少是根据系统物理内存数量来计算的(有兴趣可以翻看Linux内核源代码),因为每个线程要开辟一块内存区域给这个线程。
    有时并发用户数越少,性能反而越差
    这种情况出现在用户自己等自己的情况,归根结底还是资源的竞争。

    举例:当系统整体吞吐量相同的时候(每秒10000笔交易),每笔交易修改自身的数据库中的某一个表的固定的一行(例如:账户余额)。
    1)100个并发用户,每个用户每秒100笔交易,那么每个数据库的行锁每秒需要锁定100次。
    2)10个并发用户,每个用户每秒1000笔交易,那么每个数据库的行锁每秒需要锁定1000次,即所谓的热点账户问题。
    四、存量数据
    在数据库或文件系统中,用户已经存储了多少业务数据,比如1年或1000万条等等表达方式。
    存量数据对用户的增删改查性能有非常明显的影响,在数据库中体现更明显。10个数字当中找一个,和10亿个数字当中找一个难度自然不同。
    五、发起频率
    这个指标很少有人关心,但的确对系统性能有些影响。
    5.1      相同吞吐量下不同的发起频率
    举个例子,一秒发起100笔报文,可以有不同的发起频率:
    1)  每10毫秒发起1笔报文
    2)  每100毫秒发起10笔报文
    3)  每1000毫秒发起100笔报文
    这三种发起频率下,系统的吞吐量都是每秒100笔报文,但是系统资源利用率、响应时间等指标会略有差异。
    试想,火车站有一个售票窗口,如果每隔1分钟来一位旅客,那么每位旅客的等待时间就非常短。而如果每小时的整点一次性来60位旅客,那么旅客的平均等待时间就比较长。
    在计算机系统中,到底哪种发起频率会响应时间短,与系统的设计有关。假设应用程序设计为,“每凑齐10笔报文读取并处理一次“,那么采用频率1似乎等待的时间更长。有人会问,会有这种逻辑设计吗,其实在系统性能调优的时候,经常有这样的批量处理原则;比如从MQ队列中每次读取10个报文,MQ每10笔commit一次,SQL语句每10笔commit一次,网络中的delayACK(凑齐一个window的数据包再一次性回复ACK)。
    上面说到了对响应时间的影响,其实发起频率对系统资源消耗也同样存在影响。频率1中,系统只启动一个进程就可以处理,而频率3中,一次性达到100笔报文,应用读取中间件队列的深度后发现一次性的来了100个报文,则决定启动20个进程并发处理,很快处理完成后,这些进程基本都被销毁,只留下1个值班的进程。那么在这个大量创建进程、销毁进程的过程中,CPU消耗是非常大的。
    总之,在计算机系统中,到底哪种发起频率会响应时间短,系统消耗少,是与系统的设计有关,不能一概而论,唯有实测才最准确。
    5.2      不同吞吐量下不同的发起频率
    这个概念比较好理解,一个用户每分钟发起1次请求和10次请求,那么这个用户的发起频率是不同的,同时也影响了吞吐量的不同。
    对于页面形式的性能测试,在需求书中经常可以看到如下的需求:
    “在并发用户数为100的时候,响应时间为3秒以内”
    从业务指标的角度,这里缺少了一个要素,就是用户发起频率。每个用户是每秒发起1次请求还是10次请求?
    如果不描述这个发起频率,则需要从系统的角度补充吞吐量指标。
    关注发起频率的另一个目的是验证服务端是否达到了吞吐量极限。
    系统的吞吐量没有达到预想的数值,需要首先分析:
    1)  是用户没有发出来这么大压力?
    2)  用户压力足够,但系统不能完全处理
    因此,发起频率不但要关注,并且要可以稳定的压出。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 19:45 , Processed in 0.063415 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表