针对消息收发服务的高密度托管的制作方法

文档序号:6400305阅读:225来源:国知局
专利名称:针对消息收发服务的高密度托管的制作方法
技术领域
本发明涉及消息收发服务,尤其涉及针对消息收发服务的消息迁移。
背景技术
过去几十年已经见证了计算机能力的显著增长。如今的典型计算机常常具有十年前的典型计算机的许多倍处理能力和存储能力。即使在处理和存储能力方面得到显著增长,低效算法混合着许多并行请求仍然会导致性能问题。尽管获得更快的计算机或更多的计算机可能解决性能问题,但是这样的解决方案可能在购买、功耗和维护方面是昂贵的。在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技术领域。

发明内容
简言之,此处所描述的主题的各方面涉及针对消息收发服务的消息迁移。在各方面,基于阈值被越过来作出消息需要被迁移的判定。作为响应,指示代理把与所述消息相关联的数据迁移到另一位置。 所述代理使用各种因素来确定要迁移的一个或多个队列。当队列被迁移时,在该迁移的第一部分期间,在发送者发送新消息和接收者消费消息时消息可以被添加到该队列和从该队列移除。在该迁移的第二部分期间,冻结该队列以不允许该队列被用于接收新消息和递送所排队的消息。该迁移可以被组织以尝试实现某些目标。提供本发明内容是为了简要地标识在以下详细描述中进一步描述的主题的一些方面。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。除非上下文清楚地指出,否则短语“此处所描述的主题”指的是具体实施方式
中描述的主题。术语“方面”应被当作“至少一个方面”。标识具体实施方式
中所描述的主题的各方面不旨在标识所要求保护的主题的关键特征或必要特征。上述各方面和此处所描述的主题的其它方面是借助于示例说明的,并且不受附图限制,附图中相同的标号指示相似的元素。


图1是表示其中可结合此处描述主题的各方面的示例性通用计算环境的框图;图2是表示此处所描述主题的各方面可以在其中操作的示例性环境的框图;图3是表示根据在此所述的主题各方面的示例性消息收发服务和相关联的数据存储的框图;图4是概括地表示根据此处所描述的主题的各方面的、可在消息收发服务处进行的示例性动作的流程图;以及图5是概括地表示根据此处所描述的主题的各方面的、可从发送者角度进行的示例性动作的流程图。
具体实施例方式定义如本文所使用的,术语“包括”及其变体被当作开放式术语,表示“包括但不限于”。除非上下文另外清楚地指示出,否则术语“或”被当作“和/或”。术语“基于”被当作“至少部分地基于”。术语“一个实施例”和“一实施例”被当作“至少一个实施例”。术语“另一实施例”被当作“至少一个其他实施例”。如本文所使用的,诸如“一”和“该”等术语包括了所指示的项或动作中的一个或多个。具体而言,在权利要求书中,对某一项的引用一般表示存在至少一个这样的项,并且对一动作的引用表示执行该动作的至少一个示例。本文中有时可使用术语“第一”、“第二”、“第三”等等。没有其他上下文,权利要求中对这些术语的使用不意在暗示排序,而是用于标识的目的。例如,短语“第一版本”和“第二版本”不一定意味着第一版本是真正的第一个版本或是在第二版本之前创建的,或甚至是第一版本是在第二版本之前被请求或操作的。相反,这些短语用于标识不同的版本。标题是仅出于方便起见的;关于给定话题的信息可在其标题指示该话题的节之外找到。其他显式或隐式定义可包括在下文中。示例性操作环境 图1示出可在其上实现本文所描述的主题的各方面的合适的计算系统环境100的示例。计算系统环境100仅为合适的计算环境的一个示例,并非旨在对本文所描述的主题的各方面的使用范围或功能提出任何限制。也不应该将计算环境100解释为对示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。本文所描述的主题的各方面可与众多其他通用或专用计算系统环境或配置一起操作。可适用于这里所述的主题的各方面的已知计算系统、环境或配置的例子包括个人计算机,服务器计算机,手持或膝上型设备,多处理器系统,基于微控制器的系统,机顶盒,可编程消费电子设备,网络PC,微型计算机,大型计算机,个人数字助理(PDA),游戏设备,打印机,包括机顶盒、媒体中心或其他家电的家电设备,嵌入汽车或附加到汽车的计算设备,其他移动设备,包括任何上述系统或设备的分布式计算环境等等。本文所描述的主题的各方面可在由计算机执行的诸如程序模块等计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。本文所描述的主题的各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。参考图1,用于实现本文所描述的主题的各方面的示例性系统包括计算机110形式的通用计算设备。计算机可包括能够执行指令的任何电子设备。计算机110的组件可包括处理单元120、系统存储器130以及将包括系统存储器的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线或存储器控制器、外围总线、以及局部总线。作为示例,而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA (EISA)总线、视频电子技术标准协会(VESA)局部总线、也称为夹层(Mezzanine)总线的外围部件互连(PCI)总线、扩展外围部件互连(PC1-X)总线、高级图形端口(AGP)、以及PCI Express (PCIe)。处理单元120可以连接到硬件安全设备122。安全设备122可以存储并能够生成密钥,所述密钥可用于保护计算机Iio的各个方面。在一个实施例中,安全设备122可以包括可信平台模块(TPM)芯片、TPM安全设备等等。计算机110通常包括各种计算机可读介质。计算机可读介质可以是能由计算机110访问的任何可用介质,并包含易失性和非易失性介质以及可移动、不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访 问的任一其它介质。通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述的任意组合也应包含在计算机可读介质的范围内。系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM) 131和随机存取存储器(RAM) 132。包含诸如在启动期间帮助在计算机110内的元件之间传输信息的基本例程的基本输入/输出系统133 (BIOS)通常存储在ROM 131中。RAM 132通常包含处理单元120可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。计算机110也可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了从不可移动非易失性磁介质中读取或向其写入的硬盘驱动器141,从可移动非易失性磁盘152中读取或向其写入的磁盘驱动器151,以及从诸如⑶ROM或其它光学介质等可移动非易失性光盘156中读取或向其写入的光盘驱动器155。可以在该示例性操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括磁带盒、闪存卡和其他固态存储设备、数字多功能盘、其他光盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141可通过接口 140连接至系统总线121,而磁盘驱动器151和光盘驱动器155可通过诸如接口 150之类的用于可移动非易失性存储器的接口连接至系统总线 121。以上讨论并在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可与操作系统134、应用程序135、其他程序模块136和程序数据137相同,也可与它们不同。操作系统144、应用程序145、其他程序模块146和程序数据147在这里被标注了不同的附图标记是为了说明至少它们是不同的副本。用户可以通过输入设备,如键盘162和定点设备161 (通常被称为鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。其它输入设备(未示出)可包括用于输入语音或其他音频的话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、触敏屏、或写字板、用于输入姿势或其他视觉输入的相机等等。这些以及其他输入设备通常通过耦合到系统总线的用户输入接口 160连接到处理单元120,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其他接口和总线结构来连接。监视器191或其他类型的显示设备也经由诸如视频接口 190之类的接口连接至系统总线121。除了监视器以外,计算机还可包括诸如扬声器197和打印机196之类的其他外围输出设备,它们可通过输出外围接口 195来连接。计算机110可使用到一个或多个远程计算机(诸如,远程计算机180)的逻辑连接而在联网环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,且通常包括上文相对于计算机110描述的许多或所有元件,但在图1中只示出存储器存 储设备181。图1中所示的逻辑连接包括局域网(LAN) 171和广域网(WAN) 173,但也可以包括其它网络。这样的联网环境常见于办公室、企业范围计算机网络、内联网和因特网中。当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连接到LAN171。当在WAN联网环境中使用时,计算机110可包括调制解调器172或用于通过诸如因特网等的WAN 173来建立通信的其它装置。可为内置或可为外置的调制解调器172可以经由用户输入接口 160或其他合适的机构连接至系统总线121。在联网环境中,相对于计算机110所示的程序模块或其部分可被存储在远程存储器存储设备中。作为示例而非限制,图1示出了远程应用程序185驻留在存储器设备181上。应当理解,所示的网络连接是示例性的,并且可使用在计算机之间建立通信链路的其他手段。讦移如前面提到的那样,通过计算机资源的购买、提供功率和维护来解决性能问题可能是高成本的。图2-3是表示此处所描述的主题的各方面可在其中操作的示例性组件安排的框图。图2-3中示出的组件是示例性的且不意味着包括一切的可能需要或包括的组件。在其他实施例中,结合图2-3描述的组件和/或功能可被包括在其他组件(示出或未示出)中或者被放置在子组件中而不背离此处所描述的主题的各方面的精神或范围。在某些实施例中,结合图2-3所描述的组件和/或功能可跨多个设备地分布。图2是表示此处所描述主题的各方面可以在其中操作的示例性环境的框图。转到图2,系统205可以包括可以是一个或多个计算设备的各个组件。这些设备可包括,例如,个人计算机,服务器计算机,手持式或膝上型设备,多处理器系统,基于微控制器的系统,机顶盒,可编程消费电子产品,网络PC,小型计算机,大型计算机,蜂窝电话,个人数字助理(PDA),游戏设备,打印机,包括机顶盒、媒体中心或其他电器在内的电器,汽车嵌入式或附连的计算设备,其他移动设备,包括以上系统或设备中的任一种的分布式计算环境等。在系统205包括单个设备的情况下,可被配置为充当系统205的示例性设备包括图1的计算机110。在系统205包括多个设备的情况下,所述多个设备中的每个都包括诸如图1的计算机110之类的相同或不同配置的一个或多个计算机。系统205的组件可以包括发送者210、消息收发服务211、接收者212、存储213以及其他组件(未示出)。如这里所使用的那样,术语“组件”要被当作包括以下的全部或一部分来理解:一个或多个设备、一个或多个软件模块或其部分的集合、一个或多个软件模块或其部分与一个或多个设备或其部分的某种组合等等。系统205的各个组件可以彼此接近或者甚至位于同一机器上,或者可以分布在世界各地。各个组件可以通过下列各项彼此通信:一个或多个局域网、广域网、直接连接、虚拟连接、专用网络、虚拟专用网络、因特网、上面各项的组合等等。存储213是能够提供对数据的访问的任何存储介质。此处使用的访问可包括读数据、写数据、删除数据、更新数据、以及包括以上两个或更多个的组合等。存储213可包括硬盘存储、其他非易失性存储、诸如RAM之类的易失性存储器、其它存储、以上的某种组合等,并可以分布在多个设备中。存储213可以是外部的、内部的、或包括装置205内部和外部的组件。术语“数据”要被宽泛地看作包括可由一个或多个计算机存储元素表示的任何东西。逻辑上,数据 可被表示成易失性或非易失性存储器中的一系列I和O。在具有非二进制存储介质的计算机中,数据可根据存储介质的能力来表示。数据可被组织成不同类型的数据结构,包括诸如数字、字母等之类的简单数据类型,分层、链接或其他相关数据类型、包括多个其他数据结构或简单数据类型的数据结构等等。数据的某些例子包括信息、程序代码、程序状态、程序数据、其他数据等等。发送者210可以通过将消息发送给消息服务211来将该消息发送给接收者212。尽管在图2中示出了仅仅一个发送者,但是能够理解,可以存在多个不同的发送者,这些发送者将消息发送给消息收发服务211以用于递送给接收者212。同样,尽管图2中示出了仅仅一个接收者212,但是在其他实施例中,可以存在从消息收发服务211接收消息的多个接收者。消息收发服务211可以将消息存储在存储213中,直到所述消息被递送给接收者212。在一个实施方式中,消息收发服务211可以向接收者212通知:存在针对接收者212的消息。在另一实施方式中,消息收发服务211可以不主动地向接收者212通知已排队的消息,而是可以等待接收者212向消息收发服务211询问是否存在针对接收者212排队的任何消息。在一个实施方式中,接收者212可以接收表示存在针对接收者212的消息的通知。在另一实施方式中,接收者212可以周期性地检查消息收发服务211以确定是否存在针对接收者212的任何消息。如果存在针对接收者212排队的消息,则接收者212可以从消息收发服务211获得消息并且酌情对消息进行处理。图3是表示根据在此所述的主题各方面的示例性消息收发服务和相关联的数据存储的框图。消息收发服务可以包括网关305、协调器307、节流器309、消息容器310-312、以及其他组件(未示出)。每个消息容器都可以与可包括一个或多个队列对象的存储(例如存储315-317)相关联。队列对象可以包括:要递送给单个接收者的消息的队列;其中可能存在两个或更多接收者竞争和消费所述消息的消息队列;主题;存储在存储上的另一持久对象;上面各项中的两个或更多的组合等等。当两个或更多接收者竞争队列的消息时,一旦所述接收者之一已经消费了来自该队列的一个消息,则该消息就不再可供其他接收者消费。主题可以包括可通过使用过滤器而被用于逻辑地创建多个子队列的消息队列。子队列可以与一个或多个过滤器相关联。每个过滤器都可以使用各种准则来确定该主题的消息是否将被逻辑地放置在与该过滤器相关联的子队列内。在一个实施方式中,子队列可以通过存储引用该主题的消息的指针或其他标识符来实现。子队列可以由一个或多个接收者订阅。如果子队列被单个接收者订阅,则该单个接收者被允许消费该子队列的消息。如果子队列被多个接收者订阅,则所述多个接收者竞争并消费该子队列的消息。 如在此所使用的那样,队列对象有时将被简称为队列。除非上下文另行说明,能够理解,如在此所使用的那样,队列是队列对象的简称。当与消息容器相关联的存储中所消费的空间越过可配置的阈值时,这可以触发将该消息容器中的队列中的一个或多个迁移到具有与之相关联的存储的另一消息容器。例如,如果消息容器310超过存储315的存储容量的70%,则消息容器310中的队列中的一个或多个可以被迁移到消息容器313及其相关联的存储318。协调器307可以对消息收发服务的存储上的存储使用进行监视。如果存储使用越过阈值并且如果需要附加的消息容器,则协调器307可以实例化新的消息容器(例如消息容器313)并且将该新的消息容器与一个或多个存储(例如存储318)相关联。存储可以与一个或多个消息容器相关联。然后,协调器307可以致使队列从已经越过阈值的消息收发容器迁移。指示协调器307已决定迁移队列的数据例如可以持久保存在非易失性存储中以用于崩溃恢复。此外,指示队列已经被移除的数据可以持久保存可配置的时间段,例如以允许从在移动该队列以前进行的备份中恢复消息。吞吐量可以是将队列从一个消息收发容器移动到另一消息收发容器的另一触发机制。例如,如果消息收发容器具有以高速率接收消息的一个或多个热队列,则该消息收发容器可能被压垮并执行缓慢。协调器307可以监视消息收发容器的吞吐量,并且可以指示具有低于阈值的吞吐量的消息收发容器将数据迁移到其他消息收发容器。上述触发机制可以是示例性的。可以存在其他准则由协调器307来监视以确定队列是否需要迁移,而不偏移在此所述的主题的各方面的精神或范围。术语“消息收发容器”是指从一个或多个发送者接收消息并将这些消息提供给一个或多个接收者的组件。在消息收发容器及其发送者和接收者之间可能存在中间组件。基于消息被接收的顺序,消息收发容器可以将所接收的消息放置到队列中并且可以使用消息收发容器内部和/或外部的存储来存储该队列。该存储可以是易失性和/或非易失性的,并且可以由在此所述的任何类型的存储介质或其组合来实现。为了致使队列被迁移,协调器307可以指示已经越过阈值的消息收发容器将其队列的一部分移动到由协调器307标识出的一个或多个其他消息收发容器。所述一个或多个其他消息收发容器可以包括下列各项中的一个或多个:新近实例化的消息收发容器(例如消息收发容器313)、现有消息收发容器(例如具有用于更多队列的容量的消息收发容器)、多个新近实例化的消息收发容器、多个现有消息收发容器、上面各项中的两个或更多的组合等等。此外,来自一个或多个消息收发容器的多个队列可以并行地迁移。作为响应,消息收发容器可以确定要移动其队列中的哪个(些)。每个消息容器都可以包括迁移代理,该迁移代理处理到一个或多个其他消息收发容器的数据迁移。例如,消息收发容器310-313可以分别包括迁移代理320-323。在选择要迁移的队列时,迁移代理可以尝试满足多个目标,包括下列各项中的一个或多个:最小化队列的停机时间、最小化完成迁移的时间、释放足够空间以满足协调器307等等。迁移代理可以基于下列示例性因素中的一个或多个来确定要移动哪些队列:1.队列上一次被使用是在何时;2.队列大小。这可以通过用于存储队列的空间、队列中消息的数目等等来测量。3.队列被多频繁地使用。这有时被称为“热度”。在一个示例中,热度可以通过随时间的平均吞吐量来测量,其中越近期的使用被越多地加权;以及4.队列类型。例如,队列是消息队列、主题还是其它类型的对象可以被用作因素。在一 个实施方式中,迁移代理将首先确定队列上次被使用的时间。如果仅仅一个队列具有自从上次被使用以来最长的时间,则该队列可以被选择为用于迁移。如果多个队列具有自从上次被使用以来最长的时间,则迁移代理可以按照在存储上使用的空间来查看队列大小。如果所述队列之一大于所有其他队列,则该队列可以被选择以用于迁移。如果两个或更多队列二者共享该最大大小,则热度最低的队列可以被选择为用于迁移。在一个示例,迁移代理可以按照上述三个准则对消息收发容器进行排序,并且基于所排序的顺序开始迁移队列,直到足够的空间已经被释放以满足协调器307。在另一实施方式中,迁移代理可以使用对上面因素中的每个进行加权的公式。例如,示例性的公式可以包括:f (X)=W1*上次使用的+W2*队列大小+W3*热度,其中*表示相乘,并且WpW2和W3表示权重。迁移代理可以基于该公式对队列进行排序,并且可以基于经排序的顺序开始迁移队列,直到足够空间已经被释放以满足协调器307。在一个实施方式中,迁移代理可以通过执行一组动作来迁移其队列中的一个或多个的数据。该组动作例如可以包括:1.基于一个或多个因素(例如上述因素)确定要迁移的队列。2.在允许队列被用于接收新消息和递送所排队的消息的同时迁移该队列的数据。3.重复步骤2,直到队列中的剩余数据低于阈值。该阈值可以被选择为致使队列被冻结短于可配置的时间段。4.冻结该队列以不允许队列被用于接收新消息和递送所排队的消息。5.在该队列被冻结时迁移该队列的剩余数据(如果有的话)。6.更新网关的数据结构以指示所迁移到的消息收发容器将被用于该队列。7.解冻该队列。解冻允许该队列被用于接收新消息和递送所排队的消息。8.更新指示队列已经被迁移的数据结构。9.在需要时重复上面的步骤以释放附加的空间。如果发生错误,则该队列可以被解冻而无需迁移代理的指令。在重启以后,迁移代理可以:1.检测其还未完成该队列的数据迁移。如果迁移代理检测到该情况,则迁移代理可以在上面的步骤2重启。2.检测其已经完成了数据迁移,但是上面的步骤6还未被执行。如果迁移代理检测到该情况,则可能的是更多消息已经被添加到旧的队列。因此,迁移代理可以在上面的步骤2重启。3.检测到其已经完成了数据迁移并且步骤2-7已经完成但步骤8还未完成。如果迁移代理检测到该情况,则迁移代理可以步骤8恢复。在迁移数据时,迁移代理可能检测到:它不如数据被插入到该队列中那么快地复制数据。在这种情况下,迁移代理可以中止队列的数据迁移,指示节流器309降低消息被允许递送给队列的速度,或者采取其他动作。在一个实施方式中,可能存在针对每个消息收发容器的单独的节流器。在另一实施方式中,可能存在针对整个消息收发服务的单个节流器。节流器309可以控制消息被允许添加到队列的速率。通过降低队列的速率,节流器309可以帮助尝试将队列的数据迁移到另一消息收发容器的迁移代理。图4-5是根据本文所描述的主题的各方面的概括地表示可发生的示例性动作的流程图。为解释简明起见,结合图4-5来描述的方法被描绘和描述为一系列动作。可以 理解和明白,此处所描述的主题的各方面不受所示出的各动作和/或各动作次序的限制。在一个实施例中,各动作以如下描述的次序发生。然而,在其它实施例中,各动作可以并行地发生、以另一次序发生、和/或与此处未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据此处所描述的主题的各方面的方法所必需的。另外,本领域的技术人员将了解和明白,该方法也可以替代地经由状态图而被表示为一系列相互关联的状态或者被表示为事件。尽管一些指示是关于哪些组件执行哪些动作而作出的,但是这些指示可以仅仅是示例性的。在其他实施例中,被描述为由一个组件执行的动作可以由另一组件来执行。例如,在一些实施方式中,协调器可以执行已经被描述为由迁移代理或消息容器执行的动作中的一些,并且反之亦然。图4是概括地表示根据此处所描述的主题的各方面的、可在消息收发服务处进行的示例性动作的流程图。转向图4,在框405处,动作开始。在框410处,作出需要迁移的确定。例如,参考图3,协调器307可以确定:针对消息收发容器310所消费的存储已经超过阈值。作为另一示例,协调器307可以确定:消息收发容器310的事务速率已经降低到阈值以下。在框415处,可以指示迁移代理将数据移动到一个或多个其他消息收发容器。例如,参考图1,协调器307可以实例化新的消息收发容器313并且将消息收发容器313与存储318相关联。协调器307然后可以指示迁移代理320将指定量(例如100GB)的数据迁移到消息收发容器310。在指示迁移代理320将数据迁移到一个或多个其他消息收发容器时,协调器307可以向迁移代理320指示要被迁移到每个消息收发容器的数据量。在框420处,消息收发容器接收将数据迁移到至少一个消息收发容器的指令。例如,参考图3,消息收发容器310 (例如通过迁移代理320)可以接收将指定量(例如100GB)的数据迁移到消息收发容器313的指令。在框425处,确定要迁移到另一消息收发容器的队列。如上所述,该确定可以基于包括下列各项的一个或多个因素:队列上次被使用是在何时;队列的大小;以及队列的热度。例如,参考图2,如果Q4是最长时间未被使用的队列,则迁移代理可以选择Q4来进行迁移。在一个示例性实施方式中,迁移代理可以通过如下方式确定要迁移的队列:1.通过基于首先每个队列上次被使用是在何时、第二每个队列的大小、以及第三每个队列的热度对队列进行排序来将队列的标识符放置到经排序的列表中;以及2.选择与列表的第一个元素相关联的队列;在另一示例性实施方式中,迁移代理可以通过如下方式确定要迁移的队列:1.通过基于下列公式对队列进行排序来将队列的标识符放置到经排序的列表中:f (X) =W1*上次使用的+W2*队列大小+W3*热度,其中*表示相乘,并且W:、W2和W3表示权重;以及2.选择与 列表的第一个元素相关联的队列;基于此处的教导,本领域的技术人员能够认识到用于基于各种因素确定队列的其他机制。在框430处,在允许该队列被消息收发容器用于接收新消息和递送所排队的消息的同时迁移该队列的至少一部分。例如,参考图2,迁移代理320可以开始将数据从队列复制到新消息收发容器313。迁移代理320可以从该队列复制数据,直到该队列的剩余数据低于阈值或者直到其他条件发生。例如,迁移代理可以确定该队列是否比迁移该队列更快地增长。如果该队列比迁移该队列更快地增长,则迁移代理可以中止队列的迁移。作为另一示例,如果迁移代理确定该队列比迁移该队列更快地增长,则迁移代理可以通过降低消息被允许添加到该队列的速率来对该队列进行节流。在允许队列使用的同时迁移该队列的一部分可以包括:将该队列的一部分复制到目的地消息收发容器;检测该队列的剩余部分是否小于阈值;以及重复上面的动作,直到该队列的剩余部分小于该阈值。由于该队列被允许接收消息,因此该队列的剩余部分可能在迁移代理的迁移活动期间被增加。如果该队列的剩余部分小于阈值,则框435的动作可以被执行。在将消息从源消息收发容器迁移到目的地消息收发容器时,迁移代理也可以从目的地消息收发容器中删除在迁移期间已经从队列中被消费的任何消息。如果迁移代理重复地将消息从队列复制到目的地消息收发容器以准备冻结该队列,则迁移代理仅仅需要复制之前还未从该队列复制到该目的地消息收发容器的消息。在框435处,可以冻结该队列。例如,参照附图3,迁移代理可以冻结队列Q4。冻结该队列以不允许队列被用于接收新消息和递送所排队的消息。在框440处,可以在该队列被冻结的同时迁移该队列中的剩余数据(如果有的话)。例如,参考图3,当队列Q4被冻结时,迁移代理320可以迁移队列Q4的剩余数据(如果有的话)。在框445处,解冻该队列。例如,参考图3,迁移代理320可以在所有数据都已经被迁移到消息容器313时解冻队列Q4。解冻允许该队列被用于接收新消息和递送所排队的消息。在解冻该队列以前,数据结构(例如由网关305使用的数据结构)可以被更新以指示针对Q4的消息将被发送给Q4被迁移到的消息收发容器(例如消息收发容器313)。在框450处,可以执行其他动作(如果有的话)。图5是概括地表示根据此处所描述的主题的各方面的、可从发送者角度进行的示例性动作的流程图。在框505,动作开始。在框510处,将消息发送给消息收发服务。例如,参考图2,发送者210将消息发送给消息收发服务211以用于递送给接收者212。在框515处,即使在该队列被迁移时,仍然可以将消息发送给该队列。例如,参考图2,发送者210和其他发送者(未示出)可以继续将消息发送给所迁移的队列。在框520处,当队列被冻结时,不能将消息添加到该队列。例如,参考图3,当队列被冻结时,不能允许将针对该队列的消息添加到该队列。在一个实施例中,在该队列被冻结时,可以在短时内将有限数目的消息保持在该队列之外。在该队列被解冻时,所保持的消息可以被添加到该队列。在框525,在队列被解冻以后,该队列可以准备好再次接收消息。例如,参考 图3,在队列Q4被迁移到消息收发容器313以后,队列Q4可以正常地接收和递送消息。在框530处,可以执行其他动作(如果有的话)。如从上述详细描述中可以看到,已经描述了关于迁移消息的各方面。尽管本文所描述的主题的各方面易于作出各种修改和替换构造,但其某些说明性实施例在附图中示出并在上面被详细地描述。然而,应当理解,并不旨在将所要求保护主题的各方面限制于所公开的具体形式,而是相反地,目的是要覆盖落入本文所描述的主题的各方面的精神和范围之内的所有修改、替换构造和等效方案。
权利要求
1.一种至少部分地由计算机实现的方法,所述方法包括: 接收(420)把与消息相关联的数据迁移到至少一个消息收发容器的指令; 基于一个或多个因素确定(425)要迁移的队列,所述因素包括:所述队列上次被使用是在何时、所述队列的大小、以及所述队列的热度; 在允许所述队列被所述消息收发容器用于接收新消息和递送所排队的消息的同时迁移(430)所述队列的第一数据; 冻结(435)所述队列以不允许所述队列被用于接收新消息和递送所排队的消息; 在所述队列被冻结时迁移(440)所述队列的剩余数据,如果有的话;以及在迁移了所述剩余数据以后解冻(445)所述队列,所述解冻允许所述队列被用于接收新消息和递送所排队的消息。
2.如权利要求1所述的方法,其特征在于,还包括: 确定所述队列是否比迁移所述队列更快地增长;以及 如果所述队列比迁移该队列更快地增长,则通过降低消息被允许添加到所述队列的速率来对所述队列进行节流。
3.如权利要求1所述的方法,其特征在于,迁移所述队列的第一数据包括: 执行一组动作,执行该组动作在允许所述队列被用于接收新消息和递送所排队的消息的同时发生,该组动作包括: 将所述队列的一部分复制到目的地消息收发容器;以及 检测所述队列的剩余部分是否小于阈值;以及 重新执行该组动作,直到所述队列的剩余部分小于所述阈值,所述阈值被选择为致使所述度列被冻结短于所选时间段。
4.如权利要求1所述的方法,其特征在于,还包括: 确定与消息收发容器相关联的事务速率已经越过阈值;以及 指示所述消息收发容器把由所述消息收发服务使用的数据迁移到一个或多个其他消息收发容器。
5.如权利要求1所述的方法,其特征在于,还包括: 确定针对消息收发容器所消费的存储已经超过阈值;以及 指示所述消息收发容器把由所述消息收发服务使用的数据迁移到一个或多个其他消息收发容器。
6.如权利要求1所述的方法,其特征在于,基于一个或多个因素确定要迁移的队列包括: 通过基于首先每个队列上次被使用是在何时、第二每个队列的大小、以及第三每个队列的热度对所述队列进行排序来将所述队列的标识符放置到经排序的列表中;以及选择与所述列表的第一元素相关联的队列。
7.如权利要求1所述的方法,其特征在于,基于一个或多个因素确定要迁移的队列包括: 通过基于下列公式对所述队列进行排序来将所述队列的标识符放置到经排序的列表中: f (X) =W1*上次使用 的+W2*队列大小+W3*热度,其中*表示相乘,并且Wp W2和W3表示权重;以及 选择与所述列表的第一元素相关联的队列。
8.—种在计算环境中的系统,包括: 源消息收发容器(310,311,312),其用于接收从发送者发送的消息以用于递送给接收者,所述源消息收发容器还用于把要递送给所述接收者的消息放置在存储中;以及 迁移代理(320,321,322),其用于接收把与所述消息相关联的数据迁移到目的地消息收发容器的指令,所述迁移代理还用于执行动作,包括: 基于一个或多个因素确定要迁移的队列; 在允许所述队列被所述源消息收发容器用于接收新消息和递送所排队的消息的同时迁移所述队列的第一数据; 冻结所述队列以不允许所述队列被用于接收新消息和递送所排队的消息; 在所述队列被冻结时迁移所述队列的剩余数据,如果有的话;以及在迁移了所述剩余数据以后解冻所述队列,所述解冻允许所述队列被用于接收新消息和递送所排队的消息。
9.如权利要求8所述的系统,其特征在于,所述迁移代理用于通过执行第一组动作和第二组动作来在允许所述队列被所述源消息收发容器用于接收新消息和递送所排队的消息的同时迁移所述队列的第一数据; 所述第一组动作包括: 将所述队列的一部分复制到目的地消息收发容器;以及 检测所述队列的剩余部分是否大于阈值; 所述第二组动作包括: 重新执行所述第一组动作,直到所述剩余数据不大于所述阈值。
10.一种具有计算机可执行指令的计算机存储介质,所述计算机可执行指令在被执行时执行以下动作,包括: 将消息发送(510)给消息收发服务,所述消息收发服务用于将所述消息引导到所述消息收发服务的消息收发容器,所述消息收发服务用于在由所述消息收发容器所消费的存储超过阈值的情况下通过执行动作来将所述消息收发容器的数据迁移到另一消息收发容器,所述动作包括: 确定要迁移的队列; 在允许所述队列被所述消息收发容器用于接收新消息和递送所排队的消息的同时迁移所述队列的第一数据; 冻结所述队列以不允许所述队列被用于接收新消息和递送所排队的消息; 在所述队列被冻结时迁移所述队列的剩余数据,如果有的话;以及在迁移了所述剩余数据以后解冻所述队列,所述解冻允许所述队列被用于接收新消息和递送所排队的消息。
全文摘要
针对消息收发服务的高密度托管。此处所描述的主题的各方面涉及针对消息收发服务的消息迁移。在各方面,基于阈值被越过来作出消息需要被迁移的判定。作为响应,指示代理把与所述消息相关联的数据迁移到另一位置。所述代理使用各种因素来确定要迁移的一个或多个队列。当队列被迁移时,在该迁移的第一部分期间,在发送者发送新消息和接收者消费消息时消息可以被添加到该队列和从该队列移除。在该迁移的第二部分期间,冻结该队列以不允许该队列被用于接收新消息和递送所排队的消息。该迁移可以被组织以尝试实现某些目标。
文档编号G06F9/48GK103227747SQ20131008043
公开日2013年7月31日 申请日期2013年3月13日 优先权日2012年3月14日
发明者K·帕拉玛斯万姆, S·H·金, M·斯里瓦斯塔瓦, M·克里希纳普拉塞德, R·R·科克, V·R·G·拉维帕蒂, 李斌 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1