文章转自:原创: 杨建旭,https://mp.weixin.qq.com/s/IBUsJkjT0czAubkmxljJHA
谈性能评估、容量规划,往往首先要考虑到的是业务量,毕竟系统的容量设计要和需求方来挂钩,容量设计太大是浪费,设计太小又满足不了需求。而未来的业务量是多少、怎么预估也是一个可以聊聊的话题。
今天我们就谈谈,怎么预估业务量,特别是怎么预估某一个特殊日期的业务量。
预估业务量,一般包括预估一年业务量,日均业务量,峰值日期的业务量,一天当中峰值小时的业务量。
预估什么
今天我们主要讲特殊日期的业务量怎么去预估,为什么讲特殊日期的业务量预估呢
1)“年业务量”的主要影响到的是系统的容量也就是磁盘;
2)“日业务量”影响到的是一个系统能不能撑得住、是不是导致用户体验的下降和用户的流失;
3)“小时峰值业务量”对于计算机系统其实更为重要,但相对比较容易计算,因为一天的小时峰值往往跟一天的日峰值成一个比较固定的比例,一般用户的使用习惯相对固定的,特殊交易日的小时峰值也跟整个这一天的交易量的比例往往是固定的
所以业务量的预估重点在于预测特殊交易日的日峰值流量
预估方法
(一) 预测要分系统,不同的系统应用有不同的增长模型,需要单独评估
(二) 每个应用系统都有各自的特点,需要理清它的业务特点的基础上进行预估方法的选择。
可能的特点有:
1 这个交易日是周一,而每周一的业务量是这个星期业务量最大的。
2 这个交易日是年终决算日,而每次年终决算日这个系统都创出历史新高,
3 这个交易日会不会有之前几天的业务积压
4 这个交易日会不会受到节假日、周末的影响
(三) 在可选的预估方法有多种的情况下,哪一种预估方法更准确需要数据的支撑,这个数据是靠历史数据的计算得出的
这里介绍几种业务量预估的方法,并且举例说明如何从这么多预测方法当中选出最适合自己更准确的预估方法,并且得出你想要的预估数据。
比如说预测9月10日(周一)的业务量(这里不拿双十一举例,目的是让大家多了解一些预估方法,而不要把思路局限在双十一这种特别特殊的日子)。现在是7月份,能拿到今年的最新数据是今年6月的数据量。
方案一:根据往年9月10日与当年6月日均业务量推算;
方案二:根据往年9月10日与当年6月各周一业务量推算;
方案三:根据往年峰值日期(比如年终、双十一)与9月10日业务量的倍数关系推算。
方案四:如果被预估的系统没有多少可用的年度历史数据,且业务量增长迅速,则可以以月度数据作为预测的基础数据。根据各年9月10日业务量与当月月均业务量比值的平均值、及月均业务量的预测值进行推算。简单来说就是,预估今年9月的月业务量有多少,去年9月9日业务量与去年9月月业务量的比值是多少。
这里又牵涉出一个问题,今年9月的月度业务量怎么预估?这里就不细展开了。
一个思路是,采用SPSS这样的统计工具进行模型拟合,工具会给出目标值(某月或某日业务量)与参数(月份、日期、历史业务量等)之间的拟合模型,可以从几个可选的拟合模型中选一个最接近的,用到的选择方法可以是历史数据代入法。
预测的具体表格大概是这样的(这里用了三种方案)
这一步,采用了前年之前的数据,得出不同算法下那个比值是多少,求一个平均数(例如分别是1.3,1.1,0.8)。
然后把这几个比值的平均数代入2017年,测算2017年的预估值(Q, R,S),因为2017年我们已经有了实际值,拿这几个预估值和实际值(M)对比,看看哪个算法的偏差最小。
假设方案3偏差最小,那么我们把2014-2017年的方案三的比值重新计算平均值,这个值用来评估2018年的9月9日。
如果觉得这样太麻烦,就直接看2014-2017的不同方案比值,谁的方差最小,谁的比值最稳定。
可以看出,根据刚才我们的计算,方案3计算方法预估的是最准确的,于是我们就采用方案3得出的数值作为我们最终的预估数值,但到了这里还没有结束,另外我们还要给这个数值加上下限和上限的限制。也就是说,预估的结果给出的是一个区间,而不是一个数值。
因为这个吞吐量预估值受到很多不可预测因素的影响,比如说今年我们的双十一下暴雨,各地的线路信号不好,导致它的数值低于预期。给出区间的意义不仅在于预估业务量本身这件事件的免责,对于容量规划也是非常有意义的。
这下限和上限的百分比怎么取呢?
一种方法是看历史数据,用当前的预估模型来预估去年、前年的数值。这个预估数值跟实际数值的相差的百分比,就是上下限的百分比。
二是根据实际情况分析是否有一些特殊事件的触发,人为的去调节这个百分比
预估报告
预估报告除了写我们的预估区间之外,还要写我们对这个系统特点的分析,采用的预估方法,以及通过历史数据的计算最终为什么选择了这个预估方法。
不要忘了附带写上对数据的一些免责性说明。比如说我的历史数据不完整,或者最近这个月的数据拿不到,我会等这个月的最新数据拿到之后来修正我的预估。
好了,业务量预估报告大功告成。