✅如何预估一个系统的QPS?

典型回答

经常会有这样的面试题,让你预估一个系统可能得QPS有多少。

✅什么是QPS,什么是RT?

预估是有必要的, 因为有时候我们一个新的业务要上线,或者要搞一个大促,我们就需要合理的做预估,来预留硬件资源。

预估一个系统的QPS通常涉及对业务特性、历史数据、峰值流量和系统架构的综合考虑。以下是一个基本的预估过程。(我先给一个方法论,然后文末再给个示例

分析业务模型

  • 业务类型:不同的业务类型的QPS是不太一样的,比如B类业务和C类业务,支付业务和购物车业务,这些都是不太一样的。
  • 用户基数:要预估QPS,就要大概知道我们一共有多少用户,人数都不知道,怎么预估出一秒钟有多少人访问呢?所以需要重点考虑目标用户群的规模。
  • 用户行为:分析用户的典型行为模式,如每天的活跃时间、行为频率等。

参考历史数据

  • 如果是已有系统,分析历史流量数据,特别是高峰时段的数据。
  • 对于新系统,可以参考类似系统的公开数据或行业标准。

估算日均请求量

  • 根据用户行为和业务模型估算日均请求总量。
  • 例如,如果预计每个用户平均每天产生10次请求,且有10000个活跃用户,则日均请求量为10 * 10000 = 100000次。

计算峰值流量

  • 峰值流量通常是日均流量的数倍。可以考虑特殊事件(如促销活动)可能带来的流量波动。
  • 例如,如果预计峰值流量是日均流量的3倍,则峰值流量为100000 * 3 = 300000次。

估算QPS

  • 将峰值流量分布到高峰时段。例如,如果高峰时段为2小时,则QPS为 300000 / (2 * 3600) ≈ 42次/秒。
  • 考虑系统的容错和冗余设计,通常需要在估算的基础上增加一定的冗余比例。

预估增长趋势

  • 考虑业务增长和用户增长对QPS的影响。
  • 预估未来一段时间内的QPS增长趋势,以便进行相应的资源规划。

考虑架构和技术因素

  • 分布式架构和负载均衡策略可以显著影响系统的处理能力。
  • 缓存、数据库优化和查询优化也会对QPS有重要影响。

举例

根据上面的方法论,我们预估一下微博的互动QPS情况。

首先,根据公开资料显示,截至2023年,第三季度末,微博月活跃用户达到6.05亿。一般来说,日活用户数是月活用户数的20%-30%左右,按照30%来算的话,那么日活用户数为2亿

根据微博这个产品的属性,假设每个用户每天产生2次互动,比如发微博、转发评论等。那么日均请求量就是4亿次(2亿*2)。

如果不考虑峰值情况的话,那么把这个4亿次平均分摊一下,那么每秒钟就有4639次请求。(4亿/24/3600)

但是,一般来说,一个业务的峰值流量会是平时的数倍,在不考虑热点事件的情况下,假设峰值流量是日均流量的3倍,并且每天的峰值流量会维持在2小时左右。那么就有以下公式:

假设日常流量的QPS为X:

X * (24-2)* 3600 +2 *3 * X * 3600 = 400000000

那么最终可以得出X= 3968。即日常QPS大概为4000左右,峰值QPS为12000左右。


当然,以上预估我们有很多假设,比如假设日活用户数是月活用户数的30%,假设每个用户每天产生2次互动,假设峰值QPS是日常的3倍,假设峰值时长持续2小时。在我们实际业务做预估的时候,也会有些指标是没有具体值的,也会有假设值。这是很正常的,因为如果所有指标都有具体指,那也就不需要预估了。

只不过,假设值越少,预估的结果就越精确。最后,在预估QPS的时候,记得给自己留点buffer。

原文: https://www.yuque.com/hollis666/xkm7k3/svqsqgr2c6u6krnx