经常会有这样的面试题,让你预估一个系统可能得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。