QPS,平均时延和并发数
我们当前有两个服务A和B,想要知道哪个服务的性能更好,该用什么指标来衡量呢?
1. 单次请求时延
一种最简单的方法就是使用同一请求体同时请求两个服务,性能越好的服务时延越短,即
R T = 返回结果的时刻 − 发送请求的时刻 RT=返回结果的时刻-发送请求的时刻 RT=返回结果的时刻−发送请求的时刻
单次请求有一个小问题:时延波动太大。请求过程会有网络波动导致的时延,系统调导致的时延波动,如果只看一次请求的结果很明显时不合理的。
2. 多次请求的平均时延
我们可以发送多个请求体,然后计算平均时延。一种很简单的方式就是定时发送,例如每个1秒发送一次请求,连需发送1小时就可以得到3600次返回的结果,最后求平均值
R T = a v g ( 返回结果的时刻 − 发送请求的时刻 ) RT=avg(返回结果的时刻-发送请求的时刻) RT=avg(返回结果的时刻−发送请求的时刻)
通过求平均的方式可以将各种扰动因素保持一致。通常来说我们有各种各样的请求,每条请求处理的时间差异也非常大,所以我们通常会使用平均时延。
req | req1 | req2 | req3 | req4 | req5 | req6 | req7 | req8 | req9 | req10 |
---|---|---|---|---|---|---|---|---|---|---|
rt | 10ms | 20ms | 30ms | 10ms | 1ms | 5ms | 15ms | 50ms | 10ms | 25ms |
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推算及验证
相关文章:
QPS,平均时延和并发数
我们当前有两个服务A和B,想要知道哪个服务的性能更好,该用什么指标来衡量呢? 1. 单次请求时延 一种最简单的方法就是使用同一请求体同时请求两个服务,性能越好的服务时延越短,即 R T 返回结果的时刻 − 发送请求的…...
【Python核心数据结构探秘】:元组与字典的完美协奏曲
文章目录 🚀一、元组⭐1. 元组查询的相关方法❤️2. 坑点🎬3. 修改元组 🌈二、集合⭐1. 集合踩坑❤️2. 集合特点💥无序性💥唯一性 ☔3. 集合(交,并,补)🎬4. …...
Golang | Leetcode Golang题解之第137题只出现一次的数字II
题目: 题解: func singleNumber(nums []int) int {a, b : 0, 0for _, num : range nums {b (b ^ num) &^ aa (a ^ num) &^ b}return b }...
Spring和SpringBoot的特点
1.Spring的特点 1.IOC和AOP是Spring的两大核心特性,即控制反转和依赖注入。 2.松耦合:IOC和AOP两大特性可以尽可能地将对象之间的关系解耦 3.可配置:提供外部化配置的方式,可以灵活地配置容器及容器中的Bean 4.一站式:…...
怎么使用join将数组转为逗号分隔的字符串
在JavaScript中,你可以使用Array.prototype.join()方法将一个数组转换为逗号分隔的字符串。join()方法接受一个可选的参数,该参数指定了数组元素之间的分隔符。如果不提供参数,则默认使用逗号(,)作为分隔符。 下面是一…...
Web前端博客论坛:构建、运营与用户体验的深度解析
Web前端博客论坛:构建、运营与用户体验的深度解析 在数字化浪潮的推动下,Web前端博客论坛成为了广大开发者交流技术、分享经验的重要平台。如何构建一个功能齐全、运营有序的博客论坛,以及如何提升用户体验,是摆在每一位前端开发…...
Java从入门到放弃
线程池的主要作用 线程池的设计主要是为了管理线程,为了让用户不需要再关系线程的创建和销毁,只需要使用线程池中的线程即可。 同时线程池的出现也为性能的提升做出了很多贡献: 降低了资源的消耗:不会频繁的创建、销毁线程&…...
基于51单片机的车辆动态称重系统设计
一 动态称重 所谓动态称重是指通过分析和测量车胎运动中的力,来计算该运动车辆的总重量、轴重、轮重和部分重量数据的过程。动态称重系统按经过车辆行驶的速度划分,可分为低速动态称重系统与高速动态称重系统。因为我国高速公路的限速最高是120,所以高速动态称重系统在理论…...
C语言之常用字符串函数总结、使用和模拟实现
文章目录 目录 一、strlen 的使用和模拟实现 二、strcpy 的使用及模拟实现 三、strcat 的使用和模拟实现 四、strcmp 的使用和模拟实现 五、strncpy 的使用和模拟实现 六、strncat 的使用和模拟实现 七、strncmp 的使用和模拟实现 八、strstr 的使用和模拟实现 九、st…...
【JMeter接口测试工具】第二节.JMeter项目实战(上)【实战篇】
文章目录 前言项目实战零、接口测试流程一、测试数据准备二、接口功能测试三、掌握测试用例编写四、自动化脚本架构搭建总结 前言 零、接口测试流程 1、制定测试计划,分配任务 2、从 API 文档中提取接口清单:对 API 文档简化,提高测试效率,接口清单就是对 API 文档…...
Ansible——fetch模块
目录 参数 示例1:最基本的用法 示例2:指定目标目录和主机名子目录 示例3:flat 参数设置为 yes 示例4:处理源文件不存在的情况 示例5:验证文件校验和 示例 Playbook 1. 拉取远程主机上的 syslog 文件 2. 直接…...
HTTP常见响应状态码
1xx:正在处理中 100 Continue:服务器确认收到了请求的第一部分,并告知客户端继续发送剩余的请求。 101 Switching Protocols:服务器根据客户端的请求,同意切换到另一个协议。 2xx:成功响应 200 OK&#…...
如何制定工程战略
本文介绍了领导者如何有效制定工程战略,包括理解战略核心、如何收集信息并制定可行的策略,以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架(如 OKR…...
认识和使用 Vite 环境变量配置,优化定制化开发体验
Vite 官方中文文档:https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下: {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…...
Java18新特性总结
Java 18作为Java编程语言的一个重要更新,引入了一系列新特性和改进,旨在提高开发者的生产力和程序的性能。以下是Java 18的主要新特性概述: 元编程功能: Java 18引入了元注释和元类型声明的功能,允许开发人员在编译时…...
理解 Java 中的 `final` 关键字
理解 Java 中的 final 关键字 final 关键字是 Java 编程语言中一个重要的修饰符,它可以应用于类、方法和变量。理解 final 的用法和作用对于编写稳健和高效的 Java 代码至关重要。在本文中,我们将深入探讨 final 关键字的各种用法及其意义。 一、final…...
磁盘未格式化:深度解析、恢复方案及预防之道
在当今这个信息化爆炸的时代,磁盘未格式化问题无疑成为了众多用户头疼的难题。当我们的存储设备突然提示“磁盘未格式化”时,数据的丢失与恢复的挑战便摆在了我们面前。本文将深入解析磁盘未格式化的现象、原因,并给出两种有效的数据恢复方案…...
JWT 从入门到精通
什么是 JWT JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案 JSON Web Token Introduction - jwt.ioLearn about JSON Web Tokens, what are they, how they work, when and why you should use them.https://jwt.io/introduction 一、常见会…...
31-捕获异常(NoSuchElementException)
在定位元素的时候,经常会遇到各种异常,遇到异常又该如何处理呢?本篇通过学习selenium的exceptions模块,了解异常发生的原因。 一、发生异常 打开百度搜索首页,定位搜索框,此元素id"kw"。为了故意…...
使用Spring Boot设计对象存储系统
对象存储系统是一种以对象为存储单位的存储架构,适合存储大量非结构化数据,如图片、音视频文件、文档等。MinIO是一个高性能的对象存储系统,基于开源和云原生的设计理念。本文将讨论如何使用Spring Boot设计一个类似MinIO的对象存储系统。 目…...
Apple开发者macOS设备与描述文件Profile创建完整过程
安装并打开Apple Configurator 新建描述文件 输入macOS平台的描述文件的相关信息,然后选择证书 选择一个可用证书 存储描述文件 存储成功如下: 使用文本编辑器打开刚才保存的描述文件,找到设备名与UDID...
SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 概述 1.1 Redis 下载与安装 2.0 Redis 数据类型 3.0 Redis 常见五种类型的命令 3.1 字符串操作命令 3.2 哈希操作命令 3.3 列表操作命令 3.4 集合操作命令 …...
mysql设置允许外部ip访问,局域网IP访问
(支持MYSQL8版本) 1. 登录进入mysql;mysql -uroot -p输入密码进入 2. 输入以下语句,进入mysql库,查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性,…...
mac虚拟光驱工具:Daemon Tools for Mac
Daemon Tools for Mac是一款功能强大的虚拟光驱工具,它为用户提供了在Mac上模拟物理光驱的能力,从而方便用户处理各种光盘映像文件。以下是关于Daemon Tools for Mac的详细介绍: 守护进程工具:Daemon Tools不仅是一个简单的虚拟光…...
软考 系统架构设计师系列知识点之杂项集萃(32)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(31) 第51题 网络逻辑结构设计的内容不包括( )。 A. 逻辑网络设计图 B. IP地址方案 C. 具体的软硬件、广域网连接和基本服务 D. 用户培训计划 正确答案&am…...
Web--CSS基础
文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中,作用于当前标签 <img src "/imges/logo.jpg" alt "" style "width 400"…...
服务部署:Linux系统部署C# .NET项目
1. 安装 .NET SDK 首先,你需要在你的 Linux 系统上安装 .NET SDK。 Ubuntu系统: 下载 Microsoft 包配置文件 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb 这个命令使用 wge…...
【机器学习】基于卷积LSTM的视频预测
1. 引言 1.1 LSTM是什么 LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN)变体,旨在解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。LSTM通过引入门控机制和细胞状态的概念,使得…...
细说wayland和X11
文章目录 协议介绍协议区别开发差异 Wayland和X11都是用于Linux和其他类Unix系统的显示服务器协议。它们负责在用户和应用程序之间的交互中管理屏幕的输出以及输入设备的输入。 协议介绍 X11通常称为X Window System,是一个历史悠久的显示服务器,自1987…...
数据结构:二叉树的实现
目录 二叉树的遍历方式 前序遍历: 中序遍历: 后序遍历: 二叉树的基本结构和功能 基本结构: 基本功能: 二叉树功能的实现思路 二叉树功能的实现 1、构建一个二叉树 2、二叉树的销毁 3、计算二叉树里的节点个数 4、得…...
做网站怎样投放广告/360优化大师最新版的功能
内部类访问特点: 1.内部类可以直接访问外部类中的成员。 2.外部类要访问内部类,必须建立内部类的对象。 一般用于类的设计: 分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。 这时就是还有…...
查看网站开通时间/百度投诉中心24人工客服
一、gulp是什么? 前端自动化打包构建工具; 打包:把文件压缩,整合,移动,混淆 基于流的打包构建工具; webpack:基于js文件的打包构建工具 全局依赖环境 gulp 一台电脑安装一次,以…...
信息最全的网站/内容营销策略有哪些
看以下例子: select * from ( select * from b left join c on xxxx left join d on xxxx left join e on xxxx) as a where a.xxxx 由于a是一个很复杂的东西,关键a是别名出来的。 那这种写法将会非常耗时。 但是如果将select * from b left join …...
计算机应用技术(网站开发)/怎么制作一个网站
测试你的站点 WebMatrix 包含一个 IIS Express, 它的工作方式很像 IIS. 然而, IIS Express是集成在WebMatrix里,在本地计算机上运行,这方便了我们进行本地测试。 有时你需要做的不仅仅是检查网页的外观, 你可能想知道在后台数据交换中发生了…...
WordPress客户端/汕头自动seo
大家好,我是小匠。持续更新电脑配件成本报价。报价表内是行业在售的全新电脑配件。报价表内没有洋垃圾,也没有二手配件,根据列举的型号可放心购买,不会被坑!距离618还有14天,各大厂商都在调整价格备战&…...
手机网站跟PC端网站有啥区别/我要推广网
确定字符串长度int strlen(string str)比较两个字符串1、strcmp函数对两个字符串进行二进制安全的比较,并区分大小写int strcmp(string str1,string str2)2、以不区分大小写的方式比较两个字符串int strcasecmp(string str1,string str2)3、求两个字符串相同部分int…...