性能分析之排队论简述三

时间:2023-04-06 14:55:21

性能分析之排队论简述三

这可能是我公布的排队论相关的最后一篇文章。

我将捡重要的列出来。


M/M/C/∞ /∞ /FCFS模型:

本文使用这个模型,因为这个是比较典型的排队场景,在性能的场景中经常可以遇到。


定义如下参数:

set.seed(2)   # 定义随机数种子,以保证随机数据具有可重复性

Requests<- 1000000  #请求数

ArrivalRate <- 1/2   #到达率

SeviceRate <- 1/3   #服务率

Threads = 10 # 定义线程个数


通过一些计算,得到一些中间数据:

interarrivals <- rexp(Requests, ArrivalRate)   #请求分布

arrivals <- cumsum(interarrivals)         #请求总数

service <- rexp(Requests, SeviceRate) #请求得到的服务分布

rho <- (1/SeviceRate) / (1/ArrivalRate)   #服务强度

Vectorize(P_n, "n")(rho=rho, n=c(0:30), k = k)  #向量化转化


通过排队模型计算得如下结果(算法请参考排队论相关书籍,只要用语言实现即可,本文用R语言示例,只要知道算法,用excel也是可以的):

系统内的响应时间:

# Mean response time (time in system)

[1] 2.500001

请求平均响应时间:

# Mean response time

[1] 2.996585


在创建模型时,需要将相关的参数考虑进来,以确定对模型的影响。

不管是在宏观分析,还是在微观分析上,只要思路清晰,都可以用排队论来分析性能,前提是要理解如何用。不要乱用。

前面有两篇文章《性能分析之排队论简述》和《性能分析之排队论简述二》,提到了一些基本的概念和数据获取及分布分析,这些都是有成型的工具可以完成,像SPSS就可以完成卡方检验或K-S检验,以确定数据是否是泊松分布或指数分布。因为确定了分布之后,才可以用相应的排队论表达式和公式来完成后面的计算。

系统数据有些比较规整(比如说一般分布的马尔可夫到达链),有些比较复杂(各种不同的分布模型)。需要对这些都进行了分析之后,才能创建出适合的模型出来。所以抓取一些数据做统计分析就非常重要了。

在第一篇文章中写的一些数据和模型都是非常简单的,很多变量都没有加进去运算。而在本文中,加入了很多的变量。即使这样,仍然不能和真实环境的复杂度比较。


我的目的是通过这样的计算可以得到比较通用的模型(不是绝对能用哦),在不同的场景下都可以通过得到一些基本的数据信息之后,加以整理分析,就可以得到可以复用的排队模型,并最终指导生产运营的推导需求。

这样就可以避免部分在生产环境上的问题,不用花大量的时间成本去做分析,即可知道要加多少服务器,要支持多少个用户,用户的响应时间变化曲线等等。


有兴趣的可以找我探讨。

以后我争取写点其他文章,而不是这么枯燥的文章。