消息队列的拥塞控制方法和装置
技术领域
本申请涉及消息传输技术领域,特别涉及一种消息队列的拥塞控制方法和装置。
背景技术
随着互联网时代的到来,通过消息队列来传输的消息越来越多,消息队列发生拥塞的概率也不断增加。
现有技术中,一般通过丢尾方式来控制消息队列的拥塞,其包括如下步骤:
S1、在待发送消息存至消息队列时,获取该消息队列的长度;
S2、判断该消息队列的长度是否大于阈值,若是,确定该消息队列发生拥塞,进而执行步骤S3;
S3、将前述存至消息队列内的待发送消息丢弃,以降低消息队列中消息数量,实现减轻该消息队列的拥塞。
在实现本申请过程中,发明人发现现有技术中至少存在如下问题:
由于丢尾算法仅依靠丢弃队列尾部的消息来减轻该消息队列的拥塞,那么可能存在某一段时间集中进入消息队列的都是较为优先级较高的重要消息,若发生拥塞,这些优先级较高的重要消息容易被大量丢弃,导致消息传输率降低。
发明内容
本申请实施例的目的是提供一种消息队列的拥塞控制方法和装置,能在控制消息队列的拥塞时保证消息的传输率。
为解决上述技术问题,本申请实施例提供一种消息队列的拥塞控制方法是这样实现的:
判断用于接收待发送消息的目标消息队列是否发生拥塞,所述目标消息队列位于包括若干具有优先级的消息队列的队列***内;
在所述目标消息队列发生拥塞时,在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列,将所述待发送消息存至所述比目标消息队列的优先级低的消息队列;
在所述目标消息队列未发生拥塞时,将所述待发送消息存至所述目标消息队列。
为解决上述技术问题,本申请实施例提供一种消息队列的拥塞控制装置是这样实现的:
拥塞判断模块,用于判断用于接收待发送消息的目标消息队列是否发生拥塞,所述目标消息队列位于包括若干具有优先级的消息队列的队列***内;
控制执行模块,用于:在所述目标消息队列发生拥塞时,在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列,将所述待发送消息存至所述比目标消息队列的优先级低的消息队列;在所述目标消息队列未发生拥塞时,将所述待发送消息存至所述目标消息队列。
由以上本申请实施例提供的技术方案可见,本申请实施例所提供的消息队列的拥塞控制方法和装置,在接收待发送消息的目标消息队列发生拥塞时,不会主动丢弃该待发送消息,而是将该待发送消息转移至优先级低的其他消息队列,通过占用优先级更低的消息队列来保证待发送消息的传输,实现对目标消息队列拥塞进行控制的同时,还能够保证待发送消息的传输率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中消息队列的拥塞控制方法适用的消息传输***的架构示意图。
图2为本申请第一实施例中消息队列的拥塞控制方法的过程;
图3为本申请第二实施例中消息队列的拥塞控制方法的过程;
图4为本申请第三实施例中消息队列的拥塞控制方法的过程;
图5为本申请实施例中消息队列的拥塞控制装置的模块图。
具体实施方式
本申请实施例提供一种消息队列的拥塞控制方法和装置,用于解决现有技术中对消息队列进行拥塞控制时可能降低消息传输率的问题。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1为本申请实施例中消息队列的拥塞控制方法适用的消息传输***的架构示意图。
该消息传输***中,第一客户端100所发出消息借助网络200进入队列***300,通过队列***中转保存,并按照消息接收方依次发送至第二客户端400。
当然,在消息传输方向改变时,第一客户端100也会从第二客户端400接收消息,消息传输***的架构也一致。
第一客户端100和第二客户端400的数量均可以不止一个。第一客户端100和第二客户端400可以是包括能够经由网络200发出并接收数据的通信模块的装置。例如,每个用户终端100所基于的网络装置都可以包括服务器、台式计算机、膝上型计算机、平板计算机、智能手机、手持式计算机、个人数字助理(“PDA”),或者其它任何的有线或无线处理器驱动装置。
网络200都可以包括局域网(“LAN”)、广域网(“WAN”)、内部网、互联网、移动电话网络、虚拟专用网(VPN)、蜂窝式或其它移动通信网络、蓝牙、NFC或其任何组合。
消息可以是存在于基于计算机的环境中的文字、图像、音频、视频或任何其它形式的消息,例如可以是短信、邮件等。消息具有优先级,例如短信就包括了支付确认短信、登录验证短信和营销通知短信等,显然支付确认短信、登录验证短信和营销通知短信的优先级依次降低,对于用户的重要性也依次降低。
消息都具有优先级,优先级有级别高低之分。不同级别的优先级表明相应的消息具有不同的优先级。
消息的优先级与相应的消息的类型被关联后存入一个预设优先级集合。以消息是短信为例,可以将支付确认短信、登录验证短信和营销通知短信的优先级设定为级别依次降低的第一级别、第二级别及第三级别,再将这三种级别的优先级和相应消息类型关联,一并存入预设优先级集合内。
当然,一个级别的优先级可以与多种类型的消息关联,仅需保证每个消息有且仅有一个级别的优先级即可。
队列***300可以位于网络200上的网关内,队列***300内包括多个并列的消息队列,这些消息队列也具有优先级。消息队列的优先级也可以根据预设优先级集合来设定,使得各个消息队列的优先级相异。
具体的,队列***300内消息队列的数量与预设优先级集合内优先级的数量一致,例如预设优先级集合内包括级别依次降低的第一级别、第二级别及第三级别,那么消息队列的数量也可以设置为三个,并且这些消息队列的优先级也设置为第一级别、第二级别及第三级别,以用于分别存放对应级别的消息。
本申请实施例中,队列***300在发现其自身发生拥塞时,能够自适应控制拥塞,以保证消息的传输率。
图2为本申请第一实施例中消息队列的拥塞控制方法的过程,该消息队列的拥塞控制方法的执行主体可以是前述队列***300,其具体包括如下步骤。
S20:判断用于接收待发送消息的目标消息队列是否发生拥塞,若否,执行步骤S40,若是,执行步骤S60。
待发送消息用于泛指从第一客户端100或第二客户端400进入队列***300内的消息,其可以是短信、邮件等,在此不做赘述。
待发送消息具有优先级,队列***300包括若干具有相异的优先级的消息队列,待发送消息的优先级和消息队列的优先级均根据前述预设优先级集合得到,具体可参图1描述,在此不做赘述。
其中,待发送消息被通过如下过程存至队列***300中消息队列内,以便执行本申请实施例提供的消息队列的拥塞控制方法。
第一客户端100或第二客户端400生成待发送消息后,即可根据该待发送消息的类型查询预设优先级集合确定该待发送消息相应的优先级。后续,将具有优先级的待发送消息发送至队列***300。
队列***300和待发送消息的优先级是通过同一个预设优先级集合得到,根据待发送消息的优先级,查询队列***300内各个消息队列的优先级,进而确定与待发送消息具有相同的优先级的消息队列并作为目标消息队列,将待发送消息存至与其优先级相同的目标消息队列的队尾,实现待发送消息的优先级和用于接收该待发送消息的目标消息队列的优先级相同。当然,在本申请的其他实施例中,待发送消息还可以与其目标消息队列的优先级不同,在此不做赘述。
本申请实施例中,步骤S20具体包括:
判断目标消息队列的长度是大于预设上限值、小于预设下限值还是在预设上限值和预设下限值之间;
在用于接收待发送消息的目标消息队列的长度大于预设上限值,确定消息队列发生拥塞;
在用于接收待发送消息的目标消息队列的长度小于预设下限值,确定消息队列未发生拥塞;
在用于接收待发送消息的目标消息队列的长度在预设下限值和预设上限值之间,以预设概率确定消息队列发生拥塞或未发生拥塞。
由于消息队列是否发生拥塞,与该消息队列内堆积的消息数量密切相关,该消息队列内堆积的消息数量即为该消息队列的长度,通过对消息队列的长度进行判别,即可确定该消息队列是否发生拥塞。
本申请实施例中,对消息队列的长度设定预设下限值和预设上限值,将消息队列的长度可在区间分为3个范围。在长度小于预设下限值时,表明消息队列内消息数量较少,即消息队列的消息入口速率和出口速率合适,则判定该消息队列不会发生拥塞。在长度在预设下限值和预设上限值之间时,表明消息队列内消息数量已经较多,即消息队列的消息入口速率和出口速率有略微的失衡,则以预设概率判定该消息队列发生拥塞还是未发生拥塞,具体的,可以基于预设概率以机器随机选择的方式判定该消息队列发生拥塞还是未发生拥塞。在长度大于预设上限值之间时,表明消息队列内消息数量已经非常多,即消息队列的消息入口速率和出口速率已经完全失衡,则判定该消息队列已经发生拥塞。
预设下限值和预设上限值可以根据目标消息队列的优先级来设定。例如,优先级是第一优先级的消息队列的预设下限值和预设上限值均可以比第二优先级的消息队列的预设下限值和预设上限值更大,使得第一优先级的消息队列比第二优先级的消息队列被判定拥塞的概率更低。
预设概率也可以根据目标消息队列的长度与预设上限值的差值来设定。在消息队列的长度越靠近预设上限值时,表明该消息队列越可能发生拥塞,可以适应性提高预设概率,即消息队列的长度越长,其相应的预设概率也越大。例如,设定预设概率的范围从0至100%,将预设概率与消息队列的长度与预设上限值或预设下限值的差值设定为线性关联。
值得注意的是,由于每个消息队列的预设上限值和预设下限值是确定的,用于接收待发送消息的目标消息队列的长度与预设上限值的差值和用于接收待发送消息的目标消息队列的长度与预设下限值的差值是对应的。则根据用于接收待发送消息的目标消息队列的长度与预设上限值的差值,确定与差值相关联的预设概率也可以扩展成包括:根据用于接收待发送消息的目标消息队列的长度与预设下限值的差值,确定与差值相关联的预设概率。
S40:将所述待发送消息存至所述目标消息队列。
由于目标消息队列并未发生拥塞,可以直接将待发送消息存至目标消息队列内以备后续传输。
S60:在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列。
例如,目标消息队列的优先级为第一级别,则将在队列***内确定第二级别或更低级别的消息队列。
本申请实施例中,可以在队列***内确定一个仅比目标消息队列的优先级低一级的消息队列,或者还可以在队列***内确定一个比目标消息队列的优先级低且队列长度最短的消息队列,甚至说,还可以在队列***内随机选取一个比目标消息队列低的任意一个消息队列。
S80:将所述待发送消息存至所述比目标消息队列的优先级低的消息队列。
本申请实施例所提供的消息队列的拥塞控制方法,本申请实施例所提供的消息队列的拥塞控制方法和装置,在接收待发送消息的目标消息队列发生拥塞时,不会主动丢弃该待发送消息,而是将该待发送消息转移至优先级低的其他消息队列,通过占用优先级更低的消息队列来保证待发送消息的传输,实现对目标消息队列拥塞进行控制的同时,还能够保证待发送消息的传输率。
本申请实施例中,所述队列***内消息队列的发送带宽被配置为与该消息队列的优先级正相关。
仍以队列***300内包括3个级别的消息队列为例,则可以使得优先级为最高级别的消息队列拥有最大的发送带宽,随着优先级级别的降低,适应性降低消息队列的带宽,以保证高级别的消息队列能占用更多的带宽,以尽可能多的传输高级别的消息。
值得注意的是,消息队列的发送带宽和其队列的长度与出口速率均正相关。发送带宽大的消息队列相对于发送带宽小的消息队列,具有更大的队列长度和出口速率,使得高级别的消息队列内的消息具有更大的传输优势。
本申请实施例中,在执行步骤S80的过程中若遇到待发送消息无法存至比目标消息队列的优先级低的消息队列时,可以直接返回消息入队失败信号,便于网络服务器或消息队列拥塞控制装置明确无法完成拥塞控制。
参图3所示,本申请第二实施例中,与前述第一实施例的区别在于,步骤S60之前还包括如下步骤:
S50:判断目标消息队列的优先级是否为最低级别,若是,执行步骤S60,若否,执行步骤S90。
S70、丢弃待发送消息或将目标消息队列内消息存入硬盘。
通过执行S50来明确目标消息队列的优先级是否为最低级别,在目标消息队列的优先级不是最低级别时,可以通过执行步骤S60,在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列;反之,在目标消息队列的优先级是最低级别时,队列***内没有比目标消息队列的优先级还低的消息队列,通过执行步骤S70,将待发送消息丢弃,或将目标消息队列内消息存入硬盘以防止这些消息丢失。
参图4所示,本申请第三实施例中,与前述第二实施例的区别在于,取消步骤S80,且步骤S60之后还包括如下步骤:
S70:将所述目标消息队列更新为所述比目标消息队列的优先级低的消息队列,并返回步骤S20。
通过对目标消息队列进行更新,并返回判断新的目标消息队列是否拥塞,并执行后续步骤。使得待发送消息能够被存至比优先级低的、并且不拥塞的消息队列内,提高了待发送消息的传输率。
接下来,将基于上述披露的方法实施例的技术方案,对本申请的装置实施例进行描述,由于消息队列的拥塞控制装置是基于上述消息队列的拥塞控制方法的原理产生的,故该装置的具体技术细节可以部分或全部参照上述方法的内容。
参图5所示,本申请实施例中,消息队列的拥塞控制装置,包括:
拥塞判断模块20,用于判断用于接收待发送消息的目标消息队列是否发生拥塞,所述目标消息队列位于包括若干具有优先级的消息队列的队列***内;
控制执行模块40,用于:在所述目标消息队列发生拥塞时,在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列,将所述待发送消息存至所述比目标消息队列的优先级低的消息队列;在所述目标消息队列未发生拥塞时,将所述待发送消息存至所述目标消息队列。
本申请实施例中,所述待发送消息具有优先级,所述待发送消息和目标消息队列的优先级相同。
本申请实施例中,所述拥塞判断模块20,具体用于:
判断用于接收待发送消息的目标消息队列的长度是大于预设上限值、小于预设下限值还是在预设上限值和预设下限值之间;
所述控制执行模块40,具体用于:
在所述目标消息队列的长度大于预设上限值,或,在所述目标消息队列的长度在预设上限值和预设下限值之间并以预设概率确定所述目标消息队列发生拥塞时,在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列。
本申请实施例中,所述拥塞判断模块20,具体用于:
判断用于接收待发送消息的目标消息队列的长度是大于预设上限值、小于预设下限值还是在预设上限值和预设下限值之间;
所述控制执行模块40,具体用于:
在所述目标消息队列的长度在预设上限值和预设下限值之间并以预设概率确定所述目标消息队列未发生拥塞时,或,在所述目标消息队列的长度小于预设下限值时,将所述待发送消息存至所述目标消息队列。
本申请实施例中,所述预设下限值和预设上限值根据用于接收待发送消息的目标消息队列的优先级确定,所述预设概率根据用于接收待发送消息的目标消息队列的长度与预设上限值的差值确定。
本申请实施例中,所述装置还包括优先级判断模块,用于:
在判断出所述目标消息队列发生拥塞后,判断所述目标消息队列的优先级是否为最低级别;
所述控制执行模块40,还用于:
在所述目标消息队列的优先级不是最低级别时,执行所述在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列的步骤;
在所述目标消息队列的优先级是最低级别时,丢弃所述待发送消息或将所述目标消息队列内消息存入硬盘。
本申请实施例中,所述装置还包括目标消息队列更新模块,用于:
在所述队列***内确定一个比所述目标消息队列的优先级低的消息队列之后,将所述目标消息队列更新为所述比目标消息队列的优先级低的消息队列,并通过所述拥塞判断模块所述判断用于接收待发送消息的目标消息队列是否发生拥塞。
本申请实施例中,所述控制执行模块40,具体用于:
将所述待发送消息存至所述队列***内仅比目标消息队列的优先级低一级的消息队列。
本申请实施例中,所述控制执行模块40,具体用于:
将所述待发送消息存至所述队列***内比目标消息队列的优先级低的、且队列长度最短的消息队列。
本申请实施例中,所述队列***内消息队列的发送带宽被配置为与该消息队列的优先级正相关。
本申请实施例所提供的消息队列的拥塞控制装置,在接收待发送消息的目标消息队列发生拥塞时,不会主动丢弃该待发送消息,而是将该待发送消息转移至优先级低的其他消息队列,通过占用优先级更低的消息队列来保证待发送消息的传输,实现对目标消息队列拥塞进行控制的同时,还能够保证待发送消息的传输率。
之前对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字***“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescription Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBoolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(JavaHardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby HardwareDescription Language)等,目前最普遍使用的是VHDL(Very-High-Speed IntegratedCircuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。