在简单拓扑的分布式系统中提供快速标头选择的系统和方法

文档序号:7975514阅读:203来源:国知局
专利名称:在简单拓扑的分布式系统中提供快速标头选择的系统和方法
技术领域
本发明总体涉及分布计算的系统和方法。更具体而言,本发明针对其上存储有计算机可执行指令的计算机可读介质,该计算机可执行指令用于执行从在单个计算机系统内或在计算机系统的网络内的多个过程中的多个节点选择标头(leader)节点,以解决简单拓扑中的标头选择问题,该简单拓扑也被称为“全连接网络”。
背景技术
在分布式系统中,标头选择问题源于一致性问题。一致性是在一群参与者之间商定一个结果的过程。因为参与者(或他们的通信介质)可能经历故障,所以标头选择问题难以解决。随着节点的数量(η)的增长,网络背景通信(chatter)按照η2增加。所以,如果节点数量增长10个,则背景通信增长100个。因此,所需要的是最小化网络背景通信的针对标头选择问题的解决方案。现有技术中已知的某些解决方案涉及所有节点的时钟的同步以使得所有时钟反映同步的绝对时间。这个和其他解决方案涉及选择标头的若干过程、子过程和回合 (round),这是麻烦且低效的。先前的解决方案显示出“坏”选择冲突的高概率,所述冲突是两个或更多个选择在时间上彼此非常接近地开始以致于不能达到法定数量(quorum)以便完成选择。而且,先前的解决方案也不保证只有单个标头被选择。因此所需要的是一种最小化坏选择冲突并保证单个标头被选择的系统。因此,所需要的是用于保证在简单拓扑中选择单个标头同时最小化网络背景通信以使得当故障发生时基本无缝地恢复的快速、高效且简单的系统和方法。

发明内容
本发明提供在简单拓扑的分布式系统中选择新标头节点的快速、高效且简单的系统和方法。提供一种计算机实现的、在检测到现有标头的故障后将节点配置为标头的方法。 一种示范性计算机实现的方法使得简单拓扑的分布式系统成为容错的。本文还提供一种计算机可读介质,其上存储有用于执行所述方法的计算机可执行指令。所述方法包括若干步骤,这些步骤包括开始第一回合和第二回合。第一回合包括步骤从一个节点(下文被称为“选择发起者”)向网络上所有其他节点发送第一开始选择请求,该选择发起者节点在预定的响应周期内从网络上所有其他活动(live)节点接收第一开始选择请求的结果,并且该选择发起者节点确定网络上所有其他法定数量的节点是否对第一开始选择请求作出响应。在不同的时间处接收到或者根本未接收到响应。若干第一回合可以同时进行,但是每个选择都从单个节点开始并且只有一个第一回合(如果有的话)将进行到第二回合。如果选择发起者节点确定存在法定数量,则该选择发起者节点变成开始第二回合的获批准选择发起者节点。要清楚的是,术语“选择发起者节点”的使用仅仅是示范性的,因为在示范性方法的情况下若干节点可以在相同或大约相同的时间处开始第一回合,其仍然保证只有一个标头将被选择。每个选择发起者节点是已经检测到标头故障的节
点ο第二回合包括若干步骤,包括由网络上法定数量的所有节点批准选择发起者节点作为获批准选择发起者节点;由获批准选择发起者节点选择标头;以及由获批准选择发起者节点将设置标头(Set Leader)请求发送到网络上的所有其他节点。包括第一和第二回合的所述计算机实现的方法发生在每当任何节点检测到标头故障时。检查标头 (CheckLeader)请求由活动节点周期性地发布以监测标头故障。而且,在示范性实施例中,所述方法包括步骤选择优选节点作为标头,其中该优选节点选自获批准选择发起者节点、运行最新版本的应用的节点、具有最多剩余正常工作时间的节点、具有作为标头的先前经历的节点和节点的任何等价的和补充的优选处理。如果法定数量不存在,则所述计算机实现的方法生成从选择发起者节点到网络上所有其他节点的中止选择(AbortElection)请求。在示范性实施例中,第一回合进一步包括步骤在从选择发起者节点输送第一开始选择(StartElection)请求之前,不持有(hold)有效选择令牌(token)的多个节点接受第一有效开始选择令牌。而且,作为第一回合的一部分,当在网络上不存在法定数量的所有节点时,选择发起者节点向网络上所有活动节点输送中止选择请求。当中止选择请求被持有匹配的开始选择令牌的活动节点接收时,它们清除开始选择令牌。若干不同的节点(每个节点检测分布式系统中标头的不存在)开始第一回合;然而,只有一个节点会获取法定数量,或将没有节点获取法定数量。只有获取法定数量的节点进行到第二回合,在第二回合中该节点指定标头并告知其余节点标头已被设置。


在下面结合附图的详细说明中描述本发明的各种示范性实施例,这些实施例将随着描述的进行而变得更加清楚明白,在附图中
图1图示了用于全连接网络的分布式系统的标头选择的示范性方法的流程图。图2图示了可以用于实现一个或多个实施例的示范性计算设备。
具体实施例方式图1图示了用于在计算机系统的网络内或单个计算机系统中多个过程内操作节点以允许在全连接网络的分布式系统中的快速标头选择的系统和方法的示范性实施例的流程图。基本上每个节点在步骤100处在某个时间点处被初始化。在状态100中所示的示范性选择发起者节点的初始化之后,选择发起者节点不知道如状态110中所示的网络的标头关系的状态,其中节点的局部状态为标头=空(Mill),选择=空,其意味着它不知道当前标头,也不知道正在进行的选择。所有节点在状态110中开始或在一些状态转换之后到达该状态。例如,在示范性实施例中,作为选择过程的失败的第一回合的结果(本文下面进一步讨论),选择发起者节点将到达状态110中所示的局部状态“标头=空,选择=空”。从状态110,所述方法继续到步骤115。在步骤115期间,如果已经从另一个节点接收到开始选择请求,则选择发起者节点从状态110转换成状态190。如果未接收到开始选择请求,则选择发起者节点发送发现标头(FindLeader)消息并继续到步骤130。由于只有活动节点知道新选择的标头的身份,而没有现场过程(process in place),所以在故障节点恢复的情况下,故障节点可以记住以前标头的身份并且所述系统将利用两个或更多个标头操作。然而,图1中所示的方法防止恢复的节点假定标头是其所跟随(follow)的最后一个标头。在故障节点(甚至为最近的先前标头的故障节点)恢复成为活动节点(当在步骤100中它再次加入分布式网络中时)的情况下,不能假设标头是当它上次活动时跟随的最后一个标头,因为它被配置成不保留最近一个标头的存储。取而代之, 步骤100中所示的示范性的最近恢复的选择发起者节点进入如状态110中所示的状态“标头=空,选择=空”。如果它没有从如步骤115中所确定的辅助节点接收到开始选择请求, 则它向所有节点广播如步骤130中所示的本质上问“标头是谁?,,的消息。如果存在标头,则标头用本质上说“我是标头,且这是我的唯一识别码”的消息对咨询节点作出响应。一旦知道标头,则选择发起者节点从步骤130进行到状态220,其中标头是已知的且不需要选择(选择=空)。如果选择发起者节点没有从标头接收到这样的答案, 则所述方法继续以在下文描述的状态140处开始回合一。为了最小化等待时间和网络通信量,示范性实施例包括在标头不能在“检查标头” 间隔期间在系统中被检测到之后的两个压缩的选择回合。对这两个回合的所述算法函数的优化提供了针对标头选择问题的简单解决方案,如下文详细描述。回合一由检测到不存在网络的标头的一个或多个节点开始。回合一
选择的回合一的目标是批准选择发起者节点作为“获批准选择发起者节点”以实施选择的回合二,其中选择网络标头。为了发起回合一,当节点在步骤130中检测到标头故障时,选择发起者节点进入状态140,“标头=空,开始选择”。系统中已经检测到标头故障并且不具有有效的局部选择令牌的任何节点将进入状态140。在示范性实施例中,多个节点可以进入状态140并且基本同时发起回合一。然而,为了解释回合一的步骤,这里跟随指定“选择发起者节点”的单个节点的路径。选择发起者通过向状态140与状态150之间的所有已知节点发送“开始选择”请求来开始选择。一旦选择发起者节点已经向所有已知节点发送“开始选择”请求,如果选择发起者节点尚未接收到作为某个其他节点由于在步骤130中的确定的结果的标头已被选择的指示,则该节点进入状态150,“标头=空,选择=自己开始”,其指示选择发起者节点发起回合一。如上述讨论,在示范性实施例中,多个节点开始回合一,但至多一个节点将完成成功的回合一以进入回合二。每个节点如果尚未持有有效的(例如,未期满的)选择令牌并且拒绝随后的开始选择请求,则接受它接收的第一“开始选择”请求。每个开始选择请求具有使得对接收它的节点而言已知的期满时间。超过它们的期满日期的开始选择请求不被持有,使得持有期满的开始选择请求的节点能够自由接受新的开始选择请求。直到它的前一个开始选择请求期满为止,节点才接受新的开始选择请求。每个节点维持它自己的相对于它接收到最后一个开始选择请求的时间。该算法有益地使用了相对时间(即,针对每个节点的局部时间跨度),使得不同节点上的绝对时间值不必同步。一旦所有开始选择消息被发送,则选择发起者从状态140转换成状态150。在状态150处,选择发起者节点等待,直到所有响应
5被接收或超时(其中最先到来的一个)为止。如在步骤160处所示,回合一存在两个可能的结果,在回合一期间所公开的算法实质上问问题“我被法定数量批准了吗?”。两个可能的结果依次被描述。法定数量被定义为全连接网络中所有已知节点中超过一半的节点。法定数量需求保证了至多一个节点将被批准为获批准选择发起者节点。包括发出开始选择请求的选择发起者的所有节点知道分布式系统中节点的总数。如果节点的数量改变,则新数量被传播到所有节点。如果在步骤160 (回合一中的最后一个步骤)之后,包括故障节点的法定数量的所有节点已经接受开始选择请求,则所述过程继续到在状态170处的回合二。可替代地,如果在步骤160之后,法定数量的所有节点未接受开始选择请求,则所述方法进行到状态180, “标头=空,选择=空”。此时,回合一在选择发起者处被局部中止并且“中止选择”消息被发送到所有其他节点。选择发起者节点和接收中止选择消息的所有其他节点重新进入如前所述的状态110 (“标头=空,选择=空”)。在返回到步骤110时,选择发起者节点回到不认识已知的标头或进行中的任意选择的状态。回合一由一个或多个节点大约同时或顺序地发起,直到回合一的单个实例成功地识别获批准选择发起者节点(即步骤160确定已经到达法定数量)。如上所述,回合一不由已经接收到开始选择请求的、在状态110中的节点开始。这解释了为什么在选择已被另一个节点开始的情况下所述方法从状态110进行到进入状态190,其中不存在标头且所述选择已由另一个节点开始。从状态190,所述方法进行到步骤192。在步骤192处,所述节点实质上问“我已经接收到选择期满消息了吗? ”和“我已经接收到中止选择消息了吗? ”。 如果这些问题之一的答案为是,则节点进入状态110。发送消息的节点的唯一识别码被包括在被发送的消息中,使得接收者知道是哪个节点发送该消息。所有活动节点对于请求作出响应,并且所述请求节点知道系统中有多少个其他节点。因此,请求节点通过确定法定数量的节点是否已经接受开始选择请求而确实知道它是否已经被批准为获批准选择发起者节点。通过设计,如果系统中的活动节点的数量小于法定数量,或者如果系统被划分(partition)以使得没有分区包含法定数量的活动节点,则选择将失败。在所有中止选择消息(如果有的话)在步骤192期间被接收之后,节点从状态190 转换到状态110。中止选择消息被发出,以使得所有其他节点能够清除它们当前持有的选择令牌并且此后能够接受新的开始选择请求。回合二
返回步骤160,当选择发起者经法定数量批准时,发起第二回合。已经被法定数量批准为获批准选择发起者节点的节点从已经对开始选择请求作出响应的任何节点中选择标头。 在一些实施例中,所述获批准选择发起者节点选择它自己作为标头,如状态170所示。在选择标头之后,包括唯一识别码的标头数据被输送到所有节点。尽管状态170示出,所述标头=自己意味着获批准选择发起者节点是标头,但这仅是示范性的。获批准选择发起者节点可以选择自己作为标头,但是不要求这样做。而且,获批准选择发起者节点不限于从接受开始选择请求的那些节点中选择标头。在示范性实施例中,获批准选择发起者节点从由自己和对开始选择请求作出响应的节点构成的节点群集中选择标头。一种简单的方法是获批准选择发起者节点指定自己作为标头,该方法也最小化了网络背景通信。然而,在所选的实施例中,所述系统在除获批准选择发起者节点之外的另一个节点被选择为标头的情况下被优化。当然,用于通过批准选择发起者节点选择标头的算法可以根据优化目标而改变并且可以在没有不适当的实验的情况下由本领域普通技术人员确定。例如,在新版本应用的分段延伸(staged rollout)期间,可能有益的是,与运行先前版本的节点相比,优先选择运行稍后版本的节点。在其他情况下,可能有益的是, 优先选择具有最多剩余正常工作时间的节点,这使得为这些计算机系统选择了更稳定的标头。在其他示范性实施例中,用于标头关系的优选节点是已经具有作为标头的先前经历的节点。本领域普通技术人员认识到,存在在所述算法中可以捕获的许多等价的和补充的优选选择。获批准选择发起者节点通过发送包括所选标头的唯一身份的“设置标头”请求到所有已知节点来通知所有节点其对新标头的选择。因此,在所述设置标头请求已被发送到所有节点之后,所有活动节点知道新选择的标头的身份。回合二在状态220处结束。处于状态220中的节点知道标头的身份并且认识到选择结束。从状态220,节点继续操作与本文所描述的快速标头选择系统和方法不相关的附加过程和应用,并且可选地进入步骤205所示和下文所描述的检查标头过程。最后,在状态220处节点变得不起作用,如状态230中所示。从状态230,所述节点可以在步骤100处再次开始。通信信道的类型(http、tcp、udp)是不重要的。因为本文所提供的系统和方法被设计成通过不可靠信道工作,所以信道的质量不是操作所公开的系统和方法所必需的。如步骤205所示,检查标头没有包括在选择过程中(回合一和回合二),因为标头选择发生在标头故障被检测到之后。而且,检查标头是可选的过程,其中通过要求最后已知的标头作出响应来检测标头故障。如果最后已知的标头对步骤205中提出的问题作出响应, 则所述节点停留在状态220处,其中标头是已知的且无需选择。如果最后已知的标头不对检查标头请求作出响应,则该节点进入先前描述的状态110。坏选择冲突的概率(其为当两个或多个选择在时间上彼此非常接近地开始以致于它们均不可能获取法定数量时)通过随机化所示的检查标头间隔来最小化。所述检查标头间隔是检查标头尝试检测故障之间的时间段。一般地,没有选择标头的概率(Pf)与回合行程时间(这里称为“RTT”)除以检查标头间隔(这里称为“CLI”)成比例。在示范性实施例中,开始选择的RTT为大约一毫秒,且 CLI为大约100毫秒。因此,在这些示范性实施例中,一次尝试没有选择标头的概率为大约百分之一(1. 00%),并且二次尝试中没有选择标头的概率为大约万分之一(0. 01%)且随着尝试次数的增加而成指数形式减少。所设想的简单算法和通过如应用到简单拓扑的简化代码的实现方式是针对传统方法的改进的解决方案。具有针对用于两回合中的简单拓扑的标头选择问题的解决方案的简单性是对已知标头选择解决方案的巨大改进,因为本文所描述的方法提供当针对简单拓扑实现时明显更快的可靠选择。图2示出具有可以用于实现上文所述的一个或多个实施例的组件的示范性计算机系统22。示范性实施例中的快速标头选择系统和方法的示范性选择发起者节点被具体化为计算机系统22,而在其他示范性实施例中,示范性选择发起者节点为下文所述的计算机系统22的若干组件之一。计算机系统22包括一个或多个处理单元对、主存储器沈和将包括主存储器沈的各种系统组件耦合到处理器M的总线观。该总线观表示若干类型的总线结构中的任意一种的一个或多个,其包括存储器总线和存储器控制器、外围总线、加速图形端口和使用多种总线结构中任意一种的处理器或局部总线。主存储器沈可以是随机存取存储器(RAM)或耦合到总线观以用于存储将由处理器M执行的信息和指令的另一个动态存储设备。主存储器26还可以用于在由处理器M执行指令期间存储临时变量或其他中间信息。计算机22还包括只读存储器(ROM) 30。计算机22进一步包括一个或多个存储设备32。存储设备32可以包括用于从硬盘读取并向其写入的硬盘驱动器、用于从可移动磁盘读取并向其写入的磁盘驱动器以及用于向可移动光盘(比如CD或其他光学介质)读取或向其写入的光盘驱动器。所述存储设备,无论是硬盘驱动器、磁盘驱动器、光盘驱动器或是其组合,都通过适当的接口连接到总线28。所述驱动器及其相关联的计算机可读介质提供对计算机可读指令、数据结构、程序模块或用于计算机22的其他数据的非易失性存储。尽管本文所描述的示范性实施例参考硬盘、可移动磁盘和可移动光盘,但是本领域技术人员应当意识到可以存储可由计算机访问的数据的其他类型的计算机可读介质(比如盒式磁带、闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等)也可以用在所述示范性操作环境中。多个程序模块可以存储在存储设备32、RAM和ROM上,这些程序模块包括操作系统、一个或多个应用程序、其他程序模块以及程序数据。用户可以通过输入设备34(比如键盘和指向设备)将命令和信息输入到计算机22中。其他输入设备34可以包括麦克风、操纵杆、游戏板、卫星天线、扫描仪等等。这些和其他输入设备34通过耦合到总线观的接口连接到处理器对。监视器或其他类型的显示设备36还经由接口连接到总线观。除了监视器之外,个人计算机典型地包括其他外围输出设备,比如扬声器和打印机。计算机22还包括耦合到总线观的通信接口 38。通信接口 38提供耦合到连接到本地网40的网络链路的双向数据通信。通信接口 38可以是集成的服务数字网络(ISDN) 卡、或者用于提供到对应类型的电话线的数据通信连接的调制解调器、或者用于提供到兼容的LAN的数据通信连接的局域网(LAN)卡。无线链路还可以根据所设想的特定应用来使用。在任何这样的实现方式中,通信接口 38发送并接收携带表示各种类型信息的数字数据流的电、电磁或光信号。计算机22 —般地使用到一个或多个远程计算机(比如主机42或远程计算机44) 的本地连接在联网环境中操作。远程计算机38可以是另一台个人计算机、服务器、路由器、 网络PC、对等设备或其他公共网络节点,并且典型地包括上文相对于计算机22描述的许多或所有元件。在图2所示的实施例中,网络链路提供通过本地网40到主机42或经由互联网46到远程计算机44的连接。一般地,计算机22的数据处理器借助在不同时间存储在计算机的各种计算机可读存储介质中的指令来编程。在执行时,程序被至少部分地从存储这些程序的计算机的次存储器加载到计算机的主电子存储器中。本文所描述的本发明包括这些和其他各种类型的计算机可读存储介质,其中这样的介质包含用于结合微处理器或其他数据处理器实现所述步骤的指令或程序。尽管已经结合上文略述的特定实施例描述了本发明,但是显然许多替代、修改和变型对本领域技术人员而言将是清楚明白的。因此,如上文所阐述的本发明的优选实施例旨在说明性的而非限制性的。在不脱离本发明的精神和范围的情况下,可以进行各种变化。
权利要求
1. 一种计算机实现的方法,用于在选择发起者节点在连接至少一个计算机系统上的多个节点的节点网络上检测到现有标头的故障(110)之后将节点配置(100)为新标头,该方法包括以下步骤a.开始第一回合,所述第一回合包括以下步骤i.从选择发起者节点向网络上所有其他节点发送至少一个开始选择请求(115); .从网络上所有活动节点接收所述至少一个开始选择请求的结果(130),该接收步骤由选择发起者节点来实施;iii.确定法定数量的所述选择发起者节点和网络上所述所有其他节点是否接受所述至少一个开始选择请求(160),该确定步骤由选择发起者节点来实施;b.在检测到法定数量时开始第二回合(170),所述第二回合包括以下步骤1.批准选择发起者节点作为获批准选择发起者(140); .选择新标头,该选择步骤由获批准选择发起者来实施(150);以及 iii.发送设置标头请求到网络上的所述所有其他节点(220)。
2.权利要求1的方法,进一步包括步骤 a.选择优选的节点作为新标头。
3.权利要求2的方法,其中该优选节点选自包括以下的群集选择发起者节点、运行最新版本的应用的节点、具有最多剩余正常工作时间的节点、先前标头和节点任何等价的和补充的优选处理。
4.权利要求1的方法,进一步包括步骤a.在不存在法定数量时将中止选择请求输送到网络上所有其他节点。
5.权利要求1的方法,进一步包括周期性重复所述方法。
6.权利要求1的方法,进一步包括步骤 a.其中第一回合进一步包括步骤i.接受第一有效开始选择令牌,所述接受步骤由不持有有效选择令牌的多个节点在从选择发起者节点输送第一开始选择请求之前来实施; .如果法定数量不存在,则将中止选择请求输送到网络上所有其他节点,所述输送步骤由选择发起者节点来实施。
7.权利要求6的方法,进一步包括在法定数量存在的情况下开始第二回合的步骤,所述第二回合包括以下步骤a.将选择发起者节点批准为获批准选择发起者;b.选择标头,该选择步骤由获批准选择发起者来实施;c.将设置标头请求发送到网络上所有其他节点。
8.权利要求6的方法,其中每个所述有效的开始选择令牌具有期满日期。
9.权利要求8的方法,其中开始选择令牌在确定法定数量是否存在的步骤完成之前期满并且第一回合由可替代节点发起。
10.一种计算机可读介质,其上存储有用于执行权利要求1到9中的任一项的方法的计算机可执行指令。
全文摘要
在连接至少一个计算机系统上的多个节点的简单拓扑的分布式系统中选择新标头节点的系统和计算机实现的方法。该计算机实现方法包括若干步骤,包括至少一个检测到标头不存在的节点,开始第一回合以用于批准其为获批准选择发起者。如果在第一回合期间法定数量接受开始选择请求,则选择发起者开始第二回合以设置标头。如果在第一回合期间所有节点的法定数量尚未达到,则第一回合失败。该方法重复进行,直到标头被设置并且每当节点发现网络没有活动标头时被重复。本文还提供一种计算机可读介质,其上存储有计算机可执行指令以用于执行所述计算机实现的方法。
文档编号H04L29/08GK102523243SQ20111036289
公开日2012年6月27日 申请日期2011年11月15日 优先权日2010年11月15日
发明者K.苏尔科夫 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1