如何理解性能测试场景中的业务模型
性能场景中的业务模型是性能测试工作中非常重要的一部分。而在真实的项目中,业务模型跟线上的业务模型不一样的情况实在是太多了。原因可能多种多样,这些原因大大降低了性能测试的价值。
有人说,就是因为这样才应该直接用生产流量的方式来做嘛,这样就不用管业务模型了,直接就有生产的业务模型了。没错,只要你能通过生产流量扩大回放的方式实现压力部分,确实可以不用考虑业务场景了。但这么做的前提也必须是你的生产流量来源是可以覆盖想要测试的业务场景的。
回放的逻辑
请输入
回放的逻辑是这样的:
如果你喜欢的话,还可以在每一个业务产品和基础架构的层面做接口的回放,甚至我们可以直接在数据库中回放 SQL。而这些手段,都是为了模拟生产的业务模型。
这是非常容易理解的逻辑吧。
有些人觉得只有通过生产流量回放的方式,才是真实地模拟了线上的流量。事实上,这个观点是偏颇的。
有很多人在各种场合说,可以直接在生产环境中,通过业务统计动态统计出业务场景,并实时实现到性能平台中去。这当然是一个很好的路子,但这个路子需要完整的技术实现,并且在不同的企业中,这种方式难就难在创建业务模型的统计算法,此外还要有高层领导的支持,才能真正实现完整的逻辑。
当明白了生产数据统计怎么转化到具体的场景中的业务模型之后,不管你是用生产流量回放,还是用实时业务量统计,还是线下业务量统计,你会发现原理都是一样的。
案例:原系统的量级如下图所示(这里将降低10倍处理)
生产数据统计
请输入
首先我们从生产环境取出数据,粒度到秒级,取出所有业务的交易量数据。
业务量级按天统计的生成图如下:
那为什么要取这一段时间的数据呢?答案很简单,因为这一段时间完整地体现了这个业务系统的峰值数据。
从这样的数据中取出业务量最高的一天,最大的业务量是 2000 万左右。
注意,我这里说的是业务量最高的一天,并不是说我们的业务场景只从这一天产生,还有别的时间,可能业务量不多,但是业务比例会完全不同,这也是要取出来的场景,所以这个统计数据到业务模型的分析过程会比较细致。把这一天的逻辑说完后,大家就会明白其他的场景获取方式。
接着,再以小时为单位统计出业务量比例。如下图所示:
从上图显然可以看出哪个小时的业务量最大,那就是 9 点。
但是呢,你不要忘记了,在 16 点的时候,明显蓝色表示的那个业务量是大于 9 点时的业务量的。这个也是要取出来的场景。
如果需要更细的数据,我们可以以分钟为单位看一下这个小时内的业务量分布。
如果你的业务有必要从分钟或秒来看的话,可以按分钟或秒来取场景比例。在我们今天的这个案例中,取到小时就已经足够。因为我要的是业务模型,而不是生产 TPS 量级。
另外,既然说到了这里,我再把生产 TPS 量级的统计说一下。有了上面的分钟统计比例,就可以很容易统计出生产环境中每个业务的最大 TPS 了。这里得到的 TPS 将是最有效的测试是否通过的 SLA 指标。
下面我们再以小时为单位做出百分比图。
为什么要做百分比图呢?因为这个比例才是我们在性能场景中设置的 TPS 比例,是最直接有效的比例。
业务模型计算过程
请输入
针对这一天中的数据,我们将做出以下三个业务模型。
(1)通用业务场景模型。就是将这一天的所有业务数加在一起,再将各业务整天的交易量加在一起,计算各业务量的比例。
(2)9 点钟的业务模型。将 9 点钟的业务比例直接拿出来用。
(3)16 点的业务模型。将 16 点钟的业务比例直接拿出来用。
首先我们看一下通用业务模型。
我们将上面的 0% 的业务全部删除,再计算一次百分比,得到测试场景中的业务比例。如下所示:
做为最基础的业务比例,这个可以覆盖大部分的业务时间了。
在通用的业务场景中,如果业务团队有给出明确的 TPS 指标,那就有依赖了。但是,如果没有给的话,也不要气馁。我们可以根据系统的运行时段,计算平均值即可。
因为我们这个系统是 24 小时系统,所以我用 24 小时来计算。得到如下值:
TPS1=20000000÷(24∗3600)=231
也就是说通用场景中,TPS 不能低于 231。
接着我们看下 9 点的业务模型。计算方法和上面一样,最后得出比例。
我们可以从小时图中看到,9 点的业务量总和有 120 万左右。为了方便,这里我拿 120 万来计算。它的生产 TPS 就是:1,200,000 / 3600 = 333。
TPS2=1200000÷3600=333
显然,这个模型下做场景时就不能低于 333TPS。
最后看一下 16 点的业务场景。
从小时图中,我们可以看到,16 点的业务量总和有 100 万左右。为了方便,这里我拿 100 万来计算。它的生产 TPS 就是:
TPS3=1,000,000÷3600=277
显然,这个模型下做场景时就不能低于 277TPS。
但是请注意,像 9 点业务模型中的业务 11,占比达到 30.25%;而 16 点业务模型中只有 8.69%。虽然 TPS 差不多,但是业务比例差别大,这两种业务模型下,对系统资源的消耗会完全不一样。
最后我稍微说一下 TPS 的控制。
有了这个计算过程,当我们把这些比例设计到场景中去的时候,一定要注意这些 TPS 的比例在运行过程中,不能发生大的变化。一旦压力发起后,由于各业务的响应时间随着压力的增加发生的变化量不同,就会导致运行过程中业务比例出现很大的偏差。
通常,在 LoadRunner 里,会用pacing来控制 TPS,而用 JMeter 的,则会用Constant Throughput Timer来控制 TPS。
总结
请输入
本文主要描述了业务模型的来源和计算过程。其实就是一些常规的求和平均计算,只要判断出哪一段业务是我们需要的就可以了。
另外也强调了,不管用什么炫酷的手段来实现生产环境的流量模拟,最终的目标是实现和线上比较接近的业务模型。不是说一定用生产流量回放才是正确的,只有适合自己企业的手段才是最正确的。
思考题
请输入
(1)为什么业务比例对性能场景如此重要?
(2)以及如何在执行场景过程中控制 TPS 比例呢?
往期精彩文章