发明名称 一种基于云的用户访问请求调度方法
摘要 本发明提供的是一种基于云的用户访问请求调度方法。本发明的关键在于对用户访问请求进行调度的过程中,请求调度模块通过监测各服务节点平均请求执行时间和待执行请求队列长度来判断服务节点的负载情况,对其权值进行相应的调整,进而计算各服务节点的负载区间,同时对待处理的请求产生一个0到1范围内的随机数,查找该随机数所对应的负载区间,再查找该负载区间所对应的服务节点,然后将用户请求发送给该服务节点执行,监测执行结果并更新该服务节点的平均请求执行时间和待执行请求队列长度,其间若有新增加的用户访问请求,则将其添加到待处理的用户请求队列中,重复上述过程,直到所有请求执行完毕,从而显著改善了云计算系统的负载均衡能力和响应速度。
申请公布号 CN102394931B 申请公布日期 2013.12.18
申请号 CN201110346172.0 申请日期 2011.11.04
申请人 北京邮电大学 发明人 姚文斌;叶鹏迪;韩司;张兰英
分类号 H04L29/08(2006.01)I 主分类号 H04L29/08(2006.01)I
代理机构 代理人
主权项 1.一种基于云的用户访问请求调度方法,其特征在于:设待处理用户请求队列包含了m个请求,分别表示为R<sub>1</sub>、R<sub>2</sub>、…、R<sub>m</sub>;云计算系统中的服务节点集合包含了n个服务节点,分别表示为S<sub>1</sub>、S<sub>2</sub>、…、S<sub>n</sub>,各服务节点的平均请求执行时间分别表示为<img file="FSB0000116022140000011.GIF" wi="345" he="54" />待执行请求队列中长度分别表示为u<sub>1</sub>、u<sub>2</sub>、…、u<sub>n</sub>,权值分别表示为τ<sub>1</sub>、τ<sub>2</sub>、…、τ<sub>n</sub>,负载区间分别表示为F<sub>1</sub>、F<sub>2</sub>、…、F<sub>n</sub>,<maths num="0001"><![CDATA[<math><mrow><mo>&ForAll;</mo><mi>i</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>]</mo><mo>,</mo><msub><mi>F</mi><mi>i</mi></msub><mo>&SubsetEqual;</mo><mo>[</mo><mn>0,1</mn><mo>]</mo><mo>,</mo></mrow></math>]]></maths>且对于<maths num="0002"><![CDATA[<math><mrow><mo>&ForAll;</mo><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>]</mo><mo>,</mo><mo>&ForAll;</mo><mi>k</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>]</mo><mo>,</mo></mrow></math>]]></maths>j≠k,<img file="FSB00001160221400000114.GIF" wi="264" he="67" />过载阈值表示为μ;调整步长表示为<img file="FSB0000116022140000014.GIF" wi="115" he="33" />是一个正数;请求调度模块主要负责调度用户的访问请求,同时监测各服务节点的负载情况,并及时调整它们的权值和负载区间;当对用户访问请求进行调度时,输入待处理用户请求队列R<sub>1</sub>、R<sub>2</sub>、…、R<sub>m</sub>,服务节点S<sub>1</sub>、S<sub>2</sub>、…、S<sub>n</sub>,各服务节点的平均请求执行时间<img file="FSB0000116022140000015.GIF" wi="348" he="100" />待执行请求队列长度u<sub>1</sub>、u<sub>2</sub>、…、u<sub>n</sub>,权值τ<sub>1</sub>、τ<sub>2</sub>、…、τ<sub>n</sub>,负载区间F<sub>1</sub>、F<sub>2</sub>、…、F<sub>n</sub>,过载阈值μ,调整步长<img file="FSB0000116022140000016.GIF" wi="50" he="35" />请求调度模块通过监测各服务节点平均请求执行时间和待执行请求队列长度来判断服务节点的负载情况,对其权值进行相应的调整,进而计算各服务节点的负载区间,同时对待处理<img file="FSB00001160221400000115.GIF" wi="56" he="50" /><u>用</u><u>户</u>请求产生一个0到1范围内的随机数,查找该随机数所对应的负载区间,再查找该负载区间所对应的服务节点,然后将用户请求发送给该服务节点执行,监测执行结果并更新该服务节点的平均请求执行时间和待执行请求队列长度,重复上述过程,直到所有请求处理完毕;其具体方法步骤为:(1)输入服务节点S<sub>1</sub>、S<sub>2</sub>、…、S<sub>n</sub>;(2)输入过载阈值μ,调整步长<img file="FSB0000116022140000017.GIF" wi="49" he="35" />(3)根据各服务节点不同的硬件性能,赋以相应的初始权值τ<sub>1</sub>、τ<sub>2</sub>、…、τ<sub>n</sub>;(4)输入各服务节点负载区间F<sub>1</sub>、F<sub>2</sub>、…、F<sub>n</sub>,并全部初始化为0;(5)输入待处理的用户请求队列为R<sub>1</sub>、R<sub>2</sub>、…、R<sub>m</sub>;(6)各服务节点的请求平均执行时间<img file="FSB0000116022140000018.GIF" wi="342" he="96" />待执行请求队列长度u<sub>1</sub>、u<sub>2</sub>、…、u<sub>n</sub>全部初始化为0;(7)请求调度模块监测各服务节点的平均请求执行时间分别表示为<img file="FSB0000116022140000019.GIF" wi="328" he="56" />和待执行请求队列长度u<sub>1</sub>、u<sub>2</sub>、…、u<sub>n</sub>,<img file="FSB00001160221400000110.GIF" wi="237" he="55" />若<img file="FSB00001160221400000111.GIF" wi="247" he="61" />其中μ为过载阈值,则表示服务节点S<sub>j</sub>负载过重,将该节点的权值τ<sub>j</sub>减去一个调整步长<img file="FSB0000116022140000021.GIF" wi="53" he="35" />否则,将该节点的权值τ<sub>j</sub>加上一个调整步长<img file="FSB0000116022140000022.GIF" wi="63" he="57" />(8)分别计算n个服务节点的负载区间:<maths num="0003"><![CDATA[<math><mfenced open='{' close=''><mtable><mtr><mtd><mi>k</mi><mo>=</mo><mn>1</mn><mo>,</mo><msub><mi>F</mi><mi>k</mi></msub><mo>=</mo><mo>[</mo><mn>0</mn><mo>,</mo><mfrac><msub><mi>&tau;</mi><mn>1</mn></msub><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow></mfrac><mo>)</mo></mtd></mtr><mtr><mtd><mi>k</mi><mo>&Element;</mo><mo>[</mo><mn>2</mn><mo>,</mo><mi>n</mi><mo>-</mo><mn>1</mn><mo>]</mo><mo>,</mo><msub><mi>F</mi><mi>k</mi></msub><mo>=</mo><mo>[</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow></mfrac><mo>,</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow></mfrac><mo>)</mo><mo>;</mo></mtd></mtr><mtr><mtd><mi>k</mi><mo>=</mo><mi>n</mi><mo>,</mo><msub><mi>F</mi><mi>k</mi></msub><mo>=</mo><mo>[</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow></mfrac><mo>,</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>&tau;</mi><mi>j</mi></msub></mrow></mfrac><mo>]</mo></mtd></mtr></mtable></mfenced></math>]]></maths>(9)<img file="FSB0000116022140000024.GIF" wi="249" he="53" />请求调度模块对<u>待处理</u>用户请求R<sub>i</sub>产生一个0到1范围内的随机数,查找该随机数所对应的负载区间F<sub>j</sub>,其中j∈[1,n],再查找该负载区间所对应的服务节点S<sub>j</sub>,然后将用户请求R<sub>i</sub>发送给服务节点S<sub>j</sub>,并将请求R<sub>i</sub>加入到服务节点S<sub>j</sub>的待执行请求队列,同时将请求R<sub>i</sub>从待处理的用户请求队列中删除,且将服务节点S<sub>j</sub>的待执行请求队列长度u<sub>j</sub>的值增加1;(10)<img file="FSB0000116022140000025.GIF" wi="237" he="54" />若服务节点S<sub>j</sub>完成了待执行请求队列中的一个请求,便将该请求从待执行请求队列中删除,同时将该请求的执行时间反馈给请求调度模块,请求调度模块接到信息后,更新该服务节点的平均请求执行时间<img file="FSB0000116022140000026.GIF" wi="65" he="59" />同时将该服务节点的待执行请求队列长度u<sub>j</sub>的值减少1;(11)若有新增加的用户访问请求,则将其加到待处理的用户请求队列中;(12)若待处理的用户请求队列不为空,执行步骤(7);否则,执行步骤(13)(13)若<img file="FSB0000116022140000027.GIF" wi="233" he="67" />服务节点S<sub>j</sub>待执行请求队列不为空,则执行步骤(10);否则,则程序执行完毕。
地址 100876 北京市海淀区西土城路10号