zoukankan      html  css  js  c++  java
  • QPS/TPS/PV 之间的关系

    QPS/TPS/PV 之间的关系

    一、一道面试题,引发的思考

    • 面试官:你做过的系统中,用户量是多少?用了多少台服务器进行负载?怎么判断这个系统需要多少台服务器?

    二、概念解读

    • QPS:(Queries Per Second),及每秒执行的查询总数(每秒有多少的请求响应--“每秒查询率”)。

      客户端请求一个地址时,比如百度首页,其实会产生很多的请求,比如js、css、png等,像这样的每个单个请求都可以算作查询次数。若在一秒内,客户端请求服务端的首页,服务端返回了N个内部链接(js、css、png、html等),那么服务端的QPS就为N。

      QPS反映系统的吞吐能力,更偏向于读取文件,查询数据。

    • TPS:(Transactions Per Second),即每秒执行的事务总数--事务数/秒。它是软件测试结果的测量单位。

      首先一个事务包括三个动作,即客户端请求服务端,服务端内部进行处理,服务端对客户端进行响应。将这三个动作看成一个整体,并将之称为一个事务,若在一秒内,服务端可以完成N个事务,则这个服务端的TPS为N。

      一般来说,评价系统的性能主要看系统的TPS,系统的整体性能取决于性能最低模块的TPS值。(木桶的容量取决于最短板)

    • 简易区分QPS/TPS:

      若在一秒内,用户请求了百度首页并看到了首页全貌,这样就形成了一个TPS,但却形成了多个QPS。(1T = 多Q)

      若在一秒内,我们请求一个单调的网页,此网页只有一个html,不包含任何其他内部链接,此时TPS=QPS。

    • RPS:即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS。

    • PV:即 page view,页面浏览量。用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。

    • UV:即 Unique visitor,独立访客。通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。

    • IP:即 Internet Protocol,本意本是指网络协议,在数据统计这块指通过ip的访问量。即同一页面,客户端使用同一个IP访问多次只计算一次,访问量不累计。

    • UV、IP的区别:

      • 比如你是ADSL拨号上网,拨一次号自动分配一个IP,进入了网站,就算一个IP;断线了而没清理Cookies,又拨号一次自动分配一个IP,又进入了同一个网站,又统计到一个IP,这时统计数据里IP就显示统计了2次。UV没有变,是1次。

      • 同一个局域网内2个人,在2台电脑上访问同一个网站,他们的公网IP是相同的。IP就是1,但UV是2。

    • RT:响应时间(reponse time)。

      响应时间是指系统对请求作出响应的时间。直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能,而不同功能的处理逻辑也千差万别,因而不同功能的响应时间也不尽相同,甚至同一功能在不同输入数据的情况下响应时间也不相同。所以,在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有功能的最大响应时间。当然,往往也需要对每个或每组功能讨论其平均响应时间和最大响应时间。
        对于单机的没有并发操作的应用系统而言,人们普遍认为响应时间是一个合理且准确的性能指标。需要指出的是,响应时间的绝对值并不能直接反映软件的性能的高低,软件性能的高低实际上取决于用户对该响应时间的接受程度。对于一个游戏软件来说,响应时间小于100毫秒应该是不错的,响应时间在1秒左右可能属于勉强可以接受,如果响应时间达到3秒就完全难以接受了。而对于编译系统来说,完整编译一个较大规模软件的源代码可能需要几十分钟甚至更长时间,但这些响应时间对于用户来说都是可以接受的。

    • 吞吐量(Throughput) :

      吞吐量是指系统在单位时间内处理请求的数量。对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系,实际上此时吞吐量就是响应时间的倒数。前面已经说过,对于单用户的系统,响应时间(或者系统响应时间和应用延迟时间)可以很好地度量系统的性能,但对于并发系统,通常需要用吞吐量作为性能指标。
        对于一个多用户的系统,如果只有一个用户使用时系统的平均响应时间是t,当有你n个用户使用时,每个用户看到的响应时间通常并不是n×t,而往往比n×t小很多(当然,在某些特殊情况下也可能比n×t大,甚至大很多)。这是因为处理每个请求需要用到很多资源,由于每个请求的处理过程中有许多不走难以并发执行,这导致在具体的一个时间点,所占资源往往并不多。也就是说在处理单个请求时,在每个时间点都可能有许多资源被闲置,当处理多个请求时,如果资源配置合理,每个用户看到的平均响应时间并不随用户数的增加而线性增加。实际上,不同系统的平均响应时间随用户数增加而增长的速度也不大相同,这也是采用吞吐量来度量并发系统的性能的主要原因。一般而言,吞吐量是一个比较通用的指标,两个具有不同用户数和用户使用模式的系统,如果其最大吞吐量基本一致,则可以判断两个系统的处理能力基本一致。

    • 系统吞度量要素:

      一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。

      单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

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

      • QPS(TPS):每秒钟request/事务 数量
      • 并发数: 系统同时处理的request/事务数
      • 响应时间: 一般取平均响应时间
    • TPS与并发数的区别:

      TPS=10,说明1秒系统处理了10个事务,1秒之内处理了两次,每次5个事务,这是并发数为5。

    • 并发用户数:

      并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。与吞吐量相比,并发用户数是一个更直观但也更笼统的性能指标。实际上,并发用户数是一个非常不准确的指标,因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。一网站系统为例,假设用户只有注册后才能使用,但注册用户并不是每时每刻都在使用该网站,因此具体一个时刻只有部分注册用户同时在线,在线用户就在浏览网站时会花很多时间阅读网站上的信息,因而具体一个时刻只有部分在线用户同时向系统发出请求。这样,对于网站系统我们会有三个关于用户数的统计数字:注册用户数、在线用户数和同时发请求用户数。由于注册用户可能长时间不登陆网站,使用注册用户数作为性能指标会造成很大的误差。而在线用户数和同事发请求用户数都可以作为性能指标。相比而言,以在线用户作为性能指标更直观些,而以同时发请求用户数作为性能指标更准确些。

    三、怎样计算

    • QPS = req/sec = 请求数/秒

    • QPS计算PV和机器的方式

      • QPS统计方式 [一般使用 http_load 进行统计]
      • QPS = 总请求数 / ( 进程总数 * 请求时间 )
      • QPS: 单个进程每秒请求服务器的成功次数
    • 单台服务器每天PV计算

      公式1:每天总PV = QPS * 3600 * 6

      公式2:每天总PV = QPS * 3600 * 8

    • 服务器计算

      服务器数量 = ceil( 每天总PV / 单台服务器每天总PV )

    • 峰值QPS和机器计算公式

      原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

      公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

      机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

      • 问:每天300w PV 的在单台机器上,这台机器需要多少QPS?

        ( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

      • 如果一台机器的QPS是58,需要几台机器来支持?

        139 / 58 = 3

    • 举例说明:

      上班签到系统,早上8点上班,7点半到8点的30分钟的时间里用户会登录签到系统进行签到。公司员工为1000人,平均每个员上登录签到系统的时长为5分钟。可以用下面的方法计算。
      QPS = 1000/(30 * 60) 事务/秒
      平均响应时间为 = 5 * 60 秒
      并发数= QPS * 平均响应时间 = 1000/(30 * 60) * (5 * 60)=166.7

    四、Jmeter测试网站QPS(压力测试)

  • 相关阅读:
    三、Java基础工具(1)_常用类——用户和程序交互
    二、Java面向对象(18)_枚举
    二、Java面向对象(17)_内部类
    二、Java面向对象(16)_接口
    二、Java面向对象(15)_模板方法设计模式
    【UWP】解析GB2312、GBK编码网页乱码问题
    【WP8.1】类似“IT之家” 自定义消息 的实现
    【WP8.1】HttpClient网络请求、进度以及终止
    【Win10】SplitView控件
    【WIN10】绑定x:Bind
  • 原文地址:https://www.cnblogs.com/renxiuxing/p/13020376.html
Copyright © 2011-2022 走看看