V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
raysonlu
V2EX  ›  程序员

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

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

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

    我目前了解到,针对网站的项目,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   ·   实用小工具   ·   5192 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:35 · PVG 17:35 · LAX 01:35 · JFK 04:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.