QPS/TPS的含义及实例

基本概念

先了解下基本概念

QPS

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

每秒查询率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

TPS

TPS:Transactions Per Second的缩写,也就是事务数/秒,这个完整的事务包括了用户请求服务器,服务器内部处理,服务器返回信息给用户三个过程。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息来估计得分。客户机使用加权协函数平均方法来计算客户机的得分,测试软件就是利用客户机的这些信息使用加权协函数平均方法来计算服务器端的整体TPS得分。

区别和联系

Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。

例如:访问一个页面会请求服务器3次,一次访问,产生一个“T”,产生3个“Q”

以上内容摘自QPS和TPS理解,区别和计算方法

实战统计

来看下目前笔者公司电商项目的QPS
有秒杀活动时候单台服务器的全天接口请求数量:467887
按照上述计算QPS的规则
( 467887 0.8 ) / (86400 0.2 ) = 21.66 (QPS)

那么秒杀究竟看的是什么指标?上述看到的是一整天的平均QPS
秒杀活动,可能活动持续10秒,但是商品太少1秒内就抢光了,那么在这个秒杀活动的并发量集中发生和提现在了头1秒,其余的9秒也有qps,但远不及头1秒爆发给系统所带来的冲击大,但最后运营统计的话,他统计的是10秒的量,比如这10秒总共是10w的量,那么就是能够承受10w的并发系统,虽然可能头1秒就承担了6w的qps。

如何得到请求最高峰时期的QPS,可使用命令统计access日志

1
zcat access.2018-09-21.log.gz | grep 'url=[a-zA-Z0-9&%_./-~-]*.[html|json]' | awk -F '###' '{print $(3)}' | sort | uniq -c | sort -n -r | head -5
  1. 其中 grep ‘url=’是为了过滤js,css等请求
  2. awk -F ‘###’ 的作用是笔者的日志文件的分隔符为###,以此切分
  3. {print $(3)} 切分之后 输出第三个位置 这个位置笔者的为时间
  4. head -5 拿出前5条

输出数据如下:

440 requestTime=[21/Sep/2018:21:00:14 +0800]
394 requestTime=[21/Sep/2018:21:00:07 +0800]
381 requestTime=[21/Sep/2018:21:00:18 +0800]
379 requestTime=[21/Sep/2018:21:00:22 +0800]
379 requestTime=[21/Sep/2018:21:00:10 +0800]

可以发现秒杀高峰单台服务器每秒的QPS达到440
分析这一秒钟的请求 大部分为请求redis的限流请求,试想如果没有合理的限流机制,全部落到controller处理,最终转到库的压力,严重会导致服务宕机不可用。

如何实现秒杀限流呢?可以参照笔者的另一篇文章最简单有效的秒杀限流

后面会分析tomcat线程池,Nginx如何实现负载均衡等 敬请期待

本文为lemon原创文章
著作权归原作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

lemon wechat
欢迎大家关注我的订阅号 SeeMoonUp
写的不错?鼓励一下?不差钱?