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

2020-04-22 17:28:21 +08:00
 raysonlu

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

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

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

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

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

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

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

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

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

并发是指都在过程中还没完成的
qps 一般是统计完成的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX