带复制的一致消息收发的制作方法

文档序号:7957771阅读:256来源:国知局
专利名称:带复制的一致消息收发的制作方法
技术领域
本发明涉及消息收发,尤其涉及带复制的一致消息收发。
背景技术
消息收发系统提供计算机网络中计算设备之间存储和转发消息的基本功能。在计算机编程上下文中,消息收发用于在应用组件之间交换消息。在一个示例中,消息收发系统以客户机-服务器模型实现。消息收发服务器常常以包括点对点消息收发和发布-订阅消息收发的两种模式的一种或两者来组织。使用消息收发实体来实现模式,其为用于接收和分发消息的消息收发原语。队列是可实现点对模式的消息收发实体的示例。发送者将消息放置在队伍中直到接收者取回它们。主题是可实现发布-订阅模式的消息收发实体的示例。发布者将消息放置在主题中,而一个或多个订阅者可消费该消息。这些模式常常提供异步通信协议,使得消息的发送者和接收者,或发布者和订阅者不需要同时与消息实体交互。消息收发系统用于解耦合应用组件之间的通信,也用于连接跨网络边界的实体。 因此,分布式计算系统中的应用组件,例如,可以可靠地交换数据并提供应用一致性。许多分布式计算系统(包括云计算)应用消息收发系统以提供为整个网络中的数据和事件的异步交换提供可靠方便的机制。

发明内容
提供本发明内容以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。在一个通用示例中,本发明涉及在分布式计算系统中的多个通信地耦合的节点的第一节点的存储器内配置的消息收发实体。消息收发实体被配置为作为通信地耦合的节点的消息收发服务器中的备份,或辅消息收发实体来运行。辅消息收发实体通信地耦合到配置在多个节点的第二节点的存储器中的主消息收发实体。配置主消息收发实体来存储从分布式计算系统传递给它的消息。配置辅消息收发实体来存储消息的副本。此外,配置辅消息收发实体以在主消息收发实体故障时提升为新的主消息收发实体。在一个示例中,消息收发服务器包括用一致结构耦合在一起的多个节点。消息收发实体跨结构中的节点分布,诸如分布在各个分开的消息收发服务器中。消息收发实体可被配置为节点的存储器中的数据结构。配置来提供处理的消息收发实体可被指定为主消息收发实体。每个主消息收发实体对应于至少一个大致相同的也被配置来提供主消息收发实体的处理的辅消息收发实体。辅消息收发实体也跨结构中的节点分布。当消息到达主消息收发实体,该消息的副本被提供给对应的辅消息收发实体。一旦辅消息收发实体接收到消息副本,它向主消息收发实体提供确认。一旦主消息收发实体接收选定数量的确认,消息提交且消息被写到主消息收发实体而副本被写到确认的辅消息
3收发实体。可提供附加复制技术以将主消息收发实体与对应的辅消息收发实体同步。可配置一个或多个消息收发实体来持久地将消息写入位于节点的存储系统或共享的后端存储系统。在包括主消息收发实体的节点故障的情况中,一致结构将所选择的对应的已同步的辅消息收发实体提升为新的主消息收发实体。新的主消息收发实体继续操作而没有丢失数据或一致性且没有影响消息收发服务器的性能的显著的等待时间(如果有等待时间的话)。如果新的主消息收发实体故障,另一对应的已同步的辅消息收发实体将被提升。对应于主消息收发实体的辅消息收发实体的数量没有限制,但是增加辅消息收发实体的数量以增加潜在等待时间为代价增加了一致性。在一些示例中,消息收发服务器可包括多个分布式主消息收发实体,每一个具有至少一个对应辅实体。通常,主消息收发实体将在分开的节点上配置。节点还可主控相互不对应的辅消息收发实体或位于同一处的一个或多个主消息收发实体。在故障的节点也包括辅消息收发实体的情况下,结构可在还没有对应消息收发实体的节点上创建新的辅消息收发实体。


包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。图1是示出示例计算设备的框图。图2是示出了消息收发系统的示例的示意图,它实现为包括图1的计算设备的特征的计算设备的网络。图3是消息收发服务器的示例的示意图,用于图2的消息收发系统,它实现为每一个可包括图1的计算设备的特征的计算设备的网络。图4是示出了用于图3的消息收发服务器的示例方法的框图。图5是示出了在设备故障后图3的消息收发服务器的示意图。
具体实施例方式在以下具体实施例中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。图1示出了示例性计算机系统,其可被用于诸如分布式计算系统或其他显示的计算机网络的操作环境中的组件。计算机系统可被用来运行消息收发服务器并耦合到运行客户机应用的计算机系统。示例性计算机系统包括计算设备,诸如计算设备100。在一基本配置中,计算设备100通常包括具有一个或多个处理单元(即,处理器10 的处理器系统,以及存储器104。取决于计算设备的确切配置和类型,存储器104可以是易失性的(如随机存取存储器 (RAM))、非易失性的(诸如只读存储器(ROM)、闪存等)或两者的某种组合。该基本配置在图1中由虚线106来例示。该计算设备可采取若干形式中的一种或多种。这些形式包括个人计算机、服务器、手持式设备、消费电子产品能(诸如视频游戏控制台)或其他设备。计算设备100还可具有附加特征或功能。例如,计算设备100还可包括附加存储 (可移动和/或不可移动),包括但不限于磁盘或光盘或固态存储器,或者闪速存储设备, 诸如可移动存储108和不可移动存储110。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等的任何合适的方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器104、可移动存储108和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、R0M、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、通用串行总线(USB)闪存驱动器、闪存卡、或能用于存储所需信息且可以由计算设备100访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备100的一部分。计算设备100包括允许计算设备100与其它计算机/应用114通信的一个或多个通信连接115。示例性通信连接可以是以太网接口。在一些示例中,计算设备也可具有一个或多个附加处理器或专用处理器(未示出),以执行从处理器102卸载的处理功能。计算设备100还可包括诸如键盘、定点设备(例如,鼠标)、笔、语音输入设备、触摸输入设备等的输入设备112。计算设备100还可包括诸如显示器、扬声器、打印机等的输出设备111。计算设备100可被配置成运行操作系统软件程序以及一个或多个软件应用,这些构成系统平台。在一个示例中,计算设备100包括被称为托管的或运行时环境的软件组件。 托管环境可被包括为操作系统的一部分或者可在稍后被包括为软件下载。托管环境通常包括针对常见编程问题的预先编码的解决方案以帮助软件开发者创建诸如应用等在托管环境中运行的软件程序。被配置成在计算设备100上执行的计算机应用包括至少一个过程(或任务),该至少一个过程(或任务)是执行程序。每一过程提供用于执行该程序的资源。一个或多个线程在该过程的上下文中运行。线程是操作系统在处理器102中向其分配时间的基本单元。 线程是为执行而调度的过程内的实体。过程的各线程可共享其虚拟地址空间和系统资源。 每一线程可包括异常处理程序、调度优先级、线程位置存储、线程标识符、以及直到该线程被调度的线程上下文(或线程状态)。线程上下文包括线程的机器寄存器集、内核栈、线程环境块、以及与该线程对应的过程的地址空间中的用户堆。在并行应用中,可在处理器102 上并发地执行各线程。图2示出了示例性消息收发系统200,包括通信地耦合到多个分布式客户机/服务器204的消息收发服务器202。消息收发系统200可被实现为提供用于分布式计算的计算机网络,并且包括群集、网格、云,等等的特征。消息收发服务器202可在多个分布式节点 206的子网络上实现,其每一个可结合计算设备100的特征。客户机204还可实现在结合了计算设备100的特征的计算设备上。客户机204和服务器202之间的一可能的通信可包括,在两个或多个计算机进程之间在一通信框架上发送计算机数据包,该通信框架将服务器202耦合到客户机204。在一个示例中,每个客户机204可包括应用组件,诸如一个或多个进程、对象,或类似。消息收发服务器202在应用组件之间提供消息交换。依据分布式应用组件的配置, 客户机204可假设发送者、接收者、发布者、订阅者等的角色。消息收发服务器202可包括至少一个消息收发实体,诸如点对点消息收发模式的队列,或发布者-订阅者消息收发模式的主题。在一些示例中,主题可包括订阅以过滤消息。例如,客户机侧订阅通过在客户机侧维护最后消息顺序号来直接从主题读取消息。通常,消息收发服务器202包括两个或多个不相似消息收发实体,诸如两个队列、一个队列和一个主题,等等。流过系统200的消息通常被持久地记录到位于节点206的本地存储系统208或后端远程存储系统210,以在节点故障或其他服务中断的情况下保留状态。持久地存储的消息的恢复施加等待时间,负面地影响了消息收发系统200的性能。减少等待时间的通常手段包括高速缓存消息或存储器内队列和主题,如果这些消息丢失或破坏则降低了一致性。在节点故障或服务中断的情况中,存储器内消息收发状态从持久的存储器以耗时的过程重新创建,也负面地影响系统性能。此外,如果设备故障在消息可被持久地记录之前发生,消息将丢失。图3示出了示例性分布式消息收发服务器300,其结合了消息收发服务器202的特征。消息收发服务器300包括用一致结构耦合在一起的多个节点302 (诸如计算设备30加、 302b、和302c)。一致结构可包括多个硬件设备,诸如计算设备和通信设备(例如路由器、中继器等)以及诸如结构层304的软件组件。在节点302上分布多个消息收发实体。配置来提供已选处理的消息收发实体可被指定为主消息收发实体。每个主消息收发实体对应于至少一个通常相同的辅消息收发实体。辅消息收发实体也分布在不同于包括主消息收发实体的节点的至少一些节点302上。当节点数量受限或主消息收发实体的数量大时,每个节点302可包括多个可形成消息收发实体集的位于同一处的消息收发实体。例如,计算设备30h、302b、302c的存储器的每一个包括多个消息收发实体,分别安排为消息收发实体集306、308、310。在该示例中, 主队列1312、主主题1314,以及主主题2316分别跨消息收发实体集306、308、310分布。此示例中的主消息收发实体被配置来接收来自发送者或发布者的写入,并通常被配置以允许从接收者和订阅者读取。主消息收发实体中的每个消息被复制到对应的辅消息收发实体中去。例如,主队列1312中的消息被复制到包括在消息收发实体318、320中的多个辅队列1中。主主题1314 的消息被复制到辅主题1322,且主主题2316中的消息被复制到辅主题23M中。如以下所描述,结构层304还可将辅消息收发实体中的消息与它们对应的主消息收发实体中的消息进行同步。在该示例中,每个消息收发实体被包括在对应节点302的存储器中。例如,消息收发实体可被配置为节点的存储器中的数据结构。存储在存储器中的消息提供减少了的用于从存储系统存取的消息的等待时间,并存储器内的消息复制增加了一致性。在包括主消息收发实体的计算设备故障的情况中,结构层304将对应的辅消息收发实体提升为新的主消息收发实体。新的主消息收发实体继续运行而没有没有丢失数据或一致性且没有影响服务器300的性能的显著等待时间(如果有等待时间的话)。在故障的节点包括辅消息收发实体的情况中,结构可创建消息收发实体集内的新的辅消息收发实体,新的辅消息收发实体既不包括对应的主消息收发实体也不包括它的任何对应的辅消息收发实体。在主消息收发实体和存储器内存储体系结构中的数据的复制相对于现有方案显著增加了一致性并减少了等待时间。结构层304维持跨在存储器服务器300上分布的一组处理的消息收发实体的放置和消息收发实体的放置的一致性。结构层304可包括多个分区,每个分区是在结构层304 中维持的一致性单元。分区可以是主分区或辅分区。主分区包括主消息收发实体并且由计算设备维持,该计算设备被配置来处理写到该分区的全部写入。辅分区包括辅消息收发实体并且由计算设备维持,其通常不被配置来处理写入。结构层304被配置来维持对存储器服务器和消息收发实体中的节点的认知,并参与存储在消息收发实体中的数据的生存期。结构层304可包括资源和应用,并为分布式计算系统中的节点提供调度、资源定位、设备管理、以及容错。结构层也可提供用于智能管理完整应用生存期的高级别语言模型,智能管理包括部署、健康监测,升级、以及停用。合适的结构层304的例子是可用的,诸如作为服务的平台O^aaS),其可被主控在后端数据中心并用操作系统控制。示例操作系统在来自美国华盛顿州雷蒙德市的微软公司的Windows Azure的交易指定下可用。图4示出了示例方法400用于处理要被写入消息收发服务器300的上下文中的特定消息实体的消息。消息收发服务器300从客户机接收消息,并确定消息收发服务器300 上的哪个消息收发实体被分配来处理该消息。在402,该消息接着被提供给所分配的消息收发实体的主消息收发实体。例如,分配到队列1的用于处理的消息被提供到主消息收发实体队列1312。在404,消息的副本被提供给对应的辅消息收发实体。例如,分配到队列1312的消息副本被提供给辅队列1318和辅队列1320。每个能够接收消息副本的辅消息收发实体向主消息收发实体提供确认。在406,一旦主消息收发实体从辅消息收发实体接收到所选数量或更多的确认,消息提交。在写操作的示例中,在408,消息被写到主消息收发实体,且副本被写到提供确认的对应的辅消息收发实体。消息收发服务器300可向客户机提供消息已经提交的确认,且该消息将根据消息收发实体的功能来处理。在410,如果主消息收发实体接收到少于所选数量的确认,写操作中止、回退,或以其他方式指示为故障。在一些情况中,消息服务器300可接着应用重试策略。在写入被包括为交易的部分的情况中,不提交交易,直到辅消息收发实体提供所选数量的确认。当多个写被包括在交易中时,仅交易提交可等待所选数量的确认,以便减少交易内的操作的等待时间。所选数量的确认可被设为一个或多个确认,或基于被选来接收消息副本的辅实体的法定数量。基于法定数量的所选数量的示例可等于大多数法定数量、全部法定数量,或其他基于法定数量的量。相对高的所选数量可增强一致性,但也增加了等待时间,而相对低的所选数量可减少等待时间但也降低了一致性。因此,所选数量可被选择,从而以另一个为代价来有益于一个关注的一方,或平衡诸竞争性诸关注方。例如,由于消息收发实体可为写入提交等待更久,将所选数量设置为接近或包括全部法定数量可增加更长期的可靠性而减少吞吐量和/或负面地影响等待时间。尽管可能有更长期的可靠性,但如果在等待确认以提交用于写时辅消息收发实体故障,则数据可能丢失。在一示例中,在406,在消息收发服务器在420声明故障之前,主消息收发实体可被配置以等待一预定数量的时间或事件以接收所选数量的确认。作为重试策略的一部分, 主消息收发实体可检查以确定是否知晓无响应的辅消息收发实体停机。主消息收发实体可检查以确定是否知晓主控辅消息收发实体的节点停机。如果辅消息收发实体或主控节点之一或两者停机,主消息收发实体可确定不重发消息的副本。结构层304被配置用于除了写操作之外的消息收发操作。在通常情况中,尽管读取可被发送到一个或多个辅消息收发实体以避免在主消息收发实体处理另一操作情况中或在巨大数量订阅者的读取淹没单个消息收发实体情况中的等待时间,读操作可被发送到主消息收发实体。发送操作和删除操作可被看待为写操作,并按照如方法400的类似处理。 队列或订阅上的接收操作常常是破坏性的或使用取数-锁定(peek-lock)并删除语义。破坏性接收和删除可以以类似于方法400中的写入的方式来看待。取数-锁定通常不提供给辅消息收发实体,因为取数-锁定是消息收发对象的超时乐观锁定。因此,取数-锁定可以以类似于前述的读操作的方式来看待。在由于节点故障或其他原因锁定丢失的情况中,可以以类似于当锁定因不活动而期满时的方式再次获得锁定。此外,关于队列、主题和订阅的浏览操作可类似读操作来看待。在消息可以少于确认的全部法定数量被提交的情况下,可能不将一些辅消息收发实体与主消息收发实体同步,并可包括少于一组完整的已提交消息。为解决这一可能性,消息收发服务器300可支持重复检查逻辑,其包括帮助辅消息收发实体维持与对应的主消息收发实体同步的机制。例如,消息收发实体可被实现为带序号的日志和指针的组合,指针存储已删除消息标识符的状态并指向要从日志中读取的下一个消息。指针通常保持诸如取数-锁定的未复制的非可靠状态及复制的可靠状态。辅消息收发实体可各自维持一历史表格,包括已经被存储在辅消息收发实体中的诸消息的先前消息序号。分布式计算系统(例如,结构层) 可被配置来存储正对应于最后序号的已提交的消息。周期性地经由结构层传递该信息作为控制信息,以允许辅消息收发实体清除它们的历史表格。除了减少所涉及的复制和处理的量,此机制也改善复制吞吐量,因为复制子系统不以顺序的次序发送和接收消息,因此复制可以并行。消息可具有生存时间语义,导致消息在生存时间过了以后期满。然而,诸如消息收发服务器300的分布式系统,通常不包括具有已同步时钟的节点,并且这可导致消息跨主消息收发实体和辅消息收发实体分布的不同的期满时间。为解决这一问题,复制下的消息的生存时间值可被调节为相对值,其描述了消息上所剩的剩余时间。消息生存时间可被调节为相对值,其等于实际的消息生存时间减去辅消息收发实体中的当前时间。当提交消息时,相对生存时间被转换回绝对生存时间。此外,转换的平均时间可被用来在目的地精细地调节消息生存时间以说明网络转换时间。期满的消息可从复制中去除,以减低复制通信流量。图5示出了消息收发服务器300的故障转移处理的示例性结果,配置用于节点 302a的故障或崩溃事件。可用对应于节点302或消息收发实体312-3M的故障的置换 (permutation)的故障转移处理来配置消息收发服务器300。在故障之前配置的故障转移处理相比于响应于故障来配置故障处理而言可减少等待时间,但也可造成开销。存储在主队列1312和辅主题1322中的数据(包括在图3所述的设备30 的存储器中)由于故障
8而丢失。故障转移处理迅速将设备302b上的辅队列1318提升成为新主消息收发实体,用于从故障的主队列1312丢失的数据。主主题1314丢失了其一个辅主题1322,因此可在节点上创建新辅主题13 ,该节点不包括主消息收发实体或对应的辅消息收发实体,诸如设备302c。在故障的节点恢复或回到在线情况下,本地存储系统208可能已经包括了本地状态的持久存储。结构层304可选择是否复活设备30 以包括主消息收发实体或仅仅辅消息收发实体直到全部状态恢复。上述重复检查逻辑可被用来表示在辅消息收发实体成为主消息收发实体时的故障转移情况中没有被持久地存储的消息。消息可被写入持久存储以进一步改善系统的可靠性。持久存储的两个示例包括远程或后端共享存储,诸如消息收发系统200中的远程存储系统210和本地存储系统208。消息收发服务器300可被配置来在空闲系统周期或其他指定时间期间将消息从主消息收发实体周期性地写入共享远程存储系统210。在大多数情况中,持久写入不在复制期间发生。 除了写入远程存储系统210,或在不同于写入远程存储系统210的其他时间,消息收发服务器300可被配置来在空闲系统周期或其他指定时间期间将消息从消息收发实体周期性地写入本地存储系统208。在一个示例中,除了对应主消息收发实体写入本地存储208或远程存储系统以外或作为替代,辅消息收发实体写入本地存储208或远程存储系统210。服务器300可在每个节点上持久地存储所选辅消息收发实体以减少计算节点302的总体存储需求。上述重复检查逻辑还可被应用于写入存储系统208、210。其他因素可确定消息收发实体何时写入存储。例如,实体的存储器可能变满了或到达了消息的数量或大小的限额,将触发写入持久存储。同样,存储器实体可在所选时间段过去之后写入持久存储。还构想了更多示例。在队列或主题包含主日志存储作为消息收发系统的一部分的情况下,主日志存储可用作到本地存储系统208的写-后队列。一旦消息写入持久存储,它可从主和辅消息收发实体中被逐出。为了减少存储需求,空消息收发实体,即逐出了所有消息的消息收发实体, 本身可被逐出存储器并可在需要时复活。尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换所示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等效方案来限制。
权利要求
1.一种消息收发实体(308),配置在分布式计算系统O00)的多个通信地耦合的节点 (302)的第一节点(302b)的存储器(104、108,和/或110)中,并配置以作为在多个通信地耦合的节点的消息收发服务器(202)中的辅消息收发实体(318)来运行;通信地耦合(304)到主消息收发实体(312),所述主消息收发实体配置在所述多个节点的第二节点(302a)的存储器(104、108,和/或110)中,其中所述主消息收发实体配置为存储消息(402,408);存储所述消息的副本;以及如果所述主消息收发实体故障,则被提升为新的主消息收发实体。
2.如权利要求1所述的消息收发实体,其特征在于,所述消息收发实体从包括消息收发队列和消息收发主题的组中选择。
3.如权利要求2所述的消息收发实体,其特征在于,被配置为所述第一节点的存储器中的数据结构。
4.如权利要求1所述的消息收发实体,其特征在于,被配置为接收所述消息的副本,并在存储所述消息的副本之前向主消息收发实体发送确认。
5.如权利要求1所述的消息收发实体,其特征在于,被配置随后为在所述主消息收发实体空闲期间将所述消息写入耐久存储。
6.如权利要求5所述的消息收发实体,其特征在于,在被写到耐久存储之后,所述消息被从所述主消息收发实体和辅消息收发实体中逐出。
7.如权利要求1所述的消息收发实体,其特征在于,所述主消息收发实体被配置来从所述分布式计算系统的客户机接收全部对应的写请求。
8.如权利要求7所述的消息收发实体,其特征在于,所述主消息收发实体和辅消息收发实体之一被配置为从所述客户机接收对应的读请求。
9.如权利要求1所述的消息收发实体,其特征在于,所述系统包括对应于所述主消息收发实体的多个辅消息收发实体,其中所述消息被包括作为所述主实体的多个消息的一部分,并且其中所述多个辅消息收发实体被配置来将所述多个消息的副本与所述主消息收发实体中的所述多个消息同步。
10.如权利要求9所述的消息收发实体,其特征在于,所述同步用重复检查逻辑提供。
全文摘要
本发明涉及带复制的一致消息收发。揭示了多个通信地耦合的节点的第一节点的存储器中配置的消息收发实体。节点被包括在分布式计算系统中。消息收发实体被配置为作为在通信地耦合的节点的消息收发服务器中的辅消息收发实体来运行。消息收发实体通信地耦合到配置在多个节点的第二节点的存储器中的主消息收发实体。主消息收发实体配置来存储消息;存储消息的副本。此外,配置消息收发实体以在主消息收发实体故障时提升为新的主消息收发实体。
文档编号H04L12/58GK102447650SQ20111033939
公开日2012年5月9日 申请日期2011年10月24日 优先权日2010年10月25日
发明者A·诺瑞, J·卡蒂, K·帕拉玛斯万姆, M·克里希纳普拉塞德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1