QPS和并发数,究竟是何种关系?

大家好,我是涛哥。

又是周末,愿大家开心。今天不写复杂文章,来聊点简单有趣的,探讨下QPS(Query Per Second)和并发数的关系。

就我的个人经验而言,很多人在工作中对这两个概念一知半解,也有很多人在面试时回答得模棱两可,不太应该哦。

多年前,在面试阿里巴巴时,遇到了一个开放性问题:

假设超市每分钟有10个人走出来,请估算超市里面有多少人?

是不是感觉手足无措呢?嗯,可能如此。其实,这个问题没有标准答案,关键还是考查思路。

图片

我们先看一个有趣的定律,即Little's Law,如下:

在一个稳定的系统中,设长时间观察到的平均顾客数量为L,长时间观察到的有效到达速率为λ,平均每个顾客在系统中花费的时间是W,则有如下关系式:

L = λW

图片

Little's Law的理解

假设有一水管,横截面积为2平方米,水速为5米/秒,即水的流量速度是10立方米/秒,很显然: 

在长度100米的水管内,水量为200立方米,每滴水从流入到流出,耗时20秒,而水的流量速度是10立方米/秒。

也就是说,在这段水管中:

水量= 耗时 * 流量速度

这就是Little's Law. 虽然很早就意识到了这一关系式,但毕业后才第一次听说Little's Law.

Little's Law的应用

Little's Law模型很通用,因此,在很多场景中都能得到应用,比如工业界和计算机界,都会有意或无意用到该定律。       

先看一个最好懂的例子:大一新生的招收速度是5000人/年,每个学生在大学停留4年,因此,整个大学的人数就是20000.

      

接下来,看看腾讯公司的一道笔试题目,简单但难倒不少人:

某互联网产品(例如,一款网络游戏)同时在线曲线(Average Concurrency Users,ACU)24小时数据如下图所示。

现已知全天平均在线人数为5000人,玩家每次登陆后平均在线时长为2小时。请你估计一下,平均每分钟约有多少玩家登录。

图片

这个题目中的图是多余的,有误导性。很显然,根据Little's Law,答案是42.

QPS和并发数的关系

在后台开发中,经常要涉及到QPS和并发数的概念。在很多场景下都需要进行压力测试,所以,有必要弄清它们之间的关系。

QPS和并发数的概念容易混淆,比如:1秒内并发地来了100个请求,这个100是QPS还是并发数? 来看看它们的含义:

QPS:    请求进入的速度

并发数: 系统中同时存在的请求数

根据Little's Law,我们能得到如下的关系式:

并发数 = QPS * 耗时

以大学招生为例:大一新生的招收速度是5000人/年,每个学生在大学停留4年,整个大学的人数是20000,于是(下面的QPS改为以年为单位):

QPS

耗时

并发数

5000人/年

4年

20000人

以某公司为例:180000员工,必须早上8:30-9:00之间在考勤系统签到,每次签到在系统需要停留0.1秒,于是:

QPS

耗时

并发数

100人/秒

0.1秒

10人

以动物园为例:每秒有1个人进入动物园,每个人在动物园中停留2小时,于是:

QPS

耗时

并发数

1人/秒

2*3600秒

7200人

假设在理想情况下,某系统的请求进入速度是1亿次/秒,系统处理的时间趋近为0,那么这个系统的并发量是多少呢?很显然:

QPS

耗时

并发数

1亿次/秒

趋近0

趋近0次

可见,虽然每秒有1亿次请求,但在某一随机时刻观察系统,会发现系统中不存在请求堆积的问题,系统的并发数趋近0.

这是一个高QPS、低延时系统,是一个很好的系统,轻轻松松地快速处理各种请求,来一个灭一个。

值得一提的是,此时并发数很低,但这不表明系统实际能够承受的并发数很低,它实际上可能承受很高的并发数。

最近,我对某系统进行了压测,得到的数据如下(数据已经脱敏),满足Little's Law:

并发数 = QPS * avg

图片

到此为止,应该清楚了QPS和并发数的关系,以后在开发或压测时,再也不会懵圈了。

周末的早晨,大家也要记得吃早餐哦。我的早餐做好了,你赶快去准备吧

图片

性能测试是一种评估系统或应用程序在不同负载条件下的性能表现的过程。下面是性能测试的50个常见问题及其答案,并附带一些示例: 1. 什么是性能测试? 性能测试是一种评估系统或应用程序在不同负载条件下的性能表现的过程。它旨在确定系统在正常峰值负载下的响应时间、吞吐量、资源利用率等指标。 2. 性能测试的目的是什么? 性能测试的目的是评估系统在不同负载条件下的性能表现,以发现潜在的性能问题并优化系统的性能。 3. 性能测试的类型有哪些? 常见的性能测试类型包括负载测试、压力测试、容量测试、稳定性测试基准测试。 4. 负载测试是什么? 负载测试是模拟实际用户使用系统的情况,通过逐渐增加负载来评估系统在不同负载下的性能表现。 5. 压力测试是什么? 压力测试是通过将系统推向其极限,以评估其在高负载条件下的性能表现稳定性。 6. 容量测试是什么? 容量测试是确定系统在给定硬件软件配置下可以处理的最大负载量。 7. 稳定性测试是什么? 稳定性测试是评估系统在持续负载下的性能表现稳定性,以确定系统是否能够长时间运行而不出现故障。 8. 基准测试是什么? 基准测试是在系统的基准配置下进行的性能测试,用于建立性能指标对比后续测试结果。 9. 性能测试的关键指标有哪些? 常见的性能测试指标包括响应时间、吞吐量、并发用户数、资源利用率错误率等。 10. 什么是响应时间? 响应时间是从用户发送请求到系统返回响应的时间间隔,通常以毫秒为单位。 11. 什么是吞吐量? 吞吐量是系统在单位时间内处理的请求数量,通常以每秒请求数(QPS)或每分钟请求数(TPS)来衡量。 12. 什么是并发用户数? 并发用户数是指同时使用系统的用户数量,它反映了系统在同一时间内处理多少个用户请求。 13. 性能测试中的负载模型有哪些? 常见的负载模型包括均匀负载、递增负载、峰值负载随机负载等。 14. 什么是均匀负载? 均匀负载是指在整个测试过程中保持相对恒定的负载水平。 15. 什么是递增负载? 递增负载是逐渐增加负载水平,以评估系统在不同负载下的性能表现。 16. 什么是峰值负载? 峰值负载是模拟系统在特定时间段内出现高负载的情况,以评估系统在高负载下的性能表现。 17. 什么是随机负载? 随机负载是模拟实际用户行为的随机请求,以更真实地评估系统的性能。 18. 性能测试中的常见工具有哪些? 常见的性能测试工具包括JMeter、LoadRunner、Gatling、ApacheBench等。 19. 性能测试中的数据收集分析如何进行? 数据收集分析可以通过监控系统日志、性能指标监控工具性能测试工具提供的报告来进行。 20. 性能测试中的瓶颈是什么? 瓶颈是指限制系统性能的因素,可能是硬件资源、软件配置、网络带宽或代码实现等。 21. 性能测试中如何发现解决瓶颈? 发现解决瓶颈可以通过性能测试工具的监控分析功能、代码优化系统配置调整等方法来进行。 22. 性能测试的最佳实践有哪些? 性能测试的最佳实践包括制定明确的测试目标、选择适当的负载模型、使用真实的数据、进行持续的监控分析等。 23. 性能测试与质量保证的关系是什么? 性能测试是质量保证过程中的一部分,它旨在确保系统在不同负载条件下的性能符合预期。 24. 性能测试与压力测试有何区别? 性能测试是评估系统在不同负载条件下的性能表现,而压力测试是通过将系统推向其极限来评估其在高负载条件下的性能表现稳定性。 25. 性能测试与安全测试有何关联? 性能测试可以帮助评估系统在攻击或恶意行为下的性能表现,从而提供安全性能方面的参考。 26. 性能测试是否只针对Web应用程序? 性能测试不仅适用于Web应用程序,也适用于其他类型的应用程序,如移动应用程序、数据库系统等。 27. 性能测试是否只在开发过程中进行? 性能测试不仅可以在开发过程中进行,也可以在系统上线前、系统升级后或定期进行,以确保系统的性能符合要求。 28. 性能测试是否只关注响应时间? 性能测试不仅关注响应时间,还关注吞吐量、并发用户数、资源利用率错误率等指标。 29. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在测试环境或仿真环境中进行,以评估系统在不同环境下的性能表现。 30. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 31. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 32. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 33. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 34. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 35. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 36. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 37. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 38. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 39. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 40. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 41. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 42. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 43. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 44. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 45. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 46. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 47. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。 48. 性能测试是否只关注系统的前端性能? 性能测试不仅关注系统的前端性能,也关注后端性能,如数据库查询性能、网络传输性能等。 49. 性能测试是否只关注系统的响应时间? 性能测试不仅关注系统的响应时间,还关注系统的吞吐量、并发用户数资源利用率等指标。 50. 性能测试是否只在生产环境中进行? 性能测试不仅可以在生产环境中进行,也可以在开发环境或测试环境中进行,以评估系统在不同环境下的性能表现。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值