这可能是我公布的排队论相关的最后一篇文章。
我将捡重要的列出来。
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检验,以确定数据是否是泊松分布或指数分布。因为确定了分布之后,才可以用相应的排队论表达式和公式来完成后面的计算。
系统数据有些比较规整(比如说一般分布的马尔可夫到达链),有些比较复杂(各种不同的分布模型)。需要对这些都进行了分析之后,才能创建出适合的模型出来。所以抓取一些数据做统计分析就非常重要了。
在第一篇文章中写的一些数据和模型都是非常简单的,很多变量都没有加进去运算。而在本文中,加入了很多的变量。即使这样,仍然不能和真实环境的复杂度比较。
我的目的是通过这样的计算可以得到比较通用的模型(不是绝对能用哦),在不同的场景下都可以通过得到一些基本的数据信息之后,加以整理分析,就可以得到可以复用的排队模型,并最终指导生产运营的推导需求。
这样就可以避免部分在生产环境上的问题,不用花大量的时间成本去做分析,即可知道要加多少服务器,要支持多少个用户,用户的响应时间变化曲线等等。
有兴趣的可以找我探讨。
以后我争取写点其他文章,而不是这么枯燥的文章。