掌桥专利:专业的专利平台
掌桥专利
首页

消息的非对称协作队列管理

文献发布时间:2023-06-19 09:52:39


消息的非对称协作队列管理

背景技术

消息服务器处理大量的工作负载,每天在全球范围内共同处理数千亿条消息。但是,当传入消息超过服务器处理这些消息的能力时,消息服务器可能会变得不堪重负。发送到不堪重负的服务器的消息通常保留在队列中,直到被处理为止,这将导致延迟。当延迟太长时,消息可能会超时,从而导致消息发送者重新尝试该消息。此外,不堪重负的消息服务器可能继续接收新消息,从而增加了延迟和超时。此外,由于越来越多的资源专用于调度消息,因此产生的积压降低了计算机效率,从而减少了可用于实际处理消息的资源。这样,可以理解的是,持续需要改进用于被消息淹没的服务器进行响应的技术。

相对于这些考虑和其它考虑,提出了本文进行的公开内容。

发明内容

本文公开了用于被消息淹没的服务器进行响应的改进技术。最初可以将消息放在“传入”队列中。一旦服务器接受到相应的消息进行处理,就可以将该消息放入到所接受的队列中,并生成指示将处理该消息的指示。当所接受的队列中的消息的数量满足或超过规定的阈值,将拒绝寻址到传入队列的新消息。此外,直到对传入队列中的消息进行了处理(或满足其它条件),才向传入队列分配计算资源。一旦传入队列为空或满足其它条件,则向所接受的队列分配资源。一旦所接受的队列中的消息的数量满足或下降到低于第二阈值,则将再次允许新的消息进入传入队列。

在一些实施例中,将诸如电子邮件之类的消息放在“传入”队列中。传入队列包含服务器未接受的消息,不能保证将处理该传入消息。一旦服务器接受了一条消息,就可以将其从传入队列中删除,并放入“接受”队列中。保证所接受的队列中的消息将被服务器处理。

在一些实施例中,传入队列和所接受的队列是协作的-它们共享公共的计算资源池(例如,处理器、存储器、网络带宽等等),它们基于各种标准而彼此出让这些资源。例如,在正常操作状态下(即,当两个队列都没有超过消息的阈值数量时),可以与每个队列的大小成比例地分配计算资源。但是,在一些实施例中,可以给予所接受的队列更多或稍微多于比例的资源,以避免累积接受的消息。

另外地或替代地,当所接受的队列中的消息的数量满足或超过阈值时,服务器可以通过阻止将新消息添加到传入队列中来进行响应。虽然传入队列被阻止,但服务器仍然可以继续允许消息进入所接受的队列。继续允许消息进入所接受的队列是违反直觉的,这是因为响应是由所接受的队列中的大量消息触发的。从传入队列中拒绝消息,但允许消息进入所接受的队列,可以防止接收到的新消息超过可处理的数量的失控情况。同时,仍然可以将传入队列中已经存在的消息添加到所接受的队列中并进行处理。

同时,服务器可以将部分或全部的计算资源分配给传入队列。一旦传入队列中的消息的数量满足或下降到低于另一个阈值,服务器就可以将资源分配给所接受的队列。按此顺序来分配资源,以防止未接受的消息出现较大的延迟和超时。一旦所接受的队列中的消息的数量满足或下降到低于另一个规定的阈值,则随着处理恢复正常,可以再次将传入的消息添加到传入队列中。

传入队列还可能满足或超过消息的阈值数量。在一些实施例中,服务器通过拒绝来自传入队列的后续消息来做出响应。此外,服务器可以确定所接受的队列中的消息的数量是否较低(无论是绝对数量还是相对于传入队列中的消息的数量而言)。如果所接受的队列中的消息的数量很少,则可以将其它资源分配给传入队列。

虽然本文讨论了具有两个队列的实施例,但可以类似地设想具有其它队列的实施例。另外,虽然本文讨论了基于接受而将消息分配给队列的实施例,但也可以类似地考虑其它分类(例如,按请求类型、请求优先级等等)。此外,虽然参考了接收和处理消息,但也可以类似地设想其它目标(例如,请求、任务等等)。

应当理解的是,上面简要描述并且在下文进一步详细描述的主题的各个方面,可以实现为硬件设备、计算机实现的方法、计算机控制的装置或设备、计算系统或制品(例如,计算机存储介质)。虽然在一个或多个计算设备上执行的程序模块的一般上下文中呈现本文描述的主题,但是本领域普通技术人员应当认识到,可以结合其它类型的程序模块来执行其它实现。通常,程序模块包括例程、程序、组件、数据结构、以及执行特定任务或实现特定抽象数据类型的其它类型的结构。

本领域普通技术人员还应当理解,本文所描述的主题的各方面可以在本文未具体描述的那些之外的其它计算机系统配置上实践或者结合它们来实践,这些其它计算机系统包括多处理器系统、基于微处理器或可编程的消费电子产品、AR、VR和MR设备、视频游戏设备、手持计算机、智能手机、智能电视、自动驾驶汽车、智能手表、电子阅读器、平板计算设备、专用硬件设备、网络设备等等。

通过阅读以下详细说明并查看相关附图,上面所明确描述的功能和技术优势之外的其它功能和优势将变得显而易见。提供本概括部分以便用简化的形式介绍将在以下的详细描述中进一步描述的概念选择。本概括部分并不是旨在标识本发明的关键特征或本质特征,也不是使用该概括部分来限制本发明的保护范围。

附图说明

图1是示出用于本文公开的实施例的操作环境的各方面的计算系统图,该操作环境包括用于处理传入消息的非对称的协作队列。

图2是示出当所接受的队列中的消息的数量满足或超过阈值时的非对称、协作队列的计算系统图。

图3是示出对满足或超过所接受的队列中的消息的阈值数量的响应的计算系统图。

图4是示出响应于超过接收队列中的消息的阈值数量,而如何从传入队列优先处理消息的计算系统图。

图5是示出在已经用完传入队列之后,优先处理来自所接受的队列中的消息的计算系统图。

图6是示出处理来自所接受的队列中的消息,直到超过另一个阈值为止的计算系统图。

图7是示出所接受的队列中的消息的数量下降到另一个阈值以下的计算系统图。

图8是示出对于接收队列中的消息的数量下降到另一个阈值以下的响应的计算系统图。

图9是示出传入队列中的消息的数量高于规定的阈值的计算系统图。

图10是示出对于传入队列中的消息的数量上升到超过所规定的阈值的响应的计算系统图。

图11是示出在对传入队列中的消息的数量上升到超过所规定的阈值进行响应之后,对消息进行处理的计算系统图。

图12是示出在传入队列中的消息的数量下降到低于另一个阈值之后,处理返回到正常状态的计算系统图。

图13示出了用于实现如图所示和下面所描述的本文所公开的技术的各方面的例程的各方面。

图14是示出用于计算系统的说明性计算机硬件和软件架构的计算机架构图,该计算系统能够实现本文提出的技术和技术的各个方面。

具体实施方式

以下的详细说明描述了服务器处理大量消息的改进技术。如上所述,在服务器处理消息之前,使用非对称协作队列存储消息(也称为请求、任务等)。这些队列是不对称的,这是因为它们存储不同类型的消息。例如,一个队列可以存储从消息生成器接收的传入消息(在服务器接受该消息之前),而另一个队列可以存储已被接受以便进行处理的消息。以这种方式,可以分阶段地处理消息,例如在完全处理之前先通过两个队列。

也可以认为这些队列是不对称的,这是因为消息生成器基于消息所在的队列而有不同的期望。从消息生成器接收并存储在传入队列中的消息可能被丢弃(即,不进行处理),因此不存在该消息将被处理的期望。通过不期望该消息将被处理,消息生成器可以监测消息是否失败或进展到所接受的队列,如果失败则重新尝试该消息。同时,一旦将消息添加到所接受的队列中进行处理,消息生成器将期望对该消息进行处理,从而使服务器能够处理失败、重试等等。

在一些实施例中,非对称队列是协作的,这是因为它们使用处理器、存储器、网络带宽和其它计算资源的公共池,并且因为它们在需要时彼此出让计算资源。在一些实施例中,与每个队列中的项目数量成比例地分配计算资源,或者具有朝向所接受的队列的偏差(例如,1-10%或更多的偏移)。但是,如下所述,计算资源分配可能响应于大量的消息而发生变化。

在一些实施例中,向每个队列分配优先级,并且部分地基于这些优先级,对大量的消息进行响应。例如,传入队列的优先级可能较低(也称为‘非优先’),而所接受的队列的优先级可能较高(也称为‘优先’)。下面描述响应于大量的消息,如何对不同优先级的队列进行处理的详细信息。

在一些实施例中,每个消息与一个客户(例如,客户端、客户账户、租户等)相关联。每个客户可以与在处理时将使用传入和接收队列中的消息的未决IO(例如,磁盘带宽)的配额(输入/输出的配额)相关联。配额可以是基于客户组织中的个人数量、客户已支付的金额、与客户相关联的优先级、分配给特定服务器的客户数量等等。配额可以是绝对数字,例如数兆字节、某种速率(例如,每秒千字节数、给定服务器上可用IO带宽的百分比等等)。

在一些实施例中,在从消息生成器接收到消息时,确定与该消息相关联的客户是否超过其未决IO的配额。例如,消息处理引擎可以确定接收到的消息是否导致相关联客户的未决IO超过其配额,如果是,则将拒绝该消息进入到传入队列中。

另外地或替代地,可以确定服务器的计算资源是否超负荷。当系统被设置为实现最大吞吐量时,可能会发生这种情况,从而使CPU和其它资源承受近乎持续的压力。例如,可以确定专用于消息处理的CPU周期的数量或百分比已超过规定的阈值。其它确定包括:检测到CPU温度的升高、高耗电量等等。一旦确定服务器的计算资源超负荷,在一个实施例中,在丢弃用于传入队列的新消息的时候,暂停消息的处理。

图1是示出用于本文公开的实施例的操作环境的各方面的计算系统图,该操作环境包括用于处理传入消息的非对称的协作队列。如图1中所示,系统100公开了在客户端计算机101上执行的消息生成器102,其通过网络106与在服务器计算机103上执行的消息处理引擎104进行通信。虽然图1描绘了单个消息生成器102和消息处理引擎104,但可以类似地预期在相同和/或多个计算设备上执行的多个消息生成器和消息处理引擎。

在一些实施例中,传入队列108包括先进先出(FIFO)数据结构,该数据结构存储从消息生成器102接收的消息109。传入队列108存储消息114,直到CPU可用于处理它们为止。消息生成器102对存储在传入队列108中的消息没有期望(可以对该消息进行成功地处理以完成、丢弃、超时等等)。如果无论如何该消息失败,则消息生成器102可以重新提交该消息,将该消息提交到不同的服务器,或者以其它方式处理该失败。

传入队列108可以向处理器(CPU)112A-112D中的一个或多个提供排队的消息(例如,消息111)。在一些实施例中,处理器将立即处理该消息。然而,在其它实施例中,处理传入消息可以包括:接受该消息(或者从其派生的新消息,例如消息115)并将其复制到所接受的队列110中以进行进一步处理。

在一些实施例中,所接受的队列110存储接受消息116。可以使用相同的处理资源池(例如,CPU 112A-112D)来处理消息116。可以基于贯穿本文档描述的多种因素,在传入队列108和所接受的队列110之间分配处理资源。然而,简要地,当消息处理引擎104处于正常状态时,即,当传入队列108或所接受的队列110均不具有超过规定的阈值数量的项目时,一个实施例与每个队列中的消息的数量成比例地分配处理资源。在图1中,通过滑块122来描绘该分配。

在一些实施例中,每个队列具有在触发响应之前可以存储的阈值消息数。每个队列的阈值可以相同,也可以不同。这些阈值可以是部分地基于可用于处理消息的计算资源量。例如,具有4个CPU的服务器的阈值可能低于具有8个CPU的服务器的阈值。阈值也可以是基于处理消息所花费的时间,而该时间量取决于计算能力和任务复杂性。基于关于服务器利用率的反馈,阈值可以是动态的。例如,在服务器103频繁空闲时,可以增加阈值,或者在确定服务器103以全容量运行太长时间时,可以降低阈值。阈值也可以是用户定义的,其被设置为缺省值,或者从配置文件中提取。如图所示,阈值118与传入队列108相关联,而阈值120与所接受的队列110相关联,并且两个阈值均未满足。

图2是示出当所接受的队列中的消息的数量超过阈值时的非对称协作队列的计算系统图200。具体而言,图2描绘了已经接受消息202,并将其作为消息204放在所接受的队列110中。

图3是示出对超过所接受的队列中的消息的阈值数量的响应的计算系统图300。在一些实施例中,该响应包括:拒绝传入消息进入传入队列108,如框302所描绘的。另外地或替代地,可以将计算资源基本上或完全地分配给队列108中的处理消息114,如滑块122朝着传入队列108移动所指示的。

图4是示出响应于超过接收队列中的消息的阈值数量,而如何从传入队列优先处理消息的计算系统图400。例如,消息处理引擎104已经接受消息114,如传入队列108中的消息轮廓402和位于所接受的队列110中的其它消息404所指示的。

图5是示出在已经用完传入队列之后,优先处理来自所接受的队列中的消息的计算系统图500。在一些实施例中,一旦已经用完传入队列108,则可以基本上或完全地将计算资源分配给处理来自所接受的队列110的消息,如滑块122朝向所接受的队列110移动所描绘的。

图6是示出处理来自所接受的队列中的消息,直到超过另一个阈值为止的计算系统图600。在一些实施例中,许多消息116已经被处理,所接受的队列110中的消息的数量降低到阈值120以下。在一些实施例中,处理可以从该状态返回到正常状态,即,返回到正常处理状态的触发下降到阈值120以下。但是,在其它实施例中,可以继续所接受的队列110中的消息的处理,直到用尽所接受的队列110为止,此时消息处理引擎104可以返回到正常处理状态。

图7是示出所接受的队列中的消息的数量下降到另一个阈值以下的计算系统图700。在一些实施例中,在所接受的队列110中的消息的数量下降到阈值602以下之后,消息处理引擎104返回到正常处理状态。

图8是示出对于接收队列中的消息的数量下降到另一个阈值602以下的响应的计算系统图800。在一些实施例中,去除框302,允许新消息进入传入队列108。同时,滑块122反映了由于预期新消息将到达并从传入队列108中进行处理,而使计算资源远离针对所接受的队列110的实质分配或完整分配的重新平衡。

图9是示出传入队列中的消息的数量高于规定的阈值的计算系统图900。在一些实施例中,滑块122反映了将70%的计算资源分配给传入队列108,因为传入队列108在任一队列中存储了大约70%的消息(14个中的10个)。消息404中的一个尚未被处理,而在消息1002压到传入队列108所花费的时间内,已经接受了三个消息1004。

图10是示出对于传入队列中的消息的数量上升到超过所规定的阈值的响应的计算系统图1000。在一些实施例中,响应于传入队列108不堪重负,框1002拒绝另外的传入消息。通过阻止传入消息,给予服务器104时间来处理现有的排队消息。在一些实施例中,如果所接受的队列110中的消息的数量相对于传入队列108中的消息的数量较低(例如,传入队列108具有比所接受的队列110多2x、3x、4x、10x或20x的消息,但可以类似地预期其它比率),然后,处理资源可以偏向于传入队列108。

图11是示出在对传入队列中的消息的数量上升到超过所规定的阈值进行响应之后,对消息进行处理的计算系统图1100。在一些实施例中,传入队列108中的消息的数量已经减少到第二阈值122以下,从而触发传入队列重新打开。同时,已经将某些消息1002作为消息1102而接受到所接受的队列110中。

图12是示出在传入队列中的消息的数量下降到低于第二阈值122之后,处理返回到正常状态的计算系统图1200。在一些实施例中,已去除了框1002,并且可以接收和处理另外的消息。

图13示出了例程1300的各方面,该例程1300用于实现如图所示和如上所述的本文公开的技术的各个方面。本领域普通技术人员应当理解,未以任何特定顺序来呈现本文所公开的方法的操作,并且以替代的顺序执行这些操作中的一些或全部操作也是可能的和可预期的。为了便于描述和说明起见,已按演示顺序介绍了这些操作。在不脱离所附权利要求的保护范围的情况下,可以添加、省略操作,一起地和/或同时地执行操作。

还应当理解,所示的方法可以在任何时间结束,并且不需要整体执行。可以通过执行计算机存储介质上包括的计算机可读指令,来执行方法的一些或全部操作和/或基本等效的操作,如本文所规定的。如在说明书和权利要求书中使用的术语“计算机可读指令”及其变体,在本文中广泛地用于包括例程、应用程序、应用程序模块、程序模块、程序、组件、数据结构、算法等等。可以在包括单处理器或多处理器系统、小型计算机、大型计算机、个人计算机、手持计算设备、基于微处理器的可编程消费电子产品、其组合等等的各种系统配置上,实现计算机可读指令。

因此,应当理解的是,本文所描述的逻辑操作实现为:(1)计算机实现的动作序列或者在计算系统上运行的程序模块(例如,本文所描述的那些);和/或(2)互连的机器逻辑电路或者计算系统中的电路模块。该实现是取决于计算系统的性能和其它要求的选择问题。因此,这些逻辑操作可以用软件、固件、专用数字逻辑以及其任意组合来实现。

另外,可以结合上面参照图1至图12所描述的示例性计算设备,来实现图13和其它附图中所示的操作。例如,本文描述的各种设备和/或模块可以接收、接受和/或处理消息,以及基于计算资源使用、队列容量和/或阈值来管理消息处理。

例程1300在操作1302处开始,其中在操作1302处,在服务器计算设备103上执行的消息处理引擎104将多个消息接收到传入队列108中。在一些实施例中,该消息包括电子邮件,消息处理引擎104包括消息服务器(例如,电子邮件服务器)。但是,还可以类似地考虑其它消息类型,例如Web请求、Web服务请求、文本消息、即时通消息、数据库请求、文件系统请求、或者发送到计算机的任何其它类型的消息。在一些实施例中,从诸如智能电话、平板设备、台式计算机或任何其它启用网络的计算设备之类的消息生成器接收消息。然后,例程1300从操作1302转到操作1304。

在操作1304处,消息处理引擎104处理来自传入队列的一个或多个消息。在一些实施例中,每个消息由一组处理线程、处理器、服务或类型的处理设备中的一个(例如,CPU112A-112D)来处理。在一些实施例中,处理来自传入队列的消息包括:接受该消息。接受消息可以包括:向调用进程显式地或隐式地指示已经接收该消息并且将进行处理。在一些实施例中,接受消息可以包括:将接受的消息添加到所接受的队列110中。在一些实施例中,调用进程(例如,消息生成器102)可以期望将处理接受的消息。在一些实施例中,向所接受的队列赋予高优先级,或者以其它方式优选所接受的队列。

然后,例程1300转到操作1306,其中在操作1306处,消息处理引擎104处理来自所接受的队列110的一个或多个消息。在一些实施例中,用于处理来自传入队列108的消息的同一组处理设备,用于处理来自所接受的队列110的消息。

然后,例程1300转到操作1308,其中处理消息引擎104在传入队列108和所接受的队列110之间分配资源。在一些实施例中,基于每个队列中的消息的相对数量来分配计算资源。然而,在一些实施例中,为了避免压倒所接受的队列110,处理资源可以偏向于所接受的队列110。

然后,例程1300转到操作1310,其中消息处理引擎104确定所接受的队列中的消息的数量是否满足或超过规定的阈值。确定所接受的队列中的消息的数量是否满足或超过规定的阈值,可以确定服务器计算设备103是否正在接近其容量。另外地或替代地,确定所接受的队列中的消息的数量满足或超过规定的阈值,可以指示消息处理延迟太高。

在一些实施例中,该阈值可以包括绝对数或者最大队列大小的百分比。在一些实施例中,可以基于消息处理引擎的测量的吞吐量,动态地确定该阈值。例如,消息处理引擎可以尝试不同的阈值,并测量吞吐量的最终水平(例如,每秒处理的消息的数量),然后选择产生最高吞吐量的阈值。在一些实施例中,可以动态地选择阈值以使消息处理延迟最小化(例如,通过尝试不同的阈值,测量平均消息吞吐量,并选择产生最低延迟的阈值)。在一些实施例中,可以基于这些因素和其它因素的组合来选择阈值,平衡用户定义的对低延迟、高吞吐量或其它度量(例如,能量效率、崩溃的倾向、冷却度量或操作服务器计算设备103的其它方面)的偏好。

然后,例程1300转到操作1312,其中,消息处理引擎104响应于确定接收队列中的消息的数量超过了规定的阈值,阻止将后续消息添加到传入队列108中。通过阻止将消息添加到传入队列108中,但允许消息继续添加到所接受的队列110中,消息处理引擎104创建了同时允许不间断地处理现有消息的喘息空间。

在一些实施例中,通过丢弃消息(即,不响应它们)来阻止将消息添加到传入队列108中。在其它实施例中,消息处理引擎104可以返回错误码,例如,服务器已满并暂时不能接受新的处理消息的指示。

然后,例程1300转到操作1314,其中在操作1314处,消息处理引擎104将计算资源转移处理传入队列108。在一些实施例中,将所有的或者基本上所有的计算资源都分配给处理来自传入队列108的消息,而几乎不留任何资源来处理来自所接受的队列110的消息。用此方式,消息在传入队列中。但是,在其它实施例中,可以与每个队列中存储的消息的数量成比例地,在传入队列108和所接受的队列110之间分配资源,无论是否偏向于传入队列108。

然后,例程1300转到操作1316,其中在操作1316处,消息处理引擎104将计算资源转移到处理所接受的队列110。在一些实施例中,将所有的或者基本上所有的计算资源都转移到处理所接受的队列110,以便尽可能快地处理所接受的队列110中的消息。

然后,例程1300转到操作1318,其中在操作1318处,消息处理引擎104确定存储在所接受的队列110中的消息的数量是否下降到第二阈值以下。在一些实施例中,将第二阈值定义为消息的绝对数量、第一阈值的百分比(例如,第一阈值的505)等等。另外地或替代地,可以基于消息处理引擎的反馈,来动态地定义第二阈值。例如,当采用不同的第二阈值时,可以评估总体吞吐量、消息延迟和其它指标,并且可以使用这些因素中的一个或组合来选择第二规定的阈值。例程1300从操作1318转到操作1320,在操作1320处结束。

应当理解的是,上面所描述的主题可以实现为计算机控制的装置、计算机进程、计算系统,或者实现为诸如计算机可读存储介质之类的制品。示例方法的操作在各个方框中示出,并且参考这些框进行总结。将这些方法示出为框的逻辑流程,每个框代表可以用硬件、软件或者其组合实现的一个或多个操作。在软件的上下文中,这些操作表示存储在一个或多个计算机可读介质上的计算机可执行指令,当这些指令被一个或多个处理器执行时,使所述一个或多个处理器能够执行所叙述的操作。

通常,计算机可执行指令包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、模块、组件、数据结构等等。描述操作的顺序不应被理解为限制性的,并且任意数量的所描述操作可以以任何顺序来执行、以任何顺序组合、细分为多个子操作和/或并行地执行,以实现所描述的处理。所描述的处理可以由与一个或多个设备相关联的资源(例如,一个或多个内部或外部CPU或GPU)和/或一个或多个硬件逻辑(例如,现场可编程门阵列(“FPGA”)、数字信号处理器(“DSP”)或其它类型的加速器)来执行。

可以通过由一个或多个通用计算机或处理器执行的软件代码模块,来体现并完全自动化上面所描述的所有方法和过程。这些代码模块可以存储在任何类型的计算机可读存储介质或其它计算机存储设备中(例如,以下所描述的那些)。这些方法中的一些或全部可以替代地体现在专用计算机硬件(例如,以下描述的那些)中。

本文所描述的和/或在附图中描绘的流程图中的任何例程描述、元素或框,都应当被理解为潜在地表示模块、段或代码的一部分,其包括用于实现特定逻辑功能或例程中的元素的一个或多个可执行指令。替代实施方式包括在本文所描述的示例的保护范围内,其中,根据所涉及的功能,可以删除元素或功能,或者可以按照与所示出或所讨论的不同顺序来执行,其包括基本上同步地执行或者以相反的顺序执行,如本领域普通技术人员所理解的。

图14示出了用于能够执行本文所描述的程序组件的计算机(例如,执行消息处理引擎104的服务器计算机103)的示例性计算机架构1400的其它细节。因此,图14中所示的计算机架构1400示出了用于服务器计算机、移动电话、PDA、智能电话、桌面型计算机、上网本计算机、平板计算机和/或膝上型计算机的架构。可以利用计算机架构1400来执行本文提出的软件组件的任何方面。

图14所示的计算机架构1400包括中央处理单元1402(“CPU”)、系统存储器1404(其中,系统存储器1404包括随机存取存储器1406(“RAM”)和只读存储器(“ROM”)1408)、以及将存储器1404耦合到CPU 1402的系统总线1410。在ROM 1408中存储基本输入/输出系统,该基本输入/输出系统包含有助于在计算机架构1400中的各个元素之间传递信息的基本例程(例如,在启动期间)。计算机架构1400还包括用于存储操作系统1407、其它数据和一个或多个消息处理引擎104的大容量存储设备1412。

大容量存储设备1412通过连接到总线1410的大容量存储控制器(没有示出)连接到CPU 1402。大容量存储设备1412以及其关联的计算机可读介质为计算机架构1400提供非易失性存储。虽然本文包含的计算机可读介质的描述是指大容量存储设备(例如,固态驱动器、硬盘或CD-ROM驱动器),但本领域普通技术人员应当理解,计算机可读介质可以是计算机架构1400能够访问的任何可用的计算机存储介质或通信介质。

通信介质包括计算机可读指令、数据结构、程序模块或调制数据信号中的其它数据(例如,载波或其它传输机制),并且包括任何传送介质。术语“调制的数据信号”意味着以将信息编码在信号中的方式改变或设置其一个或多个特性的信号。举例而言,但非做出限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质、以及诸如声波、RF、红外线和其它无线介质之类的无线介质。上述的任何组合也应包括在计算机可读介质的范围内。

举例而言,但非做出限制,计算机存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。例如,计算机介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它固态存储器技术、CD-ROM、数字通用光盘(“DVD”)、HD-DVD、BLU-RAY或其它光学存储器、盒式磁带、磁带、磁盘存储器或其它磁存储设备、或者可以用于存储期望信息并且可由计算机架构1400访问的任何其它介质。为了便于说明权利要求起见,短语“计算机存储介质”、“计算机可读存储介质”以及其变型本身不包括波形、信号和/或其它临时性和/或无形通信介质。

根据各种配置,计算机架构1400可以使用通过网络1456和/或另一网络(没有示出)到远程计算机的逻辑连接,在联网环境下进行操作。计算机架构1400可以通过连接到总线1410的网络接口单元1414连接到网络1456。应当理解,网络接口单元1414也可以用于连接到其它类型的网络和远程计算机系统。计算机架构1400还可以包括输入/输出控制器1416,以用于接收和处理来自包括键盘、鼠标或电子触笔(图14中没有示出)的多个其它设备的输入。类似地,输入/输出控制器1416可以向显示屏、打印机或其它类型的输出设备(图14中也没有示出)提供输出。

应当理解的是,本文所描述的软件组件可以在加载到CPU 1402中并执行时,将CPU1402和整个计算机架构1400从通用计算系统转换为被定制为促进本文所呈现的功能的专用计算系统。CPU 1402可以由任何数量的晶体管或其它分立电路元件构成,这些元件可以单独地或共同地呈现任何数量的状态。具体而言,CPU 1402可以响应于包含在本文所公开的软件模块内的可执行指令,作为有限状态机进行操作。这些计算机可执行指令可以通过指定CPU 1402如何在状态之间转换来变换CPU 1402,从而变换晶体管或者构成CPU 1402的其它分立硬件元件。

对本文给出的软件模块进行编码还可以转换本文所给出的计算机可读介质的物理结构。在本说明书的不同实施方式中,物理结构的特定变换可以取决于各种因素。这些因素的例子可以包括但不限于:用于实现计算机可读介质的技术、计算机可读介质被表征为主存储器还是辅助存储器等等。例如,如果计算机可读介质实现为基于半导体的存储器,则可以通过变换半导体存储器的物理状态将本文所公开的软件编码在计算机可读介质上。例如,软件可以变换构成半导体存储器的晶体管、电容器或其它分立电路元件的状态。该软件还可以转换这些组件的物理状态,以便在其上存储数据。

再举一个例子,本文所公开的计算机可读介质可以使用磁技术或光技术来实现。在这样的实现中,当在磁性或光学介质中编码本文给出的软件时,软件可以变换磁性或光学介质的物理状态。这些变换可以包括改变给定磁介质内的特定位置的磁特性。这些变换还可以包括改变给定光学介质内的特定位置的物理特征或特性,以改变那些位置的光学特性。在不脱离本说明书的保护范围和精神的情况下,物理介质的其它变换也是可能的,前述示例只是有助于促进该讨论。

根据以上所述,应当理解,在计算机架构1400中发生许多类型的物理变换,以便存储和执行本文中呈现的软件组件。还应当理解,计算机架构1400可以包括其它类型的计算设备,其包括手持式计算机、嵌入式计算机系统、个人数字助理、以及本领域普通技术人员已知的其它类型的计算设备。还可以预期计算机架构1400不包括图14中所示的所有组件,可以包括没有在图14中明确示出的其它组件,或者可以利用与图14中所示的架构完全不同的架构。

示例性条款

本文提出的公开内容涵盖以下示例条款中阐述的主题。

示例1:一种系统包括:一个或多个数据处理单元(1402);计算机可读介质(1404),在其上编码有计算机可执行指令(104)以使所述一个或多个数据处理单元(1402)用于:将多个消息(113)接收到传入队列(108)中;将所述多个消息中的至少一个消息(115)添加到所接受的队列(110)中,其中,所述传入队列(108)和所接受的队列(110)共享计算资源(112);确定所接受的队列(110)中的消息的数量超过阈值数量(120);响应于确定所接受的队列(110)中的所述消息的数量超过所述阈值数量(120):阻止(302)后续消息进入所述传入队列(108);转移计算资源(112)以处理所述传入队列(108)中的消息;响应于来自所述传入队列(108)的所述消息被处理,分配计算资源(112)以处理来自所接受的队列(110)的消息;删除所述阻止(302)以允许消息进入所述传入队列(108)。

示例2:根据示例1所述的系统,其中,处理来自所接受的队列(110)的消息,直到处理完所接受的队列(110)为止。

示例3:根据示例1所述的系统,其中,处理来自所接受的队列(110)的消息,直到所请求的队列(110)中的所述消息的数量下降到低于第二阈值(602)。

示例4:根据示例1所述的系统,其中,在阻止来自所述传入队列(108)的后续消息的时候,允许将消息添加到所接受的队列(110)。

示例5、根据示例1所述的系统,其中,将所述多个消息中的至少一个消息(115)添加到所接受的队列(110)中包括:使用所述共享的计算资源(112)来处理存储在所述传入队列(108)中的消息(114)。

示例6:根据示例1所述的系统,其中,所述计算机可执行指令(104)还使所述一个或多个数据处理单元(1402)用于:确定所述传入队列(108)中的消息的数量何时超过传入队列阈值(118):响应于确定所述传入队列(108)中的所述消息的数量超过所述传入队列阈值(118):阻止(302)后续消息进入所述传入队列(108);确定所述传入队列(108)中的所述消息的数量是否显著超过所接受的队列中的所述消息的数量;以及当所述传入队列(108)中的所述消息的数量显著超过所接受的队列(110)中的所述消息的数量时,使计算资源偏向于所述传入队列(108)。

示例7:根据示例1所述的系统,其中,每个消息与客户账户相关联,其中客户账户具有未决输入/输出(IO)操作的配额,并且其中,来自于已经超过未决IO的所述配额的客户的消息被禁止将消息添加到所述传入队列(108)中。

示例8:根据示例1所述的系统,其中,基于估计的IO量来计算未决IO操作的所述配额,以完成所述传入队列(108)和所接受的队列(110)中的消息。

示例9:根据示例1所述的系统,其中,当所述传入队列(108)和所接受的队列(110)没有超过它们各自的阈值时,与每个队列中的消息的数量成比例地分配共享的计算资源。

示例10:根据示例9所述的系统,其中,共享的计算资源偏向于所接受的队列(110)。

示例11:一种系统包括:一个或多个数据处理单元(1402);计算机可读介质(1404),在其上编码有计算机可执行指令(104)以使所述一个或多个数据处理单元(1402)用于:将多个消息(113)接收到传入队列(108)中;将所述多个消息中的至少一个消息(115)添加到所接受的队列(110)中,其中,所述传入队列(108)和所接受的队列(110)共享计算资源(112);确定所接受的队列(110)中的消息的数量超过阈值数量(120);响应于确定所接受的队列(110)中的所述消息的数量超过所述阈值数量(120):阻止(302)后续消息进入所述传入队列(108);响应于来自所述传入队列(108)的所述消息被处理,分配计算资源(112)以处理来自所接受的队列(110)的消息;删除所述阻止(302)以允许消息进入所述传入队列(108)。

示例12:根据示例11所述的系统,其中,处理来自所接受的队列(110)的消息,直到处理完所接受的队列(110)为止。

示例13:根据示例11所述的系统,其中,处理来自所接受的队列(110)的消息,直到所请求的队列(110)中的所述消息的数量下降到低于第二阈值(602)。

示例14:根据示例11所述的系统,其中,在阻止来自所述传入队列(108)的后续消息的时候,允许将消息添加到所接受的队列(110)。

示例15、:一种由计算设备采用的方法,包括:将多个消息(113)接收到传入队列(108)中;将所述多个消息中的至少一个消息(115)添加到所接受的队列(110)中,其中,所述传入队列(108)和所接受的队列(110)共享计算资源(112);确定所接受的队列(110)中的消息的数量超过阈值数量(120);响应于确定所接受的队列(110)中的所述消息的数量超过所述阈值数量(120),用于:阻止(302)后续消息进入所述传入队列(108);响应于来自所述传入队列(108)的所述消息被处理,分配计算资源(112)以处理来自所接受的队列(110)的消息;删除所述阻止(302)以允许消息进入所述传入队列(108)。

示例16:根据示例15所述的方法,还包括:检测计算资源112何时不堪重负,并且响应于检测到计算资源112不堪重负,停止处理来自传入队列(108)和所接受的队列(110)的消息。

示例17:根据示例15所述的方法,还包括:确定所述传入队列(108)中的消息的数量何时超过传入队列阈值(118):响应于确定所述传入队列(108)中的所述消息的数量超过所述传入队列阈值(118),用于:阻止(302)后续消息进入所述传入队列(108);确定所述传入队列(108)中的所述消息的数量是否显著超过所接受的队列(110)中的所述消息的数量;以及当所述传入队列(108)中的所述消息的数量显著超过所接受的队列(110)中的所述消息的数量时,使计算资源偏向于所述传入队列(108)。

示例18:根据示例15所述的方法,其中,每个消息与客户账户相关联,其中客户账户具有未决输入/输出(IO)操作的配额,并且其中,来自于已经超过未决IO的所述配额的客户的消息被禁止将消息添加到所述传入队列(108)中。

示例19:根据示例15所述的方法,其中,基于估计的IO量来计算未决IO操作的所述配额,以完成所述传入队列(108)和所接受的队列(110)中的消息。

示例20:根据示例15所述的方法,其中,处理来自所接受的队列(110)的消息,直到所请求的队列(110)中的所述消息的数量下降到低于第二阈值(602)。

与许多其它技术优势相比,本文的技术与使服务器计算机被消息淹没的先前解决方案相比,可以更高效地利用诸如处理器周期、存储器、网络带宽和功耗之类的计算资源。另一种技术优势是减少消息处理延迟并避免服务器负担过重时消息发生超时。还可以通过所公开的主题的实施方式,来实现本文未具体提及的其它技术益处。

虽然利用特定于结构特征和/或方法动作的语言来描述了这些技术,但应当理解的是,所附权利要求书并不是必需限于上面所描述的这些特定特征或动作。相反,只是将这些特征和动作描述成这些技术的示例性实施方式。

相关技术
  • 消息的非对称协作队列管理
  • 队列管理方法和队列管理器、队列消息的处理方法和系统
技术分类

06120112331819