排队论(queueing theory)也称随机服务系统理论,它研究的内容有三部分:性态问题、最优化问题和统计推断问题。(《运筹学》清华大学出版社)
下图描述了排队过程的一般流程:
现实中的排队问题是多种多样的,对上述“顾客源”和“服务机构”应该作宽泛的理解。顾客和服务机构可以是生物,也可以是非生物;排队结构可以是有形的,也可以是无形的,比如向交换台要求通话的请求;顾客可以走向服务机构,也可以相反,比如送货上门。
在网络中,服务器和用户之间相互传送数据包。数据包的传送需要时间,因此或多或少都会产生延迟。为了分析这些延迟,我们引入了一系列假设,并利用排队论对网络延迟进行建模分析。
本文将着重介绍网络性能分析(Network performance analysis)中几种常见的排队模型。它们是:
- The M/M/1 queuing system
- The birth-death process
- The M/M/m queuing system
- The M/M/1/m queuing system
- The M/M/∞ queuing system
- The M/M/m/m queuing system
另外,作为以上模型的理论基础,本文将首先介绍泊松过程(Poisson process)。
泊松过程的推导
泊松过程是马尔可夫过程的一个特例,在排队论中经常被用来估计顾客到达的概率分布。
(一)泊松过程的假设
-
在时间间隔Δt内,有且仅有一位顾客到达的概率P和Δt成比例,比例系数为λ
-
在时间间隔Δt内,至多只允许一位顾客到达(否则应该选取一个更短的时间间隔)
P( 在时间间隔 [t,t+Δt] 内,有且仅有一位顾客到达 )=λΔtP( 在时间间隔 [t,t+Δt] 内,没有顾客到达 )=1−λΔtP( 在时间间隔 [t,t+Δt] 内,多于一位顾客到达 )=0
-
泊松过程是对顾客到达过程的估计,故不考虑顾客的离开情况,所以到达人数只增不减
-
只考虑一阶无穷小对结果的影响,忽略二阶无穷小,Δt≫(Δt)2≈0
-
Pk(t)表示在时间间隔t内有k位顾客到达的概率
-
pi,j(Δt)表示在时间间隔Δt内到达总人数由i变为j的概率
(二)推导过程
泊松过程的状态转移图如下:
由于总人数单调递增,且在时间间隔Δt内,到达总人数最多增加1。因此,如果t+Δt时刻的到达人数是k,那么在t时刻的到达人数只有两种情况:k或者k-1.
根据上述推断,时间间隔t+Δt内到达总人数为k的概率可由时间间隔t内到达总人数为k和k-1的概率表示:
Pk(t+Δt)=Pk(t)pk,k(Δt)+Pk−1(t)pk−1,k(Δt)P0(t+Δt)=P0(t)p0,0(Δt)k=0 (起始状态)
由泊松过程的假设可知:
pk,k(Δt)=(1−λΔt) and pk−1,k(Δt)=λΔt
代入上式可得:
Pk(t+Δt)=Pk(t)(1−λΔt)+Pk−1(t)(λΔt)P0(t+Δt)=P0(t)(1−λΔt)k=0 (starting condition)
整理得:
Pk(t+Δt)−Pk(t)Δt=−λPk(t)+λPk−1(t)P0(t+Δt)−P0(t)Δt=−λP0(t)
当Δt→0时有:
dPk(t)dt=−λPk(t)+λPk−1(t)(k≥1)(1)dP0(t)dt=−λP0(t)(2)
解方程(2)可得:
P0(t)=Aexp(−λt)
其中A是任意常数。设方程(1)的k=1,把方程(2)的解代入方程(1)中有:
dP1(t)dt=−λP1(t)+Aλexp(−λt)
解得:
P1(t)=Aλtexp(−λt)
k=2时同理:
dP2(t)dt=−λP2(t)+Aλ2texp(−λt)
解得:
P2(t)=A(λt)22exp(−λt)
对任意常数k,解为:
Pk(t)=A(λt)kk!exp(−λt)
下面计算A的值,由于系统处于各状态的概率之和为1,故有:
P0(t)+P1(t)+P2(t)+⋯=∞∑i=0Pi(t)=1
即:
Aexp(−λt)∞∑k=0(λt)kk!=1
由泰勒展开解得A=1。因此,泊松过程的概率密度函数为:
P(k|t,λ)=(λt)kk!exp(−λt)
下图是几个不同μ
值对应的泊松过程函数图像:
(三)泊松过程实例
一个交换机平均每分钟接收100个电话请求,按照泊松过程,该交换机连续五秒未收到电话请求的概率的多少?
P(k=0|t=112,λ=100)=exp(−10012)=0.00024
Note: 从上面这个实例我们能看出:k代表顾客的数量,t代表这段时间间隔的长度,λ代表平均每单位时间到达的顾客数。
排队系统的分类
排队系统的分类用Kendall符号表示,符号形式为:
X/Y/Z/A/B/C
填写规则如下:
- X 处填写表示相继到达间隔时间的分布;
- Y 处填写表示服务时间的分布;
- Z 处填写并列的服务器的数目;
- A 处填写系统容量限制 N;
- B 处填写顾客源数目 m;
- C处填写服务规则,如先到先服务( FCFS),后到后服务( LCFS)等。
比如,M/M/1 表示相继到达间隔时间为负指数分布、服务时间为负指数分布、单服务器的模型;D/M/5 表示确定的到达间隔、服务时间为负指数分布、5个平行服务器的模型。
Note: 从上述两个例子我们能看出:M代表负指数分布,D代表确定型。这里,M和D是概率分布类型的代号。常见概率分布类型的代号如下:
M —— 负指数分布(M是Markov的字头,因为负指数分布具有无记忆性,即Markov性) ;
D —— 确定型(deterministic);
Ek —— k 阶爱尔朗(erlang)分布;
GI —— 一般相互独立(general independent)的时间间隔的分布;
G —— 一般(general)服务时间的分布。
The M/M/1 queuing system
(一)M/M/1排队系统的假设
M/M/1排队系统是相继到达时间间隔为负指数分布、服务时间为负指数分布、单服务器的模型,且只有一个队列。
M/M/1排队系统的状态转移图如下:
图中,λk
表示当系统处于状态k时的到达速率(arrival rate),μk
表示当系统处于状态k时的服务速率(service rate).
Note: M/M/1排队系统的性质:
- 系统处于状态n是指系统内有n位顾客,这n位顾客既包括正在排队的,也包括正在接受服务的;
- 如果状态n的情况已知,那么其他所有关于该队列的信息都可以被推断出来。
(二)推导过程
回忆前文泊松过程的假设:
P( 在时间间隔 [t,t+Δt] 内,有且仅有一位顾客到达 )=λΔtP( 在时间间隔 [t,t+Δt] 内,没有顾客到达 )=1−λΔtP( 在时间间隔 [t,t+Δt] 内,多于一位顾客到达 )=0
上述公式是对到达速率λ而言的,对服务速率μ也采用相同的模型假设:
P( 在时间间隔 [t,t+Δt] 内,有且仅有一位顾客服务完成 )=μΔtP( 在时间间隔 [t,t+Δt] 内,没有顾客服务完成 )=1−μΔtP( 在时间间隔 [t,t+Δt] 内,多于一位顾客服务完成 )=0
约定:
- Pk(t)表示在时间间隔t内,系统内有k位顾客的概率
- pi,j(Δt)表示在时间间隔Δt内,系统内人数由i变为j的概率
时间间隔t+Δt内系统内人数为k的概率可由时间间隔t内系统内人数为k和k-1的概率表示:
Pk(t+Δt)=Pk(t)pk,k(Δt)+Pk−1(t)pk−1,k(Δt)+Pk+1(t)pk+1,k(Δt)P0(t+Δt)=P0(t)p0,0(Δt)+P1(t)p1,0(Δt)k=0 (起始状态)
和泊松过程比较,M/M/1 排队模型的转移概率多了从状态 k+1 转到状态 k 的一项。点击这里回顾泊松过程的相关公式。
将泊松过程的模型假设公式和M/M/1 排队系统的假设公式,代入上述公式:
Pk(t+Δt)=Pk(t)(1−λΔt)(1−μΔt)+Pk−1(t)(λΔt)(1−μΔt)+Pk+1(t)(μΔt)(1−λΔt)P0(t+Δt)=P0(t)(1−λΔt)+P1(t)(μΔt)(1−λΔt),k=0
当Δt→0时有:
dPk(t)dt=−(λ+μ)Pk(t)+λPk−1(t)+μPk+1(t),k≥1dP0(t)dt=−λP0(t)+μP1(t)
考虑系统处于稳定状态(steady state)的情况,有:
dPk(t)dt=0,k≥0
代入上式可得:
(λ+μ)Pk−λPk−1−μPk+1=0,k≥1λP0−μP1=0,k=0
解得:
λPk−1=μPk
Note: 稳定状态下,系统处于状态k的概率是稳定的、不随时间变化的,因此状态k的概率变化率为0,即
dPk(t)dt=0
。
下面是M/M/1 排队系统的通量图,由系统处于各状态的概率不随时间变化可知,从状态k-1转移到状态k的通量和从状态k转移到k-1的通量应该相等。从状态k-1到状态k的通量为
λPk−1
,从状态k到状态k-1的通量为μPk
。故即使不通过公式推导,我们也能得出λPk−1=μPk
的结论。
整理上式得:
Pk=λμPk−1
递推可得:
Pk=(λμ)kP0=ρkP0, 其中 ρ=λμ
下面计算P0的值,由于:
∞∑k=0Pk=1
将Pk=ρkP0
代入上式有:
P0∞∑k=0ρk=1
整理得:
P0=1∑∞k=0ρk
当ρ<1
时有:
∞∑k=0ρk=11−ρ for ρ<1
故:
P0=(1−ρ)
综上,处于稳定状态的M/M/1 排队系统的概率分布为:
Pk=ρk(1−ρ),ρ<1
下图是不同的ρ
值下M/M/1 排队系统概率分布的函数图像:
The birth-death process
Note: The M/M/1 queuing system 和 The birth-death process 之间的关系:
- The M/M/1 queuing system - 只有一个队列,对队列中的顾客数量没有限制;有且仅有一个服务器;稳定状态下,到达速率和服务速率都是常数。
- The birth-death process - 是 The M/M/1 queuing system 的推广。但是,稳定状态时,到达速率和服务速率是相互独立的,到达速率和服务速率随状态k的变化而变化。
从上面的描述我们知道,The M/M/1 queuing system 和 The birth-death process是很相像的,唯一的区别在于系数。在 M/M/1 排队系统中,系数都是常数,而 The birth-death process 中的系数是随状态k的变化而变化的。也就是说,在 The birth-death process 的模型中,只需要把 The M/M/1 queuing system 中所有的λ和μ替换成λk和μk即可。
λ和μ是所有状态的平均值,而λk和μk是状态k下的到达概率通量(arrival probability flux)和服务概率通量(service probability flux)。它们之间的关系可以表示为:
λk=λPk and μk=μPk
The birth-death process 的通量图如下:
稳定状态下,由经过边界的通量相互抵消可得:
λkPk=μk+1Pk+1
后续的推导过程和 M/M/1 排队系统的推导十分相似,就不再赘述了。这里直接给出 The birth-death process 的状态概率分布函数:
Pk=(∏k−1i=0λi∏ki=1μi)P0,k≥1
The M/M/m queuing system
M/M/m 排队系统考虑有一个队列和m个服务器的情况。该排队系统的状态转移图如下:
M/M/m 排队系统的性质:
- 因为只有一个队列,因此所有的状态下,到达速率都是常数
λ
- 如果系统内人数小于或等于m,那么队列一定为空。且状态k的服务速率为
μk=kμ
,这是因为此时系统内的所有人都正在接受服务 - 如果系统内人数大于m,那么至少有一个人在队列中排队等待
各状态下的到达速率和服务速率分别为:
λk=λ,k=0,1,2,…μk={kμk=0,1,2,…,m−1,mmμk≥m
如果系统处于稳定状态,由状态k进入状态k-1的通量和状态k-1进入状态k的通量相等可知:
λPk−1=kμPk,k≤mλPk−1=mμPk,k≥m
首先考虑 k < m 的情况:
Pk=1k(ρm)Pk−1,λμ=ρm
递推可得:
P1=(ρm)P0P2=(ρm)2P1=(ρm)22!P0P3=(ρm)3P2=(ρm)33!P0
故 k < m 时的一般式为:
Pk=((mρ)kk!)P0,k<m
再考虑 k > m 的情况:
Pk=λmμPk−1=ρPk−1
递推可得:
Pm=ρPm−1Pm+1=ρPm=ρ2Pm−1Pm+2=ρPm+1=ρ3Pm−1
故 k > m 时的一般式为:
Pk=ρk−m+1Pm−1k=m,m+1,…
由 k < m 情况下的概率分布函数Pk
,可知:
Pm−1=((mρ)m−1(m−1)!)P0
由上述两式整理得:
Pk=(mmρkm!)P0,k=m,m+1,…
综上,稳定状态下,M/M/m 排队系统的状态概率分布为:
Pk={P0((mρ)kk!)k≤mP0(mmρkm!)k≥m
其中,ρ=λmμ<1
。
下面计算P0
,由于:
∞∑k=0Pk=1
可得:
P0[m−1∑k=0(mρ)kk!+∞∑k=mmmρkm!]=1
故当ρ<1
时,M/M/m 排队系统的稳定状态概率分布为:
Pk={P0((mρ)kk!)k≤mP0(mmρkm!)k≥m,ρ=λmμ<1
其中,P0=[∑m−1k=0(mρ)kk!+(mρ)mm!(1−ρ)]−1
。
Note: 对于M/M/m 排队系统,一个重要的问题是系统内需要排队的概率。当系统内人数大于服务器数量时,顾客需要排队。需要排队的概率为:
Pk≥m+1=∞∑k=m+1Pk=∞∑k=mPk−Pm=P0(mmρm+1m!(1−ρ))
The M/M/1/m queuing system
在之前的模型中,我们总是假设队列的长度是无限的。但现实中,由于缓存的限制,队列的长度通常是有限的。
在一个M/M/1/m 排队系统中,如果系统内人数为m,那么任何后来者的服务请求都会被拒绝。对于M/M/1/m 排队系统,由于系统最多只能容纳m位顾客,且正在接受服务的那位顾客同样也需要占用1个位置,因此排队等待接受服务的队列的最大长度为m-1。
M/M/1/m 排队系统的状态转移图如下:
M/M/1/m 排队系统的前半部分推导过程和M/M/1 排队系统十分相像。唯一的区别在于,由于M/M/1/m 排队系统在状态k处截断,故其P0
值与M/M/1 排队系统的P0
值不同。
下面是M/M/1/m 排队系统的通量图:
由通量图可知:
λk−1Pk−1+μk+1Pk+1=μkPk+λkPk,k=1,…,m−1
解得:
λkPk=μk+1Pk+1,k=0,…,m−1
递推可得:
P1=(λ0μ1)P0P2=(λ1μ2)P1=(λ0λ1μ1μ2)P0P3=(λ2μ3)P1=(λ0λ1λ2μ1μ2μ3)P0
由上述递推公式可知一般式为:
Pk=(∏k−1i=0λi∏ki=1μi)P0=(λμ)kP0,k=0,…,m
下面求P0
,由于:
m∑i=0Pi=(1+ρ+ρ2+⋯+ρm)P0=1,ρ=λμ
导出:
P0=1−ρ1−ρm+1
故M/M/1/m 排队系统在稳定状态下的概率分布为:
Pk=(1−ρ)ρk1−ρm+1k=0,…,m
其中,ρ=λμ
。
The M/M/∞ queuing system
M/M/∞ 排队系统考虑有一个队列,无穷个服务器的情况。下面是M/M/∞ 排队系统的状态转移图:
通量图如下:
由通量图可知:
λk−1Pk−1=μkPk
又λk=λ,μk=kμ
,等式可化为:
λPk−1=kμPk
由递推公式可得:
Pk=1k!(λμ)kP0
依照之前的方法,求出P0
为:
P0=[∞∑k=0(λμ)k1k!]−1=exp(−λμ)
综上,M/M/∞ 排队系统的状态概率分布为:
Pk=1k!(λμ)kexp(−λμ)
The M/M/m/m queuing system
M/M/m/m 排队系统有m个服务器,同时系统内最多容纳m位顾客。它的状态转移图如下:
到达速率和服务速率表达如下:
λk={λk=0,1,…,m−10k≥m
μk={kμk=0,1,…,m0k>m
通量图如下:
由通量图可得:
λPk−1=kμPk,k=1,…,m
整理得:
Pk=λkμPk−1=akPk−1,k=1,…,m
由递推公式解得:
Pk=P0(k∏n=1an)=akk!P0,k=0,…,m
下面计算P0
,由于:
P0m∑k=0akk!=1
故:
P0=1∑mk=0akk!
因此,M/M/m/m 排队系统的状态概率分布为:
Pk=akk!∑mn=0ann!,a=λμ,k=0,…,m