关于网站的 QPS、TPS 和并发量,在项目中实际上是如何统计的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
raysonlu
V2EX    程序员

关于网站的 QPS、TPS 和并发量,在项目中实际上是如何统计的?

  •  
  •   raysonlu 2020-04-22 17:28:21 +08:00 5175 次点击
    这是一个创建于 1997 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上搜这些关键字,一大堆都是概念、例子、公式,但从来没有一个根据实际情况说明的,小白我非常疑惑,还请大佬指教。

    我目前了解到,针对网站的项目,QPS 是指每秒处理多少个请求,TPS 是指每秒能处理多少个事务(可理解为打开一个页面是一个事务,一个页面存在多个请求)

    1 、首先这里的概念就存在模糊,既然 QPS 、TPS 是指标,那么这个指标的数值应该是有个单位,但这两个指标是什么单位?有的说法我理解为是“个”,但也有说是一个百分比?
    2 、按照我对概念的理解,网站应该更加关注 QPS 吧,一个网站的操作如此复杂,如何定义 TPS 里面的“事务”?
    3 、并发量这个指标更加奇怪,一定时间内处理请求的数目,这个不是跟 QPS 的概念没太大出入?

    对这些概念跌跌碰碰模糊理解个大概后,就剩下一脸懵逼了,如何计算?
    比如一个前后端分离的网站,就统计后端接口吧,如何统计?手头的材料估计就只有一份巨大的访问日志,也可以设立一些统计的计数器,但究竟如何利用这些材料计算,我发现没有人分享这一部分,难道这是不可公开秘籍?

    烦恼的小白向大佬请教了~~~~

    19 条回复    2020-04-23 15:04:38 +08:00
    gz911122
        1
    gz911122  
       2020-04-22 17:38:05 +08:00
    s 就是单位啊 second 秒
    gz911122
        2
    gz911122  
       2020-04-22 17:39:01 +08:00
    具体到怎么统计, 比如 skywalking 啊,等等之类的都支持的
    gz911122
        3
    gz911122  
       2020-04-22 17:40:12 +08:00
    手动打点也是可以的啊, 最简单的例子,

    每次请求记录请求的 path,时间戳,入库

    统计的时候按指定的世界间隔聚合,不就出来了....
    gz911122
        4
    gz911122  
       2020-04-22 17:40:25 +08:00
    @gz911122 #3 世界 => 时间
    guyeu
        5
    guyeu  
       2020-04-22 17:41:27 +08:00
    tps 每秒处理事务数量
    qps 每秒查询数量
    在很多场景可以混用,单位是个,你说的百分比大概是 90%的事务处理时间小于 x 秒这种。。。
    基本上 web 应用里这个事务会被定义成处理请求并返回响应这个过程;
    并发量是另一个定义了 : QPS ( TPS )= 并发数 /平均响应时间
    raysonlu
        6
    raysonlu  
    OP
       2020-04-22 17:43:19 +08:00
    @gz911122 我比较想知道是怎样统计的,这些软件统计也是按照设定的方法来统计吧
    guyeu
        7
    guyeu  
       2020-04-22 17:43:35 +08:00
    统计并不是什么不可公开的秘籍。。也有开源组件例如 micrometer 、prometheus 之类的用来收集 /展示,这方面的文章也很多。。。基本原理就是埋点记录。。。
    Jooooooooo
        8
    Jooooooooo  
       2020-04-22 17:44:03 +08:00
    看一分钟请求量然后除以 60 可以作为 QPS
    raysonlu
        9
    raysonlu  
    OP
       2020-04-22 17:44:41 +08:00
    @guyeu 那如果我想得到并发数,也是要得到 QPS 和平均响应时间,这些又怎样得到呢?
    raysonlu
        10
    raysonlu  
    OP
       2020-04-22 17:45:35 +08:00
    @Jooooooooo 直接在 access.log 统计?
    raysonlu
        11
    raysonlu  
    OP
       2020-04-22 17:47:04 +08:00
    @Jooooooooo 如果是#10 那样,那么所谓的“平均响应时间”又是怎样统计?
    guyeu
        12
    guyeu  
       2020-04-22 18:05:53 +08:00
    @raysonlu #11 一般是在代码里埋桩,你非得分析日志那就分析吧。。。统计方式就是在发出请求的时候记录一下时间,收到响应的时候记录一下时间,差值就是这次的响应时间,请求一万次的和除以一万就是这一万次的平均响应时间。有一大堆工具用来做这个事情,自己实现也很简单,我觉得你只要动动脑子是能自己想明白怎么写这些代码的。。
    monsterxx03
        13
    monsterxx03  
       2020-04-22 18:08:33 +08:00
    收集数据一般分两种 push & pull

    push 在代码里打点,通过 statsd 一类的协议,把数据点主动发送到收集数据的 agent, eg: datadog, graphite.

    pull 也是在代码里打点, 程序暴露一个 http endpoint, 比如 /metrics, 然后监控系统主动轮循这个地址, 把数据拉下来记录, eg: prometheus

    程序里打点的用到的 sdk 会用到的数据类型一般会分成 Counter, Gauge, Histogram 等,建议你写个最简单的程序集成下 prometheus 的 sdk, 然后用本地跑个 prometheus 实现下统计 qps 就有感觉了.

    直接统计 access.log 这种也会有, 一般是一些现成的程序不好改代码埋点, prometheus 里把这类辅助导出 metrics 的程序叫 exporter, 比如: https://github.com/fstab/grok_exporter
    Jooooooooo
        14
    Jooooooooo  
       2020-04-22 19:10:51 +08:00
    @raysonlu 高峰期统计请求相应平均值, 拿一小时的数据一般就够了.

    统计的话一般都有组件支持的, 捞 log 的方案有点太原始了.
    sleepm
        15
    sleepm  
       2020-04-23 01:26:33 +08:00 via Android
    ab 命令测并发,响应时间
    phpmyadmin 状态也可以查看 mysql 服务器相关指标
    raysonlu
        16
    raysonlu  
    OP
       2020-04-23 09:36:15 +08:00
    @monsterxx03 谢谢大佬介绍这么多工具,想了解一下做这个工作一般是什么岗位,或者是如何分类的?运维?测试?技术经理?我家庙比较小,目前这类工作都是自己一脚踢,但自身是码农出身,没进过大庙,最重要是找不到相关的活跃圈子,在处理这类工作或者问题,只能是依据仅限的基础知识去谷歌、论坛进行摸爬滚跌,显得相当被动。。。
    raysonlu
        17
    raysonlu  
    OP
       2020-04-23 09:39:44 +08:00
    @guyeu @Jooooooooo 感谢指点,我还真的是要对一个上线的项目进行一个过去的评估,只有 log 了,有工具帮我统计当然更加好我后期都考虑接入,不过感觉理解清楚原理也是比较重要,毕竟以后可能遇到各种情况下进行这些评估量测工作。
    Heap
        18
    Heap  
       2020-04-23 14:17:49 +08:00
    使用 loadrunner 压测软件对核心业务接口(评估那些接口可能存在高并发)进行进行压测:
    1 、观察服务器硬件信息
    2 、观察应用输出日志有没异常
    3 、也观察数据库有没有死锁
    4 、压测前造好相关业务数据
    julyclyde
        19
    julyclyde  
       2020-04-23 15:04:38 +08:00
    在哪儿看到的还有百分比的???

    并发是指都在过程中还没完成的
    qps 一般是统计完成的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5947 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 06:10 PVG 14:10 LAX 23:10 JFK 02:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86