CN102404383B - 在分布式基础设施中执行本地计算的方法 - Google Patents
在分布式基础设施中执行本地计算的方法 Download PDFInfo
- Publication number
- CN102404383B CN102404383B CN201110306685.9A CN201110306685A CN102404383B CN 102404383 B CN102404383 B CN 102404383B CN 201110306685 A CN201110306685 A CN 201110306685A CN 102404383 B CN102404383 B CN 102404383B
- Authority
- CN
- China
- Prior art keywords
- action
- computing
- queue
- affairs
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Abstract
本发明涉及在分布式基础设施中执行计算。本发明涉及用于在分布式基础设施中执行计算的方法、系统和计算机程序产品。本发明的实施例包括可用于执行高效(存储器内)的、可伸缩的、能从故障恢复的、原子的、流控制的、长时间运行的无状态的和有状态的分布式计算的通用分布式计算基础设施。由分布式计算基础设施提供的保证可以建立在底层分布式基本构造的现存保证的基础上,以隐藏容错的复杂性、允许大规模高可用处理、允许高效资源利用以及便于有状态和无状态计算的通用开发。分布式计算基础设施还可提供一基底,在该基底上可增强现存分布式计算模型以使之变得能从故障恢复。
Description
技术领域
本发明涉及分布式基础设施,尤其涉及在分布式基础设施中执行计算。
背景技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成有线和无线计算机网络,计算机系统和其他电子设备可以在该计算机网络上传输电子数据。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境上。
在一些计算环境中,客户端将对服务的请求路由到被称为服务会合点的逻辑目的地。更具体地说,这些被路由的服务请求被担任会合点所有者的联盟节点处理。可在会合点处提供的一种典型服务是存储,诸如例如SQL服务器数据服务。
与传统的客户端-服务器模型相比,这种系统的一个复杂之处在于:在节点加入和离开联盟或者系统中出现故障时,会合点所有权可能改变。然而,使客户端避免这个复杂之处并且向它们提供它们正在从单一的、逻辑上一致的会合点获得服务的假象是合乎需要的。
如此,为了在会合点提供单一的、逻辑上一致的服务,在会合点维持的状态必须被复制以确保当目前正在担任会合点所有者的节点出现故障时该状态不会丢失。这种复制使得任何节点能够取代故障节点作为所有者来以与故障节点在其故障前所采取的动作相一致的方式行动。即,可将此问题视为复制状态机问题,这又意味着数据一致性保证。
然而,现有分布式系统通常缺少对提供分布式计算作为重复的高可用服务 这一问题的解决方案。大多数现有分布式计算模型具有不同的关注点。例如,中间结果(输入和输出)必须使用文件或专用存储来实现一定的高可用性保证。此外,这些分布式计算模型是面向数据流的,其中运算符接收输入、产生输出而且它们主要是函数性的、无状态的。除非这些运算符的所有输入均可用,否则它们不能开始。
典型分布式计算模型的另一限制在于不能为在存在故障或负载平衡时执行的计算提供很强的一致性保证,从而将所有的工作留给了计算的开发者/操作者(重启、终止、故障切换等)。
发明内容
本发明涉及用于在分布式基础设施中执行计算的方法、系统和计算机程序产品。在一些实施例中,执行本地有状态计算。基于基本构造(fabric based)的分布式计算基础设施内的副本集合包括主要计算节点和一个或多个次要计算节点。主要计算节点和一个或多个次要计算节点中的每一个具有相同的当前状态,并被配置成具有用于执行本地计算的相同的可执行操作组。该操作组包括至少一个与输入或输出队列有关的操作和至少一个修改计算状态的操作。
该主要计算节点执行该本地计算。为此,该主要计算节点为该本地计算创建事务。该主要计算节点逻辑上执行该操作组中的一个或多个附加操作。该附加操作包括处理该当前计算状态,处理该当前计算状态包括以下中的一个或多个:逻辑上产生附加计算状态以及逻辑上修改现存计算状态。该附加操作包括逻辑上执行该至少一个与输入或输出队列有关的操作。该附加操作包括依照事务提交操作和事务中止操作之一来终止该事务。
该主要计算节点对该本地计算的执行被复制至系统存储器中以复制至该一个或多个次要计算节点。复制包括对为该本地计算创建事务、逻辑上执行该操作组中的该一个或多个附加操作以及终止该事务进行复制。对终止该事务的复制用信号通知该一个或多个次要计算节点依照该事务提交操作或该事务中止操作而应用改变。
响应于终止该事务,该主要计算节点依照该事务提交操作或该事务中止操作而应用改变。当该事务提交操作终止该事务时,应用物理改变被应用以实现 该操作组中每个操作的逻辑应用。物理改变包括将该当前计算状态与任何附加计算状态和任何经修改的现存计算状态协调成为新的提交的计算状态。物理改变还包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作。当该事务中止操作终止该事务时,该至少一个与输入或输出队列有关的操作被逻辑翻转。
在其他实施例中,执行本地无状态计算。计算节点被配置成具有用于执行无状态本地计算的多个操作的可执行操作组,该操作组包括至少一个与输入或输出队列有关的操作。该计算节点执行该本地无状态计算。
该计算节点为该本地无状态计算创建事务。该计算节点逻辑上执行该操作组中的一个或多个操作。该本地计算的失败在完成该操作组中的该一个或多个操作之后的指定操作之前被可靠地检测。该本地计算在该指定操作被可靠地重启。该计算节点逻辑上执行该指定操作和该指定操作之后的任何剩余操作,直到该多个操作被执行。该事务依照事务提交操作和事务中止操作之一终止。
响应于终止该事务,该计算节点依照该事务提交操作或该事务中止操作而应用改变。当该事务提交操作终止该事务时,应用物理改变以实现该操作组中的该多个操作中的每个操作的逻辑应用。应用物理改变包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作。当该事务中止操作终止该事务时,逻辑上翻转该至少一个与输入或输出队列有关的操作。
提供本发明内容以便以简化的形式介绍将在以下的具体实施方式中进一步描述的一些发明内容。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图简述
为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图 中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
图1示出便于执行分布式计算的一示例分布式计算体系结构。
图2A示出用于本地有状态计算的复制的附加视图。
图2B示出在图2A中示出的用于本地有状态计算的主要计算实例的进一步视图。
图3示出用于本地无状态计算的计算实例的视图。
图4A示出便于执行分布式计算的一示例分布式计算体系结构。
图4B示出便于作为有状态分布式计算的一部分来确认接收到的消息的图4A的示例分布式计算体系结构。
图5A示出便于确认本地无状态计算之间的消息的示例分布式计算体系结构。
图5B示出便于确认无状态和有状态本地计算之间的消息的示例分布式计算体系结构。
图6示出用于在副本集合处执行有状态本地计算的示例方法的流程图。
图7示出用于执行无状态本地计算的一示例方法的流程图。
图8示出用于执行分布式计算的一示例方法的流程图。
图9示出用于作为有状态分布式计算的一部分来确认接收到的消息的一示例方法的流程图。
图10示出用于作为无状态分布式计算的一部分来确认接收到的消息的一示例方法的流程图。
具体实施方式
本发明涉及用于在分布式基础设施中执行计算的方法、系统和计算机程序产品。在一些实施例中,执行本地有状态计算。基于基本构造的分布式计算基础设施内的副本集合包括主要计算节点和一个或多个次要计算节点。该主要计算节点和该一个或多个次要计算节点中的每一个具有相同的当前状态并被配 置成具有用于执行本地计算的相同的可执行操作组。该操作组包括至少一个与输入或输出队列有关的操作和至少一个修改计算状态的操作。
该主要计算节点执行该本地计算。为此,该主要计算节点为该本地计算创建事务。该主要计算节点逻辑上执行该操作组中的一个或多个附加操作。该附加操作包括处理该当前计算状态,包括以下中的一个或多个:逻辑上产生附加计算状态以及逻辑上修改现存计算状态。该附加操作包括逻辑上执行该至少一个与输入或输出队列有关的操作。该附加操作包括依照事务提交操作和事务中止操作之一来终止该事务。
该主要计算节点对该本地计算的执行本被复制至系统存储器中以复制至该一个或多个次要计算节点。复制包括对为该本地计算创建事务、逻辑上执行该操作组中的该一个或多个附加操作以及终止该事务进行复制。对终止该事务的复制用信号通知该一个或多个次要计算节点依照该事务提交操作或该事务中止操作而应用改变。
响应于终止该事务,该主要计算节点依照该事务提交操作或该事务中止操作而应用改变。当该事务提交操作终止该事务时,应用物理改变被应用以实现该操作组中每个操作的逻辑应用。物理改变包括将该当前计算状态与任何附加计算状态和任何经修改的现存计算状态协调成为新的提交的计算状态。物理改变还包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作。当该事务中止操作终止该事务时,该至少一个与输入或输出队列有关的操作被逻辑翻转。
在其他实施例中,执行本地无状态计算。计算节点被配置成具有用于执行无状态本地计算的多个操作的可执行操作组,该操作组包括至少一个与输入或输出队列有关的操作。该计算节点执行该本地无状态计算。
该计算节点为该本地无状态计算创建事务。该计算节点逻辑上执行该操作组中的一个或多个操作。该本地计算的失败在完成该操作组中的该一个或多个操作之后的指定操作之前被可靠地检测。该本地计算在该指定操作被可靠地重启。该计算节点逻辑上执行该指定操作和该指定操作之后的任何剩余操作,直到该多个操作被执行。该事务依照事务提交操作和事务中止操作之一来终止。
响应于终止该事务,该计算节点依照该事务提交操作或该事务中止操作而应用改变。当该事务提交操作终止该事务时,应用物理改变以实现该操作组中的该多个操作中的每个操作的逻辑应用。应用物理改变包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作。当该事务中止操作终止该事务时,逻辑上翻转该至少一个与输入或输出队列有关的操作。
本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这些计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质:计算机存储介质(设备)和传输介质。
计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置的且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于承载计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码手段可从传输介质自动传输到计算机存储介质(设备)(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用(甚至主要利用) 传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链路(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。
本发明的实施例包括可用于执行高效(存储器内)的、可伸缩的、能从故障恢复的、原子的、流控制的、长期运行的无状态的和有状态的分布式计算的通用分布式计算基础设施。由分布式计算基础设施提供的保证可以建立在底层分布式基本构造(诸如例如覆盖网络)的现存保证的基础上,以隐藏容错的复杂性、允许大规模高可用处理、允许高效资源利用以及便于有状态和无状态计算的通用开发。保证可包括邻居和路由一致性、完美的故障检测、以及数据一致的复制和故障切换重新配置。分布式计算基础设施还可提供一基底,在该基底上可增强现存分布式计算模型以使之变得能从故障恢复。
在一些实施例中,服务状态/数据/配置被复制来为分布式服务器提供高可用性。计算节点(复制关系中涉及的实体)形成副本集合或分区。在副本集合或分区内,一个计算节点可以是主要计算节点而一个或多个其他计算节点可以是次要计算节点。读取操作可以由主要计算节点完成。写入操作可以首先由主要计算节点看到,然后使用法定数量(quorum)提交协议转发到次要计算节点。副本集合中的每个次要计算节点可以按与主要计算节点看到并应用改变相同 的顺序看到并应用改变。
可使用一组故障切换和重配置算法来向客户端提供从单一的一致实体接收服务的假象。该算法可提供有关维持副本集合(分区)处于可运转状态的保证。维持可运转状态可包括从主要计算节点到次要计算节点的故障切换、在有太少的次要计算节点可用时构建新的次要节点、以及将主要计算节点与现有次要计算节点进行切换。
为了在分布式计算基础设施中提供一致性保证,可使用故障检测器。故障检测器具有提供有关分布式计算基础设施内的哪些实体(例如,进程)停机的可靠信息的责任。可使用不同类型的故障检测器。在一些实施例中,使用极为精确(不将未停机的进程报告为停机的)且极为完整(报告所有停机的进程)的完美的故障检测器。
本发明的实施例还包括消息收发子系统。消息收发子系统可利用消息收发原语来实现将消息发送至节点/进程或发送至分布式计算体系结构内的副本集合。所利用的消息收发范例可包括点到点、多播、和广播,具有最大努力和可靠版本中的一个或多个。
本地计算被限定为是副本集合(分区)。本地计算的输入可被建模为先进先出(“FIFO”)队列(源)的集合。本地计算的输出可被建模为FIFO队列(宿)的集合。本地计算的每个实例是实现用于暴露其状态(如果有的话)并用于执行实际处理的接口的类。对于有状态计算,通过基本构造(例如,覆盖网络)复制层,可使状态和/或状态改变高度可用。可使用同样方式使消耗输入并产生输出的本地计算高度可用。
这样,分布式计算可以由本地计算的有向无环图(“DAG”)表示。来自上游本地计算的输出可作为输入传递至下游本地计算。
图1示出便于执行分布式计算108的一示例分布式计算体系结构100。参照图1,分布式计算体系结构100包括副本191、192、193和194。所描绘的副本中的每一个(其可包括一个或多个计算机系统)通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网等网络(或作为网络的一部分)彼此连接。相应地,所描绘的副本中的每一个以及任何其他连接的计算机系统及其组件都可以创建与消息相关的数据并通过网络交换与消息相关的数 据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
分布式计算108由从副本(本地计算)191、192、193和194形成的DAG表示。如所描绘的,每个副本(本地计算)包括多个计算实例。例如,副本191包括计算实例101A、101B和101C。计算实例101A包括计算状态111、计算处理121和宿队列131。类似地,副本192包括计算实例102A、102B和102C。计算实例102A包括计算状态112、计算处理122和宿队列132。
同样地,副本193包括计算实例103A、103B和103C。计算实例103A包括计算状态113、计算处理123、源队列133和143和宿队列153。依次地,副本194包括计算实例104A、104B和104C。计算实例104包括计算状态114、计算处理124和源队列134。
一般而言,计算处理121和计算处理122执行一个或多个操作以分别更改计算状态111和112并输出消息191和192。计算实例101A可将消息191排在宿队列131中。计算实例101B可将消息192排在宿队列132中。
对计算状态111的改变和消息191到宿队列131的入队可被复制到计算实例101B和101C。类似地,对计算状态112的改变和消息192到宿队列132的入队可被复制到计算实例102B和102C。
队列到队列协议可用于分别使消息191和192从宿队列131和132出队并分别使消息191和192入队到源队列133和134中。消息191从宿队列131的出队可被复制到计算实例101B和101C。类似地,消息192从宿队列132的出队可被复制到计算实例102B和102C。同样地,消息191和192到源队列133和143的入队可被复制到计算实例103B和103C。
计算处理123可使用消息191和192来执行一个或多个操作以更改计算状态113并输出消息193。计算实例103A可将消息193排在宿队列153中。对计算状态113的改变和消息193到宿队列153的入队可被复制到计算实例103B和103C。
队列到队列协议可用于使消息193从宿队列153出队并可使消息193入队到源队列134中。消息193从宿队列153的出队可被复制到计算实例103B和 103C。同样地,消息193到源队列134的入队可被复制到计算实例104B和104C。
计算处理124可使用消息193来执行一个或多个操作以更改计算状态114。对计算状态113的改变可被复制到计算实例104B和104C。
图2A示出用于本地有状态计算212(诸如例如编辑计算、排序计算等)的复制的附加视图。一般而言,本地计算212接收输入216并产生输出217。
如所描绘的,主要计算实例201A包括源队列206和207、本地计算212和宿队列208。本地计算212进一步包括计算状态204和计算处理203。当计算处理203执行时,源队列206和207(例如,使消息出队)、计算状态204(例如,改变值)和输出队列208(例如,使消息入队)可被改变。这些改变被复制到次要计算实例201B和201C处的相应的源队列206和207、计算状态204和输出队列208。因此,在主要计算实例201A失败的情况下,次要计算实例201B、201C等之一可承担主要计算节点的角色。一旦承担主要计算节点的角色后,承担的节点可接管计算处理203。
作为位置计算的一部分的操作包括输入数据的消耗、输出数据的产生以及对其内部状态的修改,与事务相关联。事务概念提供了跨越作为本地计算的一部分的操作集合的原子性保证。本地计算可增量式创建(顺序或并行的)事务的集合,在其中它记录需要被变得高度可用的信息。事务创建可包括自源队列的出队操作、到宿队列中的入队操作以及内部状态改变。当事务完成时,所述操作所产生的所有改变都作为原子单元被提交(或中止)。因此,事务帮助确保在发生故障的情况下从相同的一致视图来继续该处理。当事务未能提交(或就此中止)时,可以采用快速故障(fail-fast)方案。
源队列提供出队操作而宿队列提供入队操作。事务提供提交或中止由本地计算做出的当前改变的能力。每个本地计算实现在必须为本地计算构建新副本的情况下使用的状态获得/设定接口。而且,每个本地计算实现允许作为计算初始化的一部分(初始状态、配置选项等)将初始处理参数传入的接口。
这样,在本地计算过程中,消息被从源队列出队/消耗并在活动事务(例如,具有给定id)中被处理。作为事务的一部分,新状态可被创建,且新输出消息可被产生。
当事务提交时,从源队列出队的消息被物理移除。所产生的新输出消息也 被入队到宿队列中。新提交状态是在旧提交状态和在处理时产生的未提交状态改变之间的提交的协调。因为计算是以这种方式设计的,所以当在系统中发生故障切换时,计算的状态和其输入和输出彼此一致。这为新型高可用本地计算的开发带来了更简单的体验。
作为本地计算的一部分执行的操作在提交时刻生效。即,此时处理中发生的所有改变原子地发生。逻辑光标可维持在源队列上,而宿队列可直到提交后才被有效触及。
事务操作可以用不同模式来复制。在一些实施例中,使用饥渴复制模式。使用饥渴复制事务,各操作在它们发生时被复制且副本集合中的每个副本对操作进行缓冲。在其他实施例中,使用懒惰复制模式。使用懒惰复制模式事务,主要计算实例上的操作在稍后时刻在次要计算实例上被看到。当事务操作的开销比复制它的开销要小时,使用懒惰复制模式。因此,通过批量复制事务操作来分摊开销是有益的。在懒惰模式复制事务的一种具体实现中,各操作只在提交时刻被复制。
当事务中止时,事务可从源队列恢复各元素并使得它们对于后续的出队操作可用。新状态改变可被忘记而不必然需要被撤消。因为宿队列不可能已被触及,所以输出可被丢弃。
在故障切换时,当前存在于新主要计算节点(旧次要计算节点)上的运行中事务可被丢弃(因为它们没有工作要做)。如果故障切换不涉及主要计算节点的崩溃(例如,故障切换是由负载平衡对换角色动作引起的)时,旧的主要计算节点(新的次要计算节点)上在进行的事务接收中止异常且旧的主要计算节点上的处理停止。
单一计算内的各事务的并行执行能够发生。
图2B示出用于本地有状态计算212的主要计算实例201A的进一步视图。如所描绘的,计算处理203可包括多个操作,所述多个操作被执行以实现本地有状态计算212。用于使消息从源队列出队(例如,第3、4、6、7行)和使消息入队到宿队列中(例如,第11和12行)的操作被包括于所述操作中。用于执行基于消息内容的计算的操作(例如,第5和8行)也被包括在所述操作中。用于使消息入队的操作(例如,第11和12行)也被包括在所述操作中。用于 实现状态改变的操作(例如,第9和10行)也被包括在所述操作中。这些操作可在指示事务的开头和结尾的其他操作内关闭(例如,第1、2、13、14行)。
在主要计算实例201A的操作的执行可被复制至系统存储器214中以复制至次要计算节点201B、201C等。复制可以在每个操作的基础上或者在一批操作的基础上进行。
图6示出用于在副本集合处执行有状态本地计算的示例方法600的流程图。将针对图2B的组件和数据来描述方法600。
方法600包括主要计算节点执行本地计算的动作(动作601)。例如,主要计算实例201A可执行本地计算212。执行本地计算包括为该本地计算创建事务的动作(动作602)。例如,可执行计算处理203的第1和2行来为位置计算212创建事务。
执行本地计算包括逻辑上执行操作组中的一个或多个附加操作的动作(动作603)。例如,可执行计算处理203的第3-12行以逻辑上执行本地计算212的一个或多个附加操作。
逻辑上执行一个或多个附加操作包括处理当前计算状态的动作,处理当前计算状态包括以下各动作中的一个或多个:逻辑上产生附加计算状态以及逻辑上修改现存计算状态(动作604)。例如,可执行第5和8行以处理计算状态204以及分别来自相应消息211和212的内容。处理计算状态204可在逻辑上产生新的状态或修改计算状态204。可执行第10行以写出新的和/或经改变的状态214。
逻辑上执行一个或多个附加操作包括逻辑上执行至少一个与输入或输出队列有关的操作的动作(动作605)。例如,可执行第3和4行或第6和7行以执行分别与源队列206和207有关的输入队列操作。可执行第11和12行以执行与宿队列208有关的输出队列操作。
执行本地计算包括依照事务提交操作和事务中止操作之一终止事务的动作(动作606)。例如,可执行计算处理203的第13和14行以提交在第1和2行创建的事务。或者,可执行用于中止在第1和2行创建的事务的指令行。
方法600包括将主要计算节点对本地计算的执行复制到系统存储器中以复制至一个或多个次要计算节点的动作(动作607),包括对为本地计算创建事 务、逻辑上执行操作组中的一个或多个附加操作、以及终止事务进行复制,对终止事务的复制以信号通知该一个或多个次要计算节点依照该事务提交操作或事务中止操作来应用改变。例如,主要计算实例201A对本地计算212的执行可被复制至系统存储器214中以复制至次要计算实例201B、201C等。本地计算212的执行的复制可包括对在第1和2行的创建事务、在第3-12行的执行一个或多个附加操作、以及在第13和14行的提交事务进行复制。或者,当事务被中止时,复制可包括对中止该事务进行复制。复制可以在每个操作的基础上(例如,一次一行)或在一批操作的基础上(例如,成组的操作)进行。
对终止(提交或者中止)事务进行的复制用信号通知次要计算实例201B、201C等在适当时依照事务提交操作或事务中止操作应用改变。
方法600包括响应于终止该事务,主要计算节点依照该事务提交操作或该事务中止操作而应用改变的动作(动作608)。例如,主要计算实例210A可依照事务提交操作(在第13和14行)应用改变。或者,主要计算实例201A可依照事务中止操作应用改变。
方法600包括当事务提交操作终止该事务时,应用物理改变以实现操作组中的每个操作的逻辑应用的动作(动作609)。例如,当事务提交终止该事务时,主要计算实例201A可应用物理改变以实现计算处理203的第3-12行的逻辑应用。
应用物理改变包括将该当前计算状态与任何附加计算状态和任何修改的现存计算状态协调成为新的提交的计算状态的动作(动作610)。例如,主要计算实例201A可将计算状态204与经改变的状态214(其可包括经改变的和/或新的状态)协调成为新的提交的状态204。
应用物理改变包括方法600,方法600包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作的动作(动作611)。例如,主要计算实例201A可使消息211和212分别从源队列206和207物理出队并使消息213物理入队到宿队列208中。
方法600包括当该事务中止操作终止该事务时,逻辑上翻转该至少一个与输入或输出队列有关的操作的动作(动作612)。例如,当事务中止终止该事务时,主要计算实例201A可逻辑上翻转计算处理203的第3-12行的执行。这 可包括翻转使消息逻辑入队和出队的操作。
图3示出用于本地无状态计算312(诸如例如,读取计算、过滤计算等)的计算实例301的视图。如图3中描绘的,包括计算实例301、故障检测器331和重启模块332。计算实例301包括源队列306、本地计算312、以及宿队列307。当计算处理303执行时,源队列306(例如,使消息出队)和输出队列208(例如,使消息入队)可被改变。故障检测器331被配置成检测计算处理303中的操作在何时何地失败。重启模块332被配置成从故障点重启计算处理303。
图7示出用于执行无状态本地计算的一示例方法700的流程图。将参考图3的组件和数据来描述方法700。
方法700包括计算节点执行本地无状态计算的动作(动作701)。例如,计算实例201可执行本地计算312。方法700包括为本地无状态计算创建事务的动作(动作702)。例如,可执行计算处理303的第0和1行来为位置计算312创建事务。方法700包括逻辑上执行操作组中的一个或多个操作的动作(动作703)。例如,计算实例301可逻辑上执行计算处理303的第2和3行。
方法700包括可靠地检测在完成操作组中的一个或多个操作之后的指定操作之前的本地计算的失败的动作(动作704)。例如,故障检测器331可检测完成计算处理303的第4行之前的失败341。方法700包括在该指定操作处可靠地重启本地计算的动作(动作705)。例如,重启模块332可在计算处理303的第4行发起重启342以重启本地计算312。
方法700包括逻辑上执行该指定操作和该指定操作之后的任何剩余操作,直到该多个操作被执行的动作(动作706)。例如,计算实例301可逻辑上执行计算处理303的第4行,然后执行第5-9行。方法700包括依照事务提交操作和事务中止操作之一终止事务的动作(动作707)。例如,可执行计算处理303的第8和9行以提交在第0和1行创建的事务。或者,可执行用于中止在第0和1行创建的事务的指令行。
方法700包括响应于终止该事务,主要计算节点依照该事务提交操作或该事务中止操作而应用改变的动作(动作708)。例如,计算实例301可依照事务提交操作(在第8和9行)应用改变。或者,计算实例301可依照事务中止 操作应用改变。
方法700包括当事务提交操作终止该事务时,应用物理改变以实现操作组中的多个操作中的每个操作的逻辑应用的动作(动作709)。例如,当事务提交终止该事务时,计算实例301可应用物理改变以实现计算处理303的第2-7行的逻辑应用。
方法700包括更改至少一个队列的状态以物理实现该至少一个与输入或输出队列有关的操作的动作(动作710)。例如,计算实例301可使消息211从源队列206物理出队并使消息312物理入队到宿队列307中。
方法700包括当该事务中止操作终止该事务时,逻辑上翻转该至少一个与输入或输出队列有关的操作的动作(动作711)。例如,当事务中止终止该事务时,计算实例301可逻辑上翻转计算处理303的第2-8行的执行。这可包括翻转使消息逻辑入队和出队的操作。
图4A示出便于执行分布式计算499的分布式计算体系结构400。如所描绘的,分布式计算体系结构包括副本491和492。副本491包括主要计算实例401A和次要计算实例401B和401C。同样地,副本492包括主要计算实例402A和次要计算实例402B和402C。
一般而言,可依照队列到队列协议将消息(例如,消息496)从副本491传输到副本492。队列到队列协议负责实现用于将消息从宿队列只一次按顺序传递到一个或多个下游源队列的状态机。队列协议可将消息传递限制于宿队列中提交的消息。限制于提交的消息可以通过保持带有与每个提交一起更新的提交标记的每个宿队列中的状态而实现。队列到队列协议还可实现在任一或全部端点应用的流控制策略以防止系统的过度利用或利用不足。
队列到队列协议可依赖现存基本构造(例如,覆盖网络)组件,诸如例如一致路由以及(例如,完美的)故障检测。故障检测可用于确定在故障切换的情况下下游计算的新的主要副本,而路由层可用于实现可靠的消息传递。接收者计算节点的协议端点可实现重复检测、消息重排序和基于队列定额的扼流。发送者计算节点的端点可实现具有重试和指数避让的发送窗口算法。
使用窗口机制,队列到队列协议可在表示分布式计算的DAG中实现流控制。下游分区的本地计算的临时性能瓶颈转化为队列到队列协议对馈送到受影 响的本地计算的源队列的宿队列施加反向压力。该反向压力进而又影响馈送到受影响的宿队列的上游分区的本地计算的入队操作的及时完成。及时完成的减少进一步又转化为上游分区的本地计算的源队列变满。这有可能向上游传播到分布式计算的各源。窗口机制还能在下游分区的本地计算中的临时性能瓶颈被除去后将表示分布式计算的DAG自动恢复到其健康状态。
回到图4A,主要计算实例401A包括便于执行本地计算441的计算状态411和计算处理421。本地计算441可以将消息入队到宿队列431。宿队列431可包括指示宿队列431内的一位置的提交标记441。在该位置后的消息是提交的消息,而在该位置前的消息还没有提交(并因此在中止时仍可被除去)。主要计算实例401A被配置成作为分布式计算的一部分将宿队列431中的提交的消息发送至主要计算实例402。
主要计算实例402A包括便于执行本地计算442的计算状态412和计算处理422。本地计算442可以将消息从源队列432出队。主要计算实例402A被配置成作为分布式计算的一部分在源队列432中接收来自主要计算实例401A的消息。
本发明的实施例包括在表示分布式计算的DAG中彼此互联的一个或多个有状态本地计算和/或一个或多个无状态本地计算的组合。
图8示出用于执行分布式计算的一示例方法800的流程图。将参考图4A中的分布式计算体系结构400的组件和数据来描述方法800。
方法800包括第一副本集合执行表示分布式计算的一部分的第一本地计算的动作(动作801)。例如,作为分布式计算499的一部分,副本491可执行本地计算441。执行第一本地计算包括为第一本地计算创建事务的动作(动作802)。例如,计算处理421中的操作可为本地计算441创建事务。
执行第一本地计算包括逻辑上执行第一本地计算的操作组的动作,包括执行至少一个与输出队列有关的操作(动作803)。例如,主要计算实例401A可逻辑上执行计算处理421中的操作组。该操作组可包括使消息496入队到宿队列431中。
执行第一本地计算包括提交该事务的动作(动作804)。例如,为本地计算441创建的事务可被提交。
响应于提交该事务,方法800包括应用物理改变以实现操作组中的每个操作的逻辑应用的动作,包括将消息插入到至少一个输出队列中以物理实现该至少一个与输出队列有关的操作(动作805)。例如,主要计算实例401A可应用物理改变以实现计算处理421中的各操作的逻辑应用。物理操作可包括将经改变的和/或新的状态与计算状态411进行协调并物理地使消息496入队到宿队列431中。
方法800包括更新该至少一个输出队列内的提交标记以指示插入的消息是提交的消息的动作(动作806)。例如,主要计算节点401A可更新提交标记441以指示消息496是提交的消息。
方法800包括依照检测插入的消息已被提交的队列到队列协议将消息从第一副本集合的至少一个输出队列传送至至少一个第二副本集合的至少一个输入队列的动作(动作807)。例如,消息496可依照检测到消息496已被提交的队列到队列协议(具有在副本491处的发送端点和在副本492处的接收端点)而被从宿队列431传送到源队列432。
方法800包括第二副本集合执行表示分布式计算的下一部分的第二本地计算的动作(动作808)。例如,作为分布式计算499的一部分,副本492可执行本地计算442。方法800包括为第二本地计算创建第二事务的动作(动作809)。例如,计算处理421中的操作可为本地计算441创建事务。
方法800包括逻辑上执行第二本地计算的操作组的动作,包括执行至少一个与输入队列有关的操作(动作810)。例如,主要计算实例402A可逻辑上执行计算处理422中的操作组。该操作组可包括使消息496从源队列432出队。
方法800包括依照事务提交操作和事务中止操作之一终止第二事务的动作(动作811)。例如,为本地计算441创建的事务可依照事务提交操作或事务中止操作而被终止。
方法800包括当事务提交操作终止事务时,应用物理改变以实现该操作组中的每个操作的逻辑应用的动作(动作812),包括访问来自该至少一个输入队列的消息以物理实现该至少一个与输入队列有关的操作。例如,主要计算实例402A可应用物理改变以实现计算处理422中的操作的逻辑应用。物理操作可包括将经改变的和/或新的状态与计算状态412进行协调并物理地使消息496 从源队列431出队。
方法800包括当该事务中止操作终止该事务时,逻辑上翻转该至少一个与输入队列有关的操作的动作(动作813)。例如,当事务中止操作终止来自本地计算442的操作时,主要计算实例402A可以逻辑上翻转在计算处理422中的操作执行。这可包括翻转消息491的逻辑出队。
图4B示出便于作为有状态分布式计算499的一部分确认接收的消息的分布式计算体系结构400。
图9示出用于作为有状态分布式计算的一部分来确认接收到的消息的一示例方法900的流程图。将参考图4B中的分布式计算体系结构400的组件和数据来描述方法900。
方法900包括依照队列到队列协议在第一副本集合的输入队列处接收消息的动作(动作901),其中该消息是响应于该消息在第二副本集合处被提交而从第二副本集合处的输出队列发送的。例如,副本492依照队列到队列协议在宿队列432处接收消息496。消息496是响应于该消息在副本491处被提交而从在副本491的源队列431发送的。
方法900包括将该消息复制至第二副本集合中包括的一个或多个次要计算节点的动作(动作902)。例如,副本492可将消息496复制至次要计算节点402B、402C等。
方法900包括从一个或多个次要计算节点中的写入法定数量个次要计算节点接收该消息已被成功复制的确认的动作(动作903),来自该写入法定数量个次要计算节点的确认表示该消息在该第一副本集合内被提交了法定次数。例如,次要计算实例402B、402C等中的写入法定数量个次要计算实例(例如,简单多数或其他指定阈值)可发送确认至主要计算实例402A,从而确认消息496的接收。例如,次要计算实例402B可发送确认497,次要计算实例402C可发送确认498等。主要计算实例402A可从次要计算节点接收确认,包括确认497、498等。
在某些实施例中,写入法定数量被限定为[(N+1)/2]的向上取整,其中N等于该副本集合中的副本计数。因此,如果一副本具有五个次要计算实例,则所述次要计算实例中的至少三个必须确认消息以达到写入法定数量。
方法900包括第一副本集合响应于该消息在第一副本集合内被提交了法定次数而发送确认至第二副本集合的动作(动作904),该确认对第一副本集合成功接收该消息且第二副本集合被允许去除该消息进行确认。例如,副本492可响应于足够数量的次要计算节点确认消息496的接收而将确认(ACK)494发送回副本491。确认494指示副本492成功接收了消息496且副本491被允许去除消息496。
图5A示出便于确认无状态本地计算之间的消息的一示例分布式计算体系结构。如所描绘的,分布式计算体系结构500包括计算实例501、502及503和用于执行分布式计算549的其他计算实例504及506。计算实例501、502和503分别包括无状态计算处理521、522和523。计算实例501、502和503中的每一个包括源队列和宿队列以便于例如依照队列到队列协议进行消息交换。计算实例501包括源队列531和宿队列541,计算实例502包括源队列532和宿队列542,计算实例503包括源队列533和宿队列543。其他计算实例504可在计算实例501之前(或在计算实例501的上游)。其他计算实例505可在计算实例503之后(或在计算实例503的下游)。
确认在无状态本地计算之间发送的消息可以不同于确认在有状态本地计算之间发送的消息。例如,无状态本地计算可在单一计算实例上(而不是副本上)操作。如此,所接收的消息不被复制到次要计算实例。进而,因为无状态本地计算可能失败并重启(在无复制的情况下),所以失败可能导致接收到的消息在一计算实例处被删除。然而,为了重启,该无状态本地计算可能再次需要访问该消息。因此,该无状态本地计算可以从上游计算实例重新请求该消息。即,如果下游计算实例过早向上游发送确认通知然后死机并被重启,则再下游的计算实例可能遭受输入损失。
相应地,在某些实施例中,无状态计算在它基于输入创建的输出本身已被确认之后才确认这些输入。用这种方式进行的确认可以递归,比如例如当多个无状态本地计算在DAG中彼此跟随时。
图10示出用于作为无状态分布式计算的一部分确认接收到的消息的一示例方法1000的流程图。将参考分布式计算体系结构500的组件和数据来描述方法1000。
消息581可在源队列531从其他计算实例504接收。一旦接收消息581之后,计算实例501可执行计算处理521。执行计算处理521可使得消息582被入队到宿队列541中。一旦消息582被提交之后,消息582可被发送至计算实例502。
方法1000包括依照队列到队列协议在第一计算节点的输入队列处接收消息的动作(动作1001),其中该消息是响应于该消息在第二计算节点处被提交而从第二计算节点处的输出队列发送的。例如,源队列532可依照队列到队列协议并响应于消息582在计算实例501被提交而从宿队列541接收消息582。
方法1000包括为本地无状态计算创建事务的动作(动作1002)。例如,计算实例502可为计算处理522创建事务。方法1000包括逻辑上执行该操作组的动作,包括基于该消息产生附加消息(动作1003)。例如,计算实例502可逻辑上执行计算处理522中的操作组。逻辑上执行计算处理522中的该操作组可包括基于消息582产生消息583。方法1000包括提交事务的动作(动作1004)。例如,为计算处理522创建的事务可被提交。
响应于提交该事务,方法1000包括应用物理改变以实现操作组中的每个操作的逻辑应用的动作(动作1005),包括将该附加消息插入到至少输出队列中以物理实现该至少一个与输出队列有关的操作。例如,响应于提交计算处理522的事务,计算实例502可应用物理操作以实现逻辑上执行的操作。应用物理操作可包括使消息583入队到宿队列542中。
方法1000包括响应于该消息在第二计算节点处被提交而依照队列到队列协议将所述附加消息从第一计算节点的该至少一个输出队列传输到第三计算节点的至少一个输入队列的动作(动作1006)。例如,消息583可响应于消息583在宿队列542被提交而依照队列到队列协议被从宿队列542传送到源队列533。
一旦接收到消息583之后,计算实例503可执行计算处理523并将消息584传送到其他计算实例506上。最终,由于达到末尾计算实例(或有状态本地计算),计算实例502可接收对消息584的确认。进而,计算实例503可发送确认592至计算实例502。确认592指示计算实例503成功接收了消息583且计算实例502被允许去除消息583。
方法1000包括,在将该附加消息传送到第三计算节点之后,从第三计算节点接收确认的动作(动作1007),该确认对第三计算节点成功接收了该附加消息进行确认。例如,计算实例502可在将消息583发送到计算实例503之后接收确认592。
方法1000包括响应于从第三计算节点接收到确认,第一计算节点向第二计算节点发送进一步确认的动作(动作1008),该进一步确认对第一计算节点成功接收了该消息进行确认。例如,计算实例502可发送确认591至计算实例501。确认591指示计算实例502成功接收了消息582且计算实例501被允许去除消息582。
计算实例501然后可在适当时向上游发送确认消息594至其他计算实例504。
图5B示出便于确认无状态和有状态本地计算之间的消息的一示例分布式计算体系结构550。如所描绘的,分布式计算体系结构550包括副本511、计算实例502和副本503和用于执行分布式计算599的其他计算实例514和516。副本511包括主要计算实例511A和次要计算实例511B和511C。副本512包括主要计算实例512A和次要计算实例512B和512C。
主要计算实例511A包括有状态计算处理541。计算实例512包括无状态计算处理542。主要计算实例513A包括有状态计算处理543。
主要计算实例511A、计算实例502和主要计算实例513A中的每一个包括源队列和宿队列以便于例如依照队列到队列协议进行消息交换。主要计算实例511A包括源队列551和宿队列561,计算实例502包括源队列552和宿队列562。主要计算实例513A包括源队列553和宿队列563。其他计算实例514可在副本511之前(或在副本511的上游)。其他计算实例505可在副本513之后(或在副本513的下游)。
消息554可在源队列551从其他计算实例554接收。一旦接收到消息554,主要计算实例551A将消息554复制到次要计算实例511B和511C。次要计算实例511B和511C(写入法定数量)可通过分别向计算实例511A发送确认564和566来对消息554的接收进行确认。主要计算实例551A可响应于消息554被提交了法定次数而将确认574发送回其他计算实例514。确认575指示副本 511成功接收了消息554且其他计算实例514被允许去除消息554。
计算处理541可执行,从而产生消息556并使消息556入队到宿队列553中。宿队列561包括指示宿队列561内的一位置的提交标记567。在该位置后的消息是提交的消息,而在该位置前的消息还没有被提交(并因此在中止时仍可被移除)。主要计算实例511A被配置成作为分布式计算599的一部分将宿队列553中的提交的消息发送至计算实例512。
源队列552可依照队列到队列协议并响应于消息561在主要计算实例511A处被提交而从宿队列561接收消息556。可执行计算处理542以使得消息557被入队到宿队列562中。一旦消息557被提交,消息557可被发送至主要计算实例513A。消息557可响应于消息557在宿队列562处被提交而依照队列到队列协议被从宿队列562传送到源队列533。计算实例511被配置成作为分布式计算599的一部分将宿队列562中的提交的消息发送至主要计算实例513A。
如同之前描述的,计算实例512(无状态本地操作)可以不立即对消息556的接收进行确认。
消息557可在源队列553从计算实例512接收。一旦接收到消息557,主要计算实例513A将消息557复制到次要计算实例513B和513C。次要计算实例513B和513C(写入法定数量)可通过分别向主要计算实例511A发送确认568和569来对消息557的接收进行确认。主要计算实例513A可响应于消息557被提交了法定次数而将确认572发送回其他计算实例512。
确认572指示副本513成功接收了消息557且计算实例512被允许去除消息557。响应于确认572,计算实例512然后可将确认573向上游发送至主要计算实例511A。确认573指示计算实例512成功接收了消息556且主要计算实例511A被允许去除消息556。
计算处理543也可执行,从而产生消息558并使消息558入队到宿队列533中。宿队列563包括指示宿队列563内的一位置的提交标记571。在该位置后的消息是提交的消息,而在该位置前的消息还没有被提交(并因此在中止时仍可被移除)。主要计算实例513A被配置成作为分布式计算599的一部分将宿队列563中的提交的消息发送至其他计算实例516。主要计算实例513A可最终从其他计算实例516接收回针对消息558的确认。
如同描述过的,本发明的实施例包括可用于执行高效(存储器内)的、可伸缩的、能从故障恢复的、原子的、流控制的、长时间运行的无状态的和有状态的分布式计算的通用分布式计算基础设施。由分布式计算基础设施提供的保证可以建立在底层分布式基本构造(例如,邻居和路由一致性、完美的故障检测和数据一致的复制以及故障切换重新配置)的现存保证的基础上,以隐藏容错的复杂性、允许大规模高可用处理、允许高效资源利用以及便于有状态和无状态计算的通用开发。分布式计算基础设施还可提供一基底,在该基底上可增强现存分布式计算模型以使之变得能从故障恢复。
本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
Claims (15)
1.一种用于在基于基本构造的分布式计算体系结构内的副本集合处执行有状态本地计算的方法,所述副本集合包括一个或多个处理器和系统存储器,所述副本集合包括主要计算节点和一个或多个次要计算节点,所述主要计算节点和所述一个或多个次要计算节点具有相同的当前计算状态,所述主要计算节点和所述一个或多个次要计算节点中的每一个被配置成具有用于执行所述有状态本地计算的相同的可执行的一组操作,该组操作包括至少一个与输入或输出队列有关的操作和至少一个修改所述计算状态的操作,所述方法包括:
A)所述主要计算节点通过如下动作执行所述有状态本地计算的动作:
A1)为所述有状态本地计算创建事务的动作;
A2)逻辑上执行该组操作中的一个或多个附加操作的动作,包括:
A2.1)处理所述当前计算状态的动作,处理所述当前计算状态包括以下动作中的一个或多个:逻辑上产生附加计算状态和逻辑上修改所述当前计算状态;
A2.2)逻辑上执行所述至少一个与输入或输出队列有关的操作的动作;以及
A3)依照事务提交操作和事务中止操作之一终止所述事务的动作;
B)将所述主要计算节点对所述有状态本地计算的执行复制至系统存储器中以复制至所述一个或多个次要计算节点的动作,包括对为所述有状态本地计算创建事务、逻辑上执行该组操作中的所述一个或多个附加操作、以及终止所述事务进行复制,对终止所述事务的复制以信号通知所述一个或多个次要计算节点依照所述事务提交操作或所述事务中止操作而应用改变;
C)响应于终止所述事务,所述主要计算节点依照所述事务提交操作或所述事务中止操作而应用改变的动作,包括:
C1)当所述事务提交操作终止所述事务时,应用物理改变以实现该组操作中的每个操作的逻辑应用的动作,包括:
C1.1)将所述当前计算状态与任何附加计算状态和任何经修改的当前计算状态协调成为新的提交的计算状态的动作;以及
C1.2)更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作;以及
C2)当所述事务中止操作终止所述事务时,逻辑上翻转所述至少一个与输入或输出队列有关的操作的动作。
2.如权利要求1所述的方法,其特征在于,所述主要计算节点执行所述有状态本地计算的动作包括所述主要计算节点执行表示分布式计算的一部分的有状态本地计算的动作。
3.如权利要求1所述的方法,其特征在于,将所述主要计算节点对所述有状态本地计算的执行复制至所述系统存储器中以复制至所述一个或多个次要计算节点的动作包括复制所述至少一个与输入或输出队列有关的操作的动作。
4.如权利要求1所述的方法,其特征在于,还包括:
主要计算节点从所述一个或多个次要计算节点中的写入法定数量个次要计算节点接收消息已被成功复制的指示的动作;
向上游主要计算节点确认所述消息的接收的动作。
5.如权利要求1所述的方法,其特征在于,更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作包括使消息入队到宿队列中的动作。
6.如权利要求5所述的方法,其特征在于,还包括:
在所述宿队列中将所述消息标记为已提交的动作;以及
依照队列到队列协议将所述消息发送至下游主要计算节点的动作。
7.如权利要求1所述的方法,其特征在于,更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作包括依照基于所述计算节点间的负载状态而放松或收紧所述主要计算节点和被配置成执行不同的有状态本地计算的计算节点之间的数据流的策略来更改至少一个队列的状态。
8.一种用于在基于基本构造的分布式计算体系结构内的计算节点处执行无状态本地计算的方法,所述计算节点包括一个或多个处理器和系统存储器,所述计算节点被配置成具有用于执行所述无状态本地计算的可执行的一组多个操作,该组操作包括至少一个与输入或输出队列有关的操作,所述方法包括:
A)所述计算节点通过如下动作执行所述无状态本地计算的动作:
A1)为所述无状态本地计算创建事务的动作;
A2)逻辑上执行该组操作中的一个或多个操作的动作;
A3)可靠地检测在完成该组操作中的所述一个或多个操作之后的指定操作前所述无状态本地计算的失败的动作;
A4)在所述指定操作处可靠地重启所述无状态本地计算的动作;
A5)逻辑上执行所述指定操作和所述指定操作之后的任何剩余操作,直到该组操作中的所述多个操作被执行的动作;以及
A6)依照事务提交操作和事务中止操作之一终止所述事务的动作;
B)响应于终止所述事务,所述计算节点依照所述事务提交操作或所述事务中止操作而应用改变的动作,包括:
B1)当所述事务提交操作终止所述事务时,应用物理改变以实现该组操作中的所述多个操作中的每个操作的逻辑应用的动作,包括:
B1.1)更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作;以及
B2)当所述事务中止操作终止所述事务时,逻辑上翻转所述至少一个与输入或输出队列有关的操作的动作。
9.如权利要求8所述的方法,其特征在于,所述计算节点执行所述无状态本地计算的动作包括所述计算节点执行表示分布式计算的一部分的无状态本地计算的动作。
10.如权利要求8所述的方法,其特征在于,可靠地检测完成该组操作中的所述一个或多个操作之后的指定操作之前所述无状态本地计算的失败的动作包括完美故障检测器检测所述无状态本地计算的失败的动作。
11.如权利要求8所述的方法,其特征在于,更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作包括:
使第一消息从源队列出队的动作;
使第二消息入队到宿队列中的动作;
从下游计算节点接收对所述第二消息的确认的动作;以及
响应于从所述下游计算节点接收到对所述第二消息的所述确认而发送所述第一消息的确认至上游计算节点的动作。
12.如权利要求8所述的方法,其特征在于,更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作的动作包括依照基于所述计算节点间的负载状态而放松或收紧主要计算节点和被配置成执行不同的无状态本地计算的计算节点之间的数据流的策略来更改至少一个队列的状态。
13.如权利要求12所述的方法,其特征在于,依照基于计算节点间的负载状态而放松或收紧数据流的策略来更改至少一个队列的状态包括基于如下各项来更改至少一个队列的状态的动作:网络利用率和所述计算节点间的可用网络带宽中的一项或更多项。
14.如权利要求12所述的方法,其特征在于,依照基于计算节点间的负载状态而放松或收紧数据流的策略来更改至少一个队列的状态的动作包括依照基于所述主要计算节点处的负载状态而放松或收紧所述主要计算节点和被配置成执行不同的无状态本地计算的计算节点之间的数据流的策略来更改至少一个队列的状态的动作。
15.一种在基于基本构造的分布式计算体系结构内的副本集合处执行有状态本地计算的方法,所述副本集合包括主要计算节点和一个或多个次要计算节点,所述主要计算节点和所述一个或多个次要计算节点具有相同的当前计算状态,所述主要计算节点和所述一个或多个次要计算节点中的每一个被配置成具有用于执行所述有状态本地计算的相同的可执行的一组操作,该组操作包括至少一个与输入或输出队列有关的操作和至少一个修改所述计算状态的操作,所述方法由主要计算节点执行,所述方法包括:
A)通过如下动作执行所述有状态本地计算:
A1)为所述有状态本地计算创建事务;
A2)逻辑上执行该组操作中的一个或多个附加操作,包括:
A2.1)处理所述当前计算状态,处理所述当前计算状态包括以下动作中的一个或多个:逻辑上产生附加计算状态和逻辑上修改所述当前计算状态;
A2.2)逻辑上执行所述至少一个与输入或输出队列有关的操作;以及
A3)依照事务提交操作终止所述事务;
B)在每个操作的基础上将所述主要计算节点对该组操作中的每个操作的执行复制至系统存储器中以复制至所述一个或多个次要计算节点,包括:
B1)对为所述有状态本地计算创建事务进行复制;
B2)对逻辑上执行该组操作中的所述一个或多个附加操作进行复制,以及
B3)对提交所述事务进行复制,其中对提交所述事务的复制以信号通知所述一个或多个次要计算节点依照所述事务提交操作应用改变;
C)响应于提交所述事务,应用物理改变以实现该组操作中的每个操作的逻辑应用,包括:
C1)将所述当前计算状态与任何附加计算状态和任何经修改的当前计算状态协调成为新的提交的计算状态;以及
C2)更改至少一个队列的状态以物理实现所述至少一个与输入或输出队列有关的操作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/892,345 | 2010-09-28 | ||
US12/892,345 US8516032B2 (en) | 2010-09-28 | 2010-09-28 | Performing computations in a distributed infrastructure |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102404383A CN102404383A (zh) | 2012-04-04 |
CN102404383B true CN102404383B (zh) | 2014-12-17 |
Family
ID=45871863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110306685.9A Active CN102404383B (zh) | 2010-09-28 | 2011-09-27 | 在分布式基础设施中执行本地计算的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8516032B2 (zh) |
EP (1) | EP2622498B1 (zh) |
CN (1) | CN102404383B (zh) |
WO (1) | WO2012047446A2 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8724645B2 (en) | 2010-09-28 | 2014-05-13 | Microsoft Corporation | Performing computations in a distributed infrastructure |
US8516032B2 (en) * | 2010-09-28 | 2013-08-20 | Microsoft Corporation | Performing computations in a distributed infrastructure |
US20130144967A1 (en) * | 2011-12-05 | 2013-06-06 | International Business Machines Corporation | Scalable Queuing System |
US8595262B1 (en) * | 2012-03-29 | 2013-11-26 | Amazon Technologies, Inc. | Resource resolution in computing environments using directed graphs |
US9313087B2 (en) * | 2013-01-29 | 2016-04-12 | Stg Interactive, S.A. | Distributed computing architecture |
US9009215B2 (en) * | 2013-03-15 | 2015-04-14 | Wandisco, Inc. | Methods, devices and systems for dynamically managing memberships in replicated state machines within a distributed computing environment |
US9880918B2 (en) * | 2014-06-16 | 2018-01-30 | Amazon Technologies, Inc. | Mobile and remote runtime integration |
CN104077181B (zh) * | 2014-06-26 | 2017-08-29 | 国电南瑞科技股份有限公司 | 一种适用于分布式任务管理系统的状态一致性维护方法 |
CN105183544B (zh) * | 2015-09-17 | 2018-08-31 | 中国科学院计算技术研究所 | 一种非阻塞式容错的分布式事务提交方法及系统 |
KR102446733B1 (ko) * | 2017-11-30 | 2022-09-23 | 삼성전자주식회사 | 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1577314A (zh) * | 2003-07-24 | 2005-02-09 | 国际商业机器公司 | 在群集化计算机系统中的节点之间传输数据的方法和设备 |
CN1659539A (zh) * | 2002-04-19 | 2005-08-24 | 因卡网络工程公司 | 一种具有虚拟服务模块的网络系统 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7769844B2 (en) * | 2000-12-07 | 2010-08-03 | International Business Machines Corporation | Peer protocol status query in clustered computer system |
US7069298B2 (en) | 2000-12-29 | 2006-06-27 | Webex Communications, Inc. | Fault-tolerant distributed system for collaborative computing |
WO2003038614A2 (en) | 2001-10-30 | 2003-05-08 | Koninklijke Philips Electronics N.V. | Method and system for guaranteeing sequential consistency in distributed computations |
US20040030731A1 (en) | 2002-04-03 | 2004-02-12 | Liviu Iftode | System and method for accessing files in a network |
US7152157B2 (en) | 2003-03-05 | 2006-12-19 | Sun Microsystems, Inc. | System and method for dynamic resource configuration using a dependency graph |
US7747717B2 (en) | 2003-08-14 | 2010-06-29 | Oracle International Corporation | Fast application notification in a clustered computing system |
WO2005086001A1 (en) | 2004-02-27 | 2005-09-15 | Incipient, Inc. | Distributed asynchronous ordered replication |
JP2006039424A (ja) | 2004-07-29 | 2006-02-09 | Ricoh Co Ltd | 画像形成装置及びこれに用いるトナー並びに該トナーを収納したトナー容器 |
US7865684B2 (en) * | 2005-06-27 | 2011-01-04 | Ab Initio Technology Llc | Managing message queues |
US8281184B1 (en) | 2010-08-06 | 2012-10-02 | Open Invention Network Llc | System and method for reliable non-blocking messaging for multi-process application replication |
US20070180451A1 (en) | 2005-12-30 | 2007-08-02 | Ryan Michael J | System and method for meta-scheduling |
US7783763B2 (en) * | 2006-06-06 | 2010-08-24 | International Business Machines Corporation | Managing stateful data in a partitioned application server environment |
US20080133692A1 (en) | 2006-10-05 | 2008-06-05 | Holt John M | Multiple computer system with redundancy architecture |
US20080235369A1 (en) | 2007-03-21 | 2008-09-25 | Wouhaybi Rita H | Distributing replication assignments among nodes |
US7937618B2 (en) * | 2007-04-26 | 2011-05-03 | International Business Machines Corporation | Distributed, fault-tolerant and highly available computing system |
US7987385B2 (en) | 2007-07-24 | 2011-07-26 | Ge Aviation Systems Llc | Method for high integrity and high availability computer processing |
US8332457B2 (en) * | 2007-10-25 | 2012-12-11 | University Of Southern California | Tile architectural style for privacy-preserved distributed computing |
US8650155B2 (en) * | 2008-02-26 | 2014-02-11 | Oracle International Corporation | Apparatus and method for log based replication of distributed transactions using globally acknowledged commits |
US9317255B2 (en) | 2008-03-28 | 2016-04-19 | Microsoft Technology Licensing, LCC | Automatic code transformation with state transformer monads |
US9612890B2 (en) | 2008-04-04 | 2017-04-04 | International Business Machines Corporation | Method and apparatus for workflow based high availability analysis |
US7934118B2 (en) | 2008-10-24 | 2011-04-26 | Microsoft Corporation | Failure notification in rendezvous federation |
US8516032B2 (en) * | 2010-09-28 | 2013-08-20 | Microsoft Corporation | Performing computations in a distributed infrastructure |
-
2010
- 2010-09-28 US US12/892,345 patent/US8516032B2/en active Active
-
2011
- 2011-09-09 WO PCT/US2011/051019 patent/WO2012047446A2/en active Application Filing
- 2011-09-09 EP EP11831154.7A patent/EP2622498B1/en active Active
- 2011-09-27 CN CN201110306685.9A patent/CN102404383B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1659539A (zh) * | 2002-04-19 | 2005-08-24 | 因卡网络工程公司 | 一种具有虚拟服务模块的网络系统 |
CN1577314A (zh) * | 2003-07-24 | 2005-02-09 | 国际商业机器公司 | 在群集化计算机系统中的节点之间传输数据的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
EP2622498B1 (en) | 2020-07-22 |
CN102404383A (zh) | 2012-04-04 |
EP2622498A2 (en) | 2013-08-07 |
WO2012047446A2 (en) | 2012-04-12 |
WO2012047446A3 (en) | 2012-05-31 |
US20120079234A1 (en) | 2012-03-29 |
US8516032B2 (en) | 2013-08-20 |
EP2622498A4 (en) | 2014-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102404383B (zh) | 在分布式基础设施中执行本地计算的方法 | |
US8724645B2 (en) | Performing computations in a distributed infrastructure | |
JP5551749B2 (ja) | フェイルオーバシステムおよび方法 | |
JP5624655B2 (ja) | 分散型サーバーシステムにおいてバックアップマネージャを転送するメッセージ | |
CN103795754B (zh) | 多系统间的数据同步方法和系统 | |
US7886180B2 (en) | Recovery in a distributed stateful publish-subscribe system | |
CN111316241B (zh) | 使用复制的任务结果管理计算集群 | |
US20180218294A1 (en) | Highly ordered transaction processing | |
JP2012018449A (ja) | スナップショット取得処理プログラム、スナップショット取得処理方法、スナップショット・パティシパント・コンピュータ、スナップショット・コーディネータ・コンピュータ | |
CN106033562A (zh) | 事务处理方法、事务参与节点及事务协调节点 | |
CN105393519A (zh) | 故障切换系统及方法 | |
EP2715526B1 (en) | Episodic coordination model for distributed applications | |
WO2010043642A1 (en) | A method of handling a message | |
US20060230109A1 (en) | Mediator-based recovery mechanism for multi-agent system | |
JP2005301436A (ja) | クラスタシステムおよびクラスタシステムにおける障害回復方法 | |
Hu et al. | Transactional mobility in distributed content-based publish/subscribe systems | |
US7792897B2 (en) | Distributed transaction processing system | |
Tosic et al. | Reliable multi-agent systems with persistent publish/subscribe messaging | |
WO2020059532A1 (ja) | ネットワークサービスシステム、イベントログ記録装置、イベントログ管理方法、及びプログラム | |
Reis et al. | Transparently increasing RMI fault tolerance | |
Engelmann et al. | On programming models for service-level high availability | |
Kokkalis | A modular framework to implement fault-tolerant distributed services | |
Chen et al. | Recording process documentation in the presence of failures | |
CLARO et al. | INTERNAL TECHNICAL REPORT-RTI002/07 | |
Singh et al. | Platform independent non blocking mechanism for prevention of blocking attacks in mobile agents based e-service applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150422 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150422 Address after: Washington State Patentee after: Micro soft technique license Co., Ltd Address before: Washington State Patentee before: Microsoft Corp. |