Loading [MathJax]/jax/output/CommonHTML/jax.js

排队论在网络性能分析中的应用

排队论(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)20

  • 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)+Pk1(t)pk1,k(Δt)P0(t+Δt)=P0(t)p0,0(Δt)k=0 (起始状态) 

由泊松过程的假设可知:

pk,k(Δt)=(1λΔt) and pk1,k(Δt)=λΔt

代入上式可得:

Pk(t+Δt)=Pk(t)(1λΔt)+Pk1(t)(λΔt)P0(t+Δt)=P0(t)(1λΔt)k=0 (starting condition) 

整理得:

Pk(t+Δt)Pk(t)Δt=λPk(t)+λPk1(t)P0(t+Δt)P0(t)Δt=λP0(t)

Δt0时有:

dPk(t)dt=λPk(t)+λPk1(t)(k1)(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排队系统的状态转移图如下:

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

约定:

  1. Pk(t)表示在时间间隔t内,系统内有k位顾客的概率
  2. pi,j(Δt)表示在时间间隔Δt内,系统内人数由i变为j的概率

时间间隔t+Δt内系统内人数为k的概率可由时间间隔t内系统内人数为k和k-1的概率表示:

Pk(t+Δt)=Pk(t)pk,k(Δt)+Pk1(t)pk1,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)+Pk1(t)(λΔt)(1μΔt)+Pk+1(t)(μΔt)(1λΔt)P0(t+Δt)=P0(t)(1λΔt)+P1(t)(μΔt)(1λΔt),k=0

Δt0时有:

dPk(t)dt=(λ+μ)Pk(t)+λPk1(t)+μPk+1(t),k1dP0(t)dt=λP0(t)+μP1(t)

考虑系统处于稳定状态(steady state)的情况,有:

dPk(t)dt=0,k0

代入上式可得:

(λ+μ)PkλPk1μPk+1=0,k1λP0μP1=0,k=0

解得:

λPk1=μPk

Note: 稳定状态下,系统处于状态k的概率是稳定的、不随时间变化的,因此状态k的概率变化率为0,即dPk(t)dt=0

下面是M/M/1 排队系统的通量图,由系统处于各状态的概率不随时间变化可知,从状态k-1转移到状态k的通量和从状态k转移到k-1的通量应该相等。从状态k-1到状态k的通量为λPk1,从状态k到状态k-1的通量为μPk。故即使不通过公式推导,我们也能得出λPk1=μPk的结论。

通量图

整理上式得:

Pk=λμPk1

递推可得:

Pk=(λμ)kP0=ρkP0, 其中 ρ=λμ

下面计算P0的值,由于:

k=0Pk=1

Pk=ρkP0代入上式有:

P0k=0ρk=1

整理得:

P0=1k=0ρk

ρ<1时有:

k=0ρk=11ρ for ρ<1

故:

P0=(1ρ)

综上,处于稳定状态的M/M/1 排队系统的概率分布为:

Pk=ρk(1ρ),ρ<1

下图是不同的ρ值下M/M/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 的通量图如下:

The birth-death process 的通量图

稳定状态下,由经过边界的通量相互抵消可得:

λkPk=μk+1Pk+1

后续的推导过程和 M/M/1 排队系统的推导十分相似,就不再赘述了。这里直接给出 The birth-death process 的状态概率分布函数:

Pk=(k1i=0λiki=1μi)P0,k1

The M/M/m queuing system

M/M/m 排队系统考虑有一个队列和m个服务器的情况。该排队系统的状态转移图如下:

M/M/m 排队系统状态转移图

M/M/m 排队系统的性质:

  • 因为只有一个队列,因此所有的状态下,到达速率都是常数λ
  • 如果系统内人数小于或等于m,那么队列一定为空。且状态k的服务速率为μk=kμ,这是因为此时系统内的所有人都正在接受服务
  • 如果系统内人数大于m,那么至少有一个人在队列中排队等待

各状态下的到达速率和服务速率分别为:

λk=λ,k=0,1,2,μk={kμk=0,1,2,,m1,mmμkm

如果系统处于稳定状态,由状态k进入状态k-1的通量和状态k-1进入状态k的通量相等可知:

λPk1=kμPk,kmλPk1=mμPk,km

首先考虑 k < m 的情况:

Pk=1k(ρm)Pk1,λμ=ρ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μPk1=ρPk1

递推可得:

Pm=ρPm1Pm+1=ρPm=ρ2Pm1Pm+2=ρPm+1=ρ3Pm1

故 k > m 时的一般式为:

Pk=ρkm+1Pm1k=m,m+1,

由 k < m 情况下的概率分布函数Pk,可知:

Pm1=((mρ)m1(m1)!)P0

由上述两式整理得:

Pk=(mmρkm!)P0,k=m,m+1,

综上,稳定状态下,M/M/m 排队系统的状态概率分布为:

Pk={P0((mρ)kk!)kmP0(mmρkm!)km

其中,ρ=λmμ<1

下面计算P0,由于:

k=0Pk=1

可得:

P0[m1k=0(mρ)kk!+k=mmmρkm!]=1

故当ρ<1时,M/M/m 排队系统的稳定状态概率分布为:

Pk={P0((mρ)kk!)kmP0(mmρkm!)km,ρ=λmμ<1

其中,P0=[m1k=0(mρ)kk!+(mρ)mm!(1ρ)]1

Note: 对于M/M/m 排队系统,一个重要的问题是系统内需要排队的概率。当系统内人数大于服务器数量时,顾客需要排队。需要排队的概率为:

Pkm+1=k=m+1Pk=k=mPkPm=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/M/1 排队系统十分相像。唯一的区别在于,由于M/M/1/m 排队系统在状态k处截断,故其P0值与M/M/1 排队系统的P0值不同。

下面是M/M/1/m 排队系统的通量图:

M/M/1/m 排队系统的通量图

由通量图可知:

λk1Pk1+μk+1Pk+1=μkPk+λkPk,k=1,,m1

解得:

λkPk=μk+1Pk+1,k=0,,m1

递推可得:

P1=(λ0μ1)P0P2=(λ1μ2)P1=(λ0λ1μ1μ2)P0P3=(λ2μ3)P1=(λ0λ1λ2μ1μ2μ3)P0

由上述递推公式可知一般式为:

Pk=(k1i=0λiki=1μi)P0=(λμ)kP0,k=0,,m

下面求P0,由于:

mi=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/∞ 排队系统的状态转移图:

M/M/∞ 排队系统的状态转移图

通量图如下:

通量图

由通量图可知:

λk1Pk1=μkPk

λk=λ,μk=kμ,等式可化为:

λPk1=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位顾客。它的状态转移图如下:

M/M/m/m 排队系统的状态转移图

到达速率和服务速率表达如下:

λk={λk=0,1,,m10km

μk={kμk=0,1,,m0k>m

通量图如下:

由通量图可得:

λPk1=kμPk,k=1,,m

整理得:

Pk=λkμPk1=akPk1,k=1,,m

由递推公式解得:

Pk=P0(kn=1an)=akk!P0,k=0,,m

下面计算P0,由于:

P0mk=0akk!=1

故:

P0=1mk=0akk!

因此,M/M/m/m 排队系统的状态概率分布为:

Pk=akk!mn=0ann!,a=λμ,k=0,,m