Monday, November 21, 2011

如何计算消息队列中的消息处理时间


求某一时刻进入队列的消息,计算其出队列时间 EL? 

定义: 
S 入队列速率 (根据load的情况,S随不同时间段而变化)
P 出队列吞吐量, 通常在给定的系统配置条件下可以认为是常量
  TKK时刻
 TN是指对应K时刻进入消息队列的消息出队列所到达的时刻
  QD 为初始时刻Queue中剩余的Message的数量

情况1> 假设在一定时间段内,S为定值
S 总是<=P时, 在一段时间后任意时刻均无剩余message堆积, 这里暂时不考虑这类问题
S > P 时, Queue depth 会不断增长
所以,TN = (S * TK)/P + QD/P 
EL
TNTK
EL
  (S * TK)/P + QD/P TK (S/P - 1)*Tk + QD/P
其中,SP均为固定值,并且可以被measure
(一般可以通过SQL语句来统计S和P的值, 例如-- select count(*) from dbo.myqueue where ms.timestamp == ctime

情况2> 假设S为不断变化的正玄函数(斜率即为某时刻的进队速率S‘),则公式可变换为:
 EL = (∫ sin(cx)dx) /P + QD/P -TK , 其中
积分的范围是0-TK

 
因此,S需要不断的采样,利用曲线拟合方法(Curve fitting),确定它符合什么样的函数,但不管什么情况,都可以套用类似的模型解决此类问题

No comments:

Post a Comment