容量预估指的是,在接口尚未上线之前,对接口进行一个前置性的评估,预测接口可能承受的压力,来做接口测试的标准,确保服务上线后能够承受线上流量的压力。所以这是非常重要且必不可少的步骤。
通过在项目中的积累,我们从“凭直觉”预估的方式,到最后精细化理论化容量预估方式,解决了容量预估的难题。
【容量预估的困难】
容量预估的主要困难在于,在上线前,由于服务尚未上线甚至尚未开始开发,是无法通过压测接口获得相关数据的;在上线后,也无法确保现在的容量是足够承载各种意外流量发生的。
【“凭直觉”的预估方案】
在压测最开始的时候,我们使用的是“凭直觉”式的解决方案。比如,接口响应时间如果超过了一秒,迟滞的感觉会比较明显;凭借之前的经验,错误率如果多于1%,往往是有接口性能或者逻辑上的问题;而QPS/TPS如果低于100,总是感觉还有优化的空间...
【精细化的预估方案】
上面的方案存在非常大的问题,首先这种根据感受的标准,不但缺乏专业度,而且没有说服力。不能作为项目的性能评估方案。
1、错误率
因此,我先把健康码的数据捞出来进行了一番的分析,发现跟之前的认知是不一样的。实际上在接口正常的时候,错误率普遍在0~0.1%之间。跟之前认为的1%实际上是差别较大的
2、响应时间
虽然通过上面的数据可以看出接口响应时间,在存在问题的时候是超过1秒的,但为了找到理论支撑,这里引入了Apdex指数的概念。Apdex指数有下面的概念:
"满意"的区间是 T,以默认2s为标准的话,也就是 0-2s,页面响应时间超过 2s 用户就有些不满了
"容忍"的区间是 T - 4T,即 2-8s 之间为容忍区间
"失望"的区间是 大于 4T,即多于 8 秒,这时用户已经跑了
3、QPS
QPS主要靠的是两点:第一运营数据,包括PV、DAU和最高在线人数等;第二则是在非集中式访问的接口当中使用八二原则,即80%的人会在20%的时间进行接口访问。通过上面两个原则和数据,就可以推算出接口预估的QPS值。
比如,一个非集中式访问的接口预测有100万的PV,其整个访问周期是3周。根据八二原则就可以得到以下的计算:(100万人*80%)/(3周时间*20%)= 3 QPS .
再比如,如果一个集中式访问的接口(如抢购接口)预测最高有15万用户同时在线,集中在1分钟里面进行访问。这时候,因为使用的是同时在线用户,这里不再适用八二原则,而是直接进行相除的计算。可以有下面的推算:15万人 / 1分钟 = 2500 QPS
4、总结
最终,关于精细化的接口预估方案,可以概括成下面这个图