之前的文章中曾出现过“并发度”这个概念,这个词不知道是不是我原创,它意在表达“并发”的可能性,是压力的一种度量。一些同学可能还没有理解这个概念的意义,下面我们看看它是怎么来……
看过之前文章的同学应该知道,我将“并发”这个容易产生误解的词拆分成了“相对并发”和“绝对并发”。为什么这么做呢?那是因为“绝对并发”说的是同一时刻发生的事情,这通常是我们无法观测和衡量的。而“相对并发”说的是一个时间段内发生的事情,这是很容易观测到的。从某种程度上,也可以说“相对并发”是为了弥补我们无法有效评估“绝对并发”的压力而出现的。
但是有时候,性能测试工程师仍然需要回答“系统可以处理多少个并发请求”这类的问题,或者是需要测试一些绝对并发的极限场景。这类问题和测试场景是有意义的,但是在没有“绝对并发”相关数据的情况下,我们如何处理?显然胡乱拍板是不可以的,那么我们只有根据一些可观测的数据进行合理的推测和估算,“并发度”就是这样产生的。
假设我们已经分析得出,系统的使用压力集中在2个小时内,在这个时间段内共有100个用户访问(活跃用户),且压力是平均分布的(否则就可以说压力集中在更小的时间段内了),平均每个用户使用系统的时间是30分钟(活跃时间),那么我们可以画出下面一张图来表示服务端所承受的压力。
这是一张从服务端视角来看的交互图。横轴是时间,纵轴是访问用户,每一条横线表示一个用户与系统的交互过程,不同的用户用不同颜色做了标识。在这张图中,什么是并发度呢?我们选取时间轴上的一个点,延纵轴方向做一条平行线,这条线穿过的横线的数量,就是并发度。
并发度表示,在一个时间点上,可能与服务端进行交互的用户的数量。为什么说是“可能”呢?因为图中的每一条横线代表的是用户与系统的交互过程,也可以说是用户的活跃区间,在这个区间段内,用户只是处于一种活跃状态,而并不是说一直保持着与服务端的交互,这也是图中的横线用的是虚线的原因。所以,并发度表达的,是系统在一定的访问分布下,可能承受的最大并发压力,它是一种可能性。
这样这个概念应该比较容易理解了,我们再来看看并发度的值是如何得出的。继续之前的分析结果“系统的使用压力集中在2个小时内,在这个时间段内共有100个用户访问,且压力是平均分布的,平均每个用户使用系统的时间是30分钟”,依然利用刚刚做的那条线,记对应的时间轴刻度为B,我们需要知道的是,有多少条代表交互过程的横线与之相交。
很明显,开始时间点在B之前,结束时间点在B之后的横线,它的起点必须落在从B向前一个用户活跃时长的区间内,即下图的AB区域内。
接下来只需简单的算术就可以了,100个用户访问平均分布在2小时内,AB时长为平均用户活跃时间,即30分钟,那么在AB区域内有100*30min/2h=25个用户访问。这25个用户在B时刻都可能会与系统发生交互,对系统照成压力,虽然只是一种理论上的可能性。
这就是并发度,理解它的意义了么?