QPS,平均时延和并发数

news2024/12/25 9:32:09

我们当前有两个服务A和B,想要知道哪个服务的性能更好,该用什么指标来衡量呢?

1. 单次请求时延

一种最简单的方法就是使用同一请求体同时请求两个服务,性能越好的服务时延越短,即
R T = 返回结果的时刻 − 发送请求的时刻 RT=返回结果的时刻-发送请求的时刻 RT=返回结果的时刻发送请求的时刻
单次请求有一个小问题:时延波动太大。请求过程会有网络波动导致的时延,系统调导致的时延波动,如果只看一次请求的结果很明显时不合理的。

2. 多次请求的平均时延

我们可以发送多个请求体,然后计算平均时延。一种很简单的方式就是定时发送,例如每个1秒发送一次请求,连需发送1小时就可以得到3600次返回的结果,最后求平均值
R T = a v g ( 返回结果的时刻 − 发送请求的时刻 ) RT=avg(返回结果的时刻-发送请求的时刻) RT=avg(返回结果的时刻发送请求的时刻)
通过求平均的方式可以将各种扰动因素保持一致。通常来说我们有各种各样的请求,每条请求处理的时间差异也非常大,所以我们通常会使用平均时延。

reqreq1req2req3req4req5req6req7req8req9req10
rt10ms20ms30ms10ms1ms5ms15ms50ms10ms25ms

a v g ( r t ) = ( 10 + 20 + 30 + 10 + 1 + 5 + 15 + 50 + 10 + 25 ) / 10 avg (rt)=(10+20+30+10+1+5+15+50+10+25) / 10 avg(rt)=(10+20+30+10+1+5+15+50+10+25)/10

3. 并发数

一个小问题是单条请求并不能彻底激发服务的性能,例如A服务只有一个CPU,B服务有10个CPU,很明显B服务性能应该更好,但是由于每次只处理一条请求,导致B服务处理的时候也只使用了一个CPU,其他9个CPU都是空闲的。
如果我们一次发送10条请求呢?A服务只有一个CPU,只能一条一条处理,B服务有10个CPU,一下子就能处理10条请求。假如处理一条请求的平均时延是50ms,A服务处理10条请求就是 10 × 50 m s = 500 m s 10 \times 50ms = 500ms 10×50ms=500ms,而B服务呢?一下子就可以处理10条请求,耗时就是50ms。很明显B服务的性能更好。
服务能同时处理的请求数我们称之为并发数。理论上讲,A只有一个cpu,所以同一时刻只能处理1个请求,而b有10个cpu,同一时刻可以处理10个请求。有一点要注意,我们总共有100个cpu,但是也可以只使用10个cpu,甚至我们可以动态的调整我们使用的cpu个数。

测试的时候我们也会设置一个并发数,这个是客户端并发请求的数量,而不是服务端并发处理的数量,通过调整客户端的并发数,来估计服务端的并发能力。

并发数与cpu的核数,已经使用cpu使用率相关。cpu的核数决定了最多可以同时处理多少条请求,cpu的使用率则表明当前cpu处理请求的时间占比。例如第一个cpu,只有30%的时间在处理请求,第三个cpu则100%的时间都在处理请求。如果平均来看
使用率 = 0.3 + 0.6 + 1 + 0 4 = 47.5 % 使用率=\frac{0.3+0.6+1+0}{4}=47.5\% 使用率=40.3+0.6+1+0=47.5%

比较好理解,30%的利用率相当于使用了0.3个核,60%的利用率使用了0.6个核,100%的利用率则使用了1个核,所以总共使用了 0.3 + 0.6 + 1 + 0 = 1.9 0.3+0.6+1+0=1.9 0.3+0.6+1+0=1.9个核,总共有4个核,所以使用率就是1.9/4=47.5%,我们可以认为
并发数 = cpu核数 × cpu利用率 并发数=\text{cpu核数} \times \text{cpu利用率} 并发数=cpu核数×cpu利用率
在这里插入图片描述

4. QPS

假如a服务有1个型号为i7的cpu,处理每条请求的时延是10ms,那么1s内就可以处理100条请求,b服务有10个型号为i3的cpu,每个cpu处理一条请求的时延是100ms,那么b服务每个cpu在1s内能处理10个请求,10个cpu并行的话,1s就可以处理100个请求。对于客户端来说,a服务和b服务1s内处理的请求数量是一样多的,所以认为他们的性能也是一样的。

认为cpu型号,个数不同不能对比?对于客户端(老板)来说无所谓的,反正我就给那么多钱让你搭建服务,你可以买1个性能强劲的i7,也可以买多个性能弱鸡的i3。只要能支持足够的访问就可以了。性价比是我们后续优化要考虑的。

我们假设服务的并发数是n,即同时可以处理n条请求,单并发处理每一条请求的时延是rt,那么1s就可以处理的请求数为
1 s 处理请求数 = 1 单并发 R T × 并发数 1s处理请求数=\frac{1}{单并发 RT} \times 并发数 1s处理请求数=单并发RT1×并发数
1s内处理的请求数我们称之为QPS,根据上面并发数与cpu使用率的关系可知
Q P S = 1 s 单并发 RT × cpu核数 × cpu利用率 QPS=\frac{1s}{\text{单并发 RT}} \times \text{cpu核数} \times \text{cpu利用率} QPS=单并发 RT1s×cpu核数×cpu利用率

qps越高说明有限的时间内可以处理更多的请求,服务的性能也就越好。

5. 例子

再举几个小例子来说明这个公式,假设cpu的使用率都是100%

  • 服务a有3个核,处理一条请求的平均时延是50ms,qps=3/0.05=60
  • 服务b有4个核,qps是80,平均时延就是rt=4/80=50ms
  • 服务c的qps是80,平均时延是100ms,并发数就是80*0.1=8
  • 服务d的并发数是2,平均时延是10s,那么qps就是2/10=0.2,也就是说1s只能处理0.2个请求,处理一个请求就需要5秒。

6. 小困惑

一开始我们想要比较两个服务的时延来估计出哪个服务的性能更好,后来得到了时延与QPS的关系,QPS越高服务性能也就越好。实际生产中有高峰低谷,高峰期QPS可能是500,低峰期的QPS可能只有100,同一个服务为什么QPS为什么会不相同呢?
其实这是因为请求量不同导致的QPS变化,例如满负载的情况下一个服务的QPS=50,也就是说1s内最多只能处理50条请求,如果有5个核,那么每个核1s可以处理10条请求,每条请求耗时100ms。
在这里插入图片描述

但是如果这1s内只有15个请求呢?那其实只需要1.5个核就可以处理完成了。cpu利用率为1.5/5=30%,所以
Q P S = 1 0.1 × 5 × 0.3 = 15 QPS=\frac{1}{0.1} \times 5 \times 0.3=15 QPS=0.11×5×0.3=15
在这里插入图片描述
我们发现单并发时延并没有变化,但是cpu的使用率变了,所以qps也发生了变化。因此我们优化性能后,要在同cpu负载率的情况下比较QPS才行。


服务端性能优化–最大QPS推算及验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1809128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对猫毛过敏?怎么有效的缓解过敏症状,宠物空气净化器有用吗?

猫过敏是一种常见的过敏反应,由猫的皮屑、唾液或尿液中的蛋白质引起。这些蛋白质被称为过敏原,它们可以通过空气传播,被人体吸入后,会触发免疫系统的过度反应。猫过敏是宠物过敏中最常见的类型之一,对许多人来说&#…

C语言学习系列:初识C语言

前言,C语言是什么 语言,比如中文、英语、法语、德语等,是人与人交流的工具。 C语言也是语言,不过是一种特殊的语言,是人与计算机交流的工具。 为什么叫C语言呢? 这就要从C语言的历史说起了。 一&#…

11. MySQL 备份、恢复

文章目录 【 1. MySQL 备份类型 】【 2. 备份数据库 mysqldump 】2.1 备份单个数据表2.2 备份多个数据库2.3 备份所有数据库2.4 备份文件解析 【 3. 恢复数据库 mysql 】【 4. 导出表数据 OUTFILE 】【 5. 恢复表数据 INFILE 】 问题背景 尽管采取了一些管理措施来保证数据库的…

14. RTCP 协议

RTCP 协议概述 RTCP(Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP),实时传输控制协议,是实时传输协议(RTP)的一个姐妹协议。 注:RTP 协议和 RTP 控制协议&#…

Oracle数据库连接并访问Microsoft SQL Server数据库

Oracle数据库连接并访问Microsoft SQL Server数据库 说明:  1.实际开发中,Oracle数据库与SQLServer数据库之间可能需要相互进行访问,方便业务数据抽取,编写视图及表等操作。  2.SQLServer访问Oracle数据库配置相对较为简单&…

Python数据分析与机器学习在电子商务推荐系统中的应用

文章目录 📑引言一、推荐系统的类型二、数据收集与预处理2.1 数据收集2.2 数据预处理 三、基于内容的推荐3.1 特征提取3.2 计算相似度3.3 推荐物品 四、协同过滤推荐4.1 基于用户的协同过滤4.2 基于物品的协同过滤 五、混合推荐与评估推荐系统5.1 结合推荐结果5.2 评…

抓包工具 HttpAnalyzerFull_V7.6.4 的下载、安装、使用

目录 一、简介二、下载和安装三、如何注册四、使用介绍4.1 开始、停止、清空监控内容4.2 筛选监控内容4.3 监控内容显示 一、简介 Http Analyzer 是一款功能强大的数据包分析工具,它可以实时监控服务器返回的消息,支持64位Windows系统,可以同…

go语言后端开发学习(三)——基于validator包实现接口校验

前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的,它就是如何进行入参校验,在gin框架的博客中我就介绍过一些常见的参数校验,大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证,而这个其实也不是能够完全应对我…

MYSQL 索引下推 45讲

刘老师群里,看到一位小友 问<MYSQL 45讲>林晓斌的回答 大意是一个组合索引 (a,b,c) 条件 a > 5 and a <10 and b123, 这样的情况下是如何? 林老师给的回答是 A>5 ,然后下推B123 小友 问 "为什么不是先 进行范围查询,然后在索引下推 b123?" 然后就…

python数据分析-Matplotlib绘图实例以及金融数据分析应用

通过学习扩展库matplotlib及背后的理论知识进行数据分析和可视化&#xff0c;重点以案例分析为主&#xff0c;通过实际案例演示相关理论和Python语言的应用。 读取文件countries-aggregated.csv数据&#xff0c;其中Date&#xff1a;日期, Country&#xff1a;国家, Confirmed…

格式化后硬盘数据能恢复吗?硬盘数据恢复这样做!

硬盘是电脑中必备的数据存储设备&#xff0c;另外还有移动硬盘。移动硬盘存储空间非常大、性价比高、便于携带&#xff0c;给我们带来和很多便利。但是和其他存储设备一样&#xff0c;各种硬盘也会出现各种问题&#xff0c;比如常见的格式化硬盘导致数据丢失的问题。 怎么样恢复…

【Linux系统化学习】网络层——IP协议

目录 IP协议 协议头格式 两个问题 网段划分 IP地址的分类 CIDR网段划分&#xff08;无分类编址&#xff09; 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 路由表的查询 IP协议 应用层、运输层上两层协议我们只考虑的是通信的双方对应层&#xff0c;…

MQ解决的问题

系统中MQ能解决哪些问题&#xff1f; 1.不同语言的程序使用MQ通信 2.分布式&#xff0c;微服务&#xff0c;之间的通信&#xff0c;实现服务质检解耦 3.高并发实现销峰作用 4.实现异步&#xff0c;提高用户体验。

Java的自动装箱和自动拆箱

自动装箱和拆箱在Java开发中的应用与注意事项 在Java开发中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Unboxing&#xff09;是指基本数据类型与其对应的包装类之间的自动转换。这些特性可以使代码更加简洁和易读&#xff0c;但在实际项目…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的&#xff0c;关注过程&#xff08;分析求解问题的步骤&#xff09; 例如&#xff1a;外卖&#xff0c;关注点菜&#xff0c;接单&#xff0c;送单等 C是面向对象的&#xff0c;关注对象&#xff0c;把一件事拆分成不同的对象&…

机器学习笔记——支持向量机

支持向量机 参数模型对分布需要假设&#xff08;这也是与非参数模型的区别之一&#xff09;间隔最大化&#xff0c;形式转化为凸二次规划问题 最大化间隔 间隔最大化是意思&#xff1a;对训练集有着充分大的确信度来分类训练数据&#xff0c;最难以分的点也有足够大的信度将…

-31-()

在终端运行时消除输入空格对程序的影响可以使用{在scanf后加“getchar()”或者在scanf&#xff08;“空格%d”,&a&#xff09;} 按位与和移位操作符只能用于整数且都要转位二进制后进行相应操作 不创建临时变量&#xff0c;实现两个数的交换&#xff1a;1——使用加减法&…

插卡式仪器模块:数据记录模块(插卡式)

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22输入阻抗电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测量…

【最新鸿蒙应用开发】——类Web开发范式1——生命周期

兼容JS的类Web开发范式 类Web命令式开发的生命周期 1. 应用生命周期 1.1. app.js 每个应用可以在app.js自定义应用级生命周期的实现逻辑&#xff0c;包括&#xff1a; onCreate&#xff1a;在应用生成时被调用的生命周期函数。 onDestroy&#xff1a;在应用销毁时被调用的生…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …