平码五不中公式规律
  • / 21
  • 下载费用:30 金币  

在分布式集群中的可扩展故障恢复通信.pdf

关 键 ?#21097;?/dt>
分布式 集群 中的 扩展 故障 恢复 通信
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201580043261.4

申请日:

2015.08.09

公开号:

CN106663030A

公开日:

2017.05.10

当前法律状态:

实审

?#34892;?#24615;:

审中

法?#19978;?#24773;: 实质审查的生效IPC(主分类):G06F 9/48申请日:20150809|||公开
IPC分类号: G06F9/48; G06F9/50 主分类号: G06F9/48
申请人: 微软技术许可有限责任公司
发明人: A·库玛; A·德阿马托; D·A·?#20064;? G·尼沙诺维; L·S·科波鲁; N·马利瓦基
地址: 美国华盛顿州
优先权: 2014.08.13 US 14/459,072
专利代理机构: ?#26412;?#24066;金杜律师事务所 11256 代理人: 王茂华;杨立
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201580043261.4

授权公告号:

|||

法律状态公告日:

2017.06.06|||2017.05.10

法律状态类型:

实质审查的生效|||公开

摘要

各实施例涉及在节点集群中的计算节点之间进行通信。在?#24674;?#24773;况下,计算机系统从工作节点接收包括工作节点的当前工作负载标识符和健康状态的数据分组,其中数据分组包括相关联的版本号。计算机系统确定接收到的数据分组中的版本号不同于先前接收到的数据分组,并且评估工作节点的当前工作负载配置以确定是否要在工作节点上做出工作负载变更。然后,在确定要在工作节点上做出工作负载变更时,计算机系统选择工作负载变更的子集以应用于工作节点,生成对工作节点的所选择的工作负载变更的子集的指示,并向工作节点发送所生成的工作负载变更的指示。

权利要求书

1.?#24674;?#29992;于在节点集群中的计算节点之间通信的计算机实现的方法,所述计算机实现
的方法由一个或多个处理器实施,所述一个或多个处理器执行用于所述计算机实现的方法
的计算机可执行指令,并且所述计算机实现的方法包括:
从工作节点接收包括所述工作节点的当前工作负载标识符和健康状态的数据分组,所
述数据分组包括相关联的版本标识符;
确定所接收的数据分组中的所述版本标识符不同于先前接收到的数据分组;
评估所述工作节点的当前工作负载配置以确定是否要在所述工作节点上做出工作负
载变更;
在确定要在所述工作节点上做出工作负载变更时,选择工作负载变更的子集以应用于
所述工作节点;
生成?#36816;?#36848;工作节点的所选择的工作负载变更的子集的指示;以及
向所述工作节点发送所生成的工作负载变更的指示。
2.根据权利要求1所述的计算机实现的方法,其中所生成的工作负载变更的指示经由
容错通信协议被发送到所述工作节点。
3.根据权利要求2所述的计算机实现的方法,其中所述容错通信协议指定由所述计算
系统每时间段发送或接收的数据分组的数目的上限。
4.根据权利要求1所述的计算机实现的方法,进一步包括:
确定带宽限制应用于工作负载变更的所述指示;以及
在确定带宽限制应用于工作负载变更的所述指示时,将所选择的工作负载变更的子集
分成至少两个指示消息。
5.?#24674;?#29992;于在节点集群中的计算节点之间通信的计算机实现的方法,所述计算机实现
的方法由一个或多个处理器实施,所述一个或多个处理器执行用于所述计算机实现的方法
的计算机可执行指令,并且所述计算机实现的方法包括:
生成包括由工作节点负责的工作负载标识符(ID)的列表的数据分组,所述数据分组进
一步包括针对每个工作负载ID的版本标识符和工作负载健康状态;
向所述节点集群中的主节点发送所生成的数据分组;
接收差量数据分组,所述差量数据分组包括指定要被应用于所述工作节点的工作负载
中的至少一个工作负载的所选择的变更的子集的信息;以及
将在所述差量数据分组中指定的所选择的工作负载变更的子集应用于所述工作节点
上的所述至少一个工作负载。
6.根据权利要求5所述的计算机实现的方法,进一步包括:
向所述主节点发送状态查询分组以验证所述计算系统与所述主节点之间的物理链路
正在正常工作;
确定在没有从所述主节点接收到确认分组的情况下已经过去指定的时间段;以及
?#26723;?#38024;?#36816;?#36848;主节点的可靠性分数,所述可靠性分数指示所述主节点与所述计算系统
之间的所述物理链路正在正常工作的可能性。
7.根据权利要求6所述的计算机实现的方法,进一步包括:
向所述主节点发送第二状态查询分组以验证所述计算系统与所述主节点之间的所述
物理链路正在正常工作;
确定已经从所述主节点接收到确认分组;以及
将针?#36816;?#36848;主节点的所述可靠性分数提高到最大级别,指示所述主节点与所述计算系
统之间的所述物理链路正在正常工作。
8.根据权利要求6所述的计算机实现的方法,进一步包括:
确定阈值数目的主节点已经失效或变得不可用;以及
动态地减少在所述可靠性分数被?#26723;?#20043;前在没有从所述主节点接收到确认分组的情
况下被允许经过的时间量。
9.?#24674;?#35745;算机系统,包括:
一个或多个处理器;
一个或多个计算机可读存储介?#21097;?#20854;上存储有计算机可执行指令,所述计算机可执行
指令在由所述一个或多个处理器执行时使得所述计算系统实施用于在节点集群中的计算
节点之间通信的计算机实现的方法,所述计算机实现的方法包括:
从工作节点接收包括所述工作节点的当前工作负载标识符和健康状态的数据分组,所
述数据分组包括相关联的版本标识符;
确定所接收的数据分组中的所述版本标识符不同于先前接收到的数据分组;
评估所述工作节点的当前工作负载配置以确定是否要在所述工作节点上做出工作负
载变更;
在确定要在所述工作节点上做出工作负载变更时,选择工作负载变更的子集以应用于
所述工作节点;
生成?#36816;?#36848;工作节点的所选择的工作负载变更的子集的指示;以及
向所述工作节点发送所生成的工作负载变更的指示。
10.根据权利要求9所述的计算机系统,其中所生成的工作负载变更的指示经由容错通
信协议被发送到所述工作节点,并且其中所述容错通信协议指定由所述计算系统每时间段
发送或接收的数据分组的数目的上限。

说明书

在分布式集群中的可扩展故障恢复通信

背景技术

计算系统已经变得无处不在,从小型?#24230;?#24335;设备到手机和平板电脑,到PC和后端
服务器。这些计算系统中的每一个被设计为处理软件代码。软件允许用户执行功能,与由计
算系统提供的?#24067;?#20132;互。在一些情况下,这些计算系统可以链接在一起以形成计算资源的
云。这些云资源可以包括托管、处理、数据存储或其他服务。这些云资源被设计为容错的,使
得一个计算系统可以在需要时立即替换另一个计算系统。然而,这种容错系统可能生成大
量的云内网络流量,从而确保系统正常工作。

本文描述的实施例涉及在节点集群中的计算节点之间进行通信。在一个实施例
中,计算机系统(例如主节点)从工作节点(worker node,或工作者节点)接收包括工作节点
的当前工作负载标识符和健康状态的数据分组,其中数据分组包括相关联的版本号。计算
机系统确定接收到的数据分组中的版本号不同于先前发送到工作节点的最新工作负载配
置的版本,并且评估工作节点的当前工作负载配置以确定是否要在工作节点上做出工作负
载变更。然后,在确定要在工作节点上做出工作负载变更时,计算机系统选择工作负载变更
的子集以应用于工作节点,生成对工作节点的所选择的工作负载变更的子集的指示,并向
工作节点发送所生成的工作负载变更的指示。

在另一实施例中,计算机系统(例如工作节点)生成包括工作负载标识符(ID)的列
表的数据分组,该工作负载标识符由工作节点负责。数据分组还包括针对每个工作负载ID
的版本号和工作负载健康状态。计算机系统向节点集群中的主节点发送所生成的数据分
组,并且接收差量数据分组,该差量数据分组包括指定将应用于工作节点的工作负载中的
至少一个工作负载的所选择的变更的子集的信息。然后,计算机系统将所选择的工作负载
变更的子集应用于工作节点上的工作负载。

本发明内容被提供以用于以简化形式介绍概念的选择,其在以下的具体实施方式
中将做出进一步的描述。本发明内容并?#24674;?#22312;识别要求保护的主题的关键特征或者核心特
征,其也并?#24674;?#22312;被用来确定要求保护的主题的?#27573;А?br />

附加的特征和优点将在下面的描述中阐述,并且从描述中部分地对于本领域的普
通技术人员将是显而易见的,或者可以通过实践本文的教?#32423;?#20064;得。本文描述的实施例的
特征和优点可以通过在所附权利要求中特别指出的手段和组合来实现和获得。通过以下描
述和所附权利要求,本文描述的实施例的特征将变得更加显而易见。

附图说明

为了进一步阐明本文描述的实施例的上述和其他特征,将通过参考附图给出更具
体的描述。应当理解,这些附图仅仅描绘了本文所描述的实施例的示例,因此不应被认为是
对其?#27573;?#30340;限制。将通过使用附图以附加的特性和细节来描述和解释实施例,在附图中:

图1示出了计算机体系结构,其中本文描述的实施例可以包括在节点集群中的计
算节点之间进行通信。

图2示出了用于在节点集群中的计算节点之间通信的示例方法的流程图。

图3示出了用于在节点集群中的计算节点之间通信的备选示例方法的流程图。

图4示出了其中主集群中的主节点正在监视和控制工作集群中的工作节点的实施
例。

图5示出了其中主节点和工作节点使用心跳分组和差量数据分组进行通信的实施
例。

图6示出了其中工作节点确定工作节点与主节点之间的物理链路上的连通性的实
施例。

具体实施方式

本文描述的实施例涉及在节点集群中的计算节点之间进行通信。在一个实施例
中,计算机系统(例如主节点)从工作节点接收标识工作节点的当前工作负载标识符和健康
状态的数据分组,其中数据分组包括相关联的版本号。计算机系统确定接收到的数据分组
中的版本号不同于先前接收到的数据分组,并且评估工作节点的当前工作负载配置以确定
是否要在工作节点上做出工作负载变更。然后,在确定要在工作节点上做出工作负载变更
时,计算机系统选择工作负载变更的子集以应用于工作节点,生成对工作节点的所选择的
工作负载变更的子集的指示,并向工作节点发送所生成的工作负载变更的指示。

在另一个实施例中,计算机系统生成包括工作负载标识符(ID)的列表的数据分
组,该工作负载标识符由工作节点负责。数据分组还包括针对每个工作负载ID的版本号和
工作负载健康状态。计算机系统向节点集群中的主节点发送所生成的数据分组,并且接收
差量数据分组,该差量数据分组包括指定将应用于工作节点的工作负载中的至少一个工作
负载的所选择的变更的子集的信息。然后,计算机系统将在差量数据分组中指定的所选择
的工作负载变更的子集应用到工作节点上的至少一个工作负载。

以下讨论现在涉及可以执行的多种方法和方法动作。应当注意,尽管方法动作可
以以特定顺序讨论或者以流程图示出为以特定顺序发生,但是除非特别声明或需要特定顺
序,否则不必要求特定顺序,因为动作?#35272;?#20110;在执行该动作之前完成的另一动作。

本文描述的实施例可以实现各种类型的计算系统。这些计算系统现在越来越多地
采取各种各样的形式。计算系统例如可以是手持式设备、家用电器、膝上型计算机、台式计
算机、大型机、分布式计算系统、或甚至通常不被认为是计算系统的设备。在本说明书和权
利要求书中,术语“计算系统?#21271;还?#20041;地定义为包括任何以下设备或系统(或其组合):其包
括至少一个物理和?#34892;未?#29702;器,以及能够在其上具有可由处理器执行的计算机可执行指令
的物理和?#34892;未?#20648;器。计算系统可以分布在网络环境上并且可以包括多个组分计算系统。

如图1所示,计算系统101通常包括至少一个处理单元102和存储器103。存储器103
可以是物理系统存储器,其可以?#19988;资?#24615;、?#19988;资?#24615;或两者的某种组合。术语“存储器”在本
文也可以用于指?#19988;资源?#23481;量存储器,诸如物理存储介质。如果计算系统是分布式的,则
处理、存储器和/或存储能力也可以被分布。

如本文所使用的,术语“可执行模块”或“可执行组件”可以指能在计算系统上执行
的软件对象、例程或方法。本文描述的不同组件、模块、引擎和服务可以被实现为在计算系
统上执行的对象或进程(例如,作为单独的线程)。

在下面的描述中,参?#21152;?#19968;个或多个计算系统执行的动作来描述实施例。如果这
样的动作以软件实现,则执行动作的相关联的计算系统的一个或多个处理器响应于已经执
行的计算机可执行指令来指导计算系统的操作。例如,这样的计算机可执行指令可以在形
成计算机程序产品的一个或多个计算机可读介质上实现。这种操作的示例涉及数据的操
纵。计算机可执行指令(和被操纵的数据)可以存储在计算系统101的存储器103中。计算系
统101还可以包含允许计算系统101通过有线或无线网络与其他消息处理器通信的通信信
道。

本文所述的实施例可以包括或利用包括计算机?#24067;?例如,一个或多个处理器和
系统存储器)的专用或通用计算机系统,如下面更详细讨论的。系统存储器可以包括在总存
储器103内。系统存储器还可以称为“主存储器?#20445;?#24182;且包括可由至少一个处理单元102通过
存储器总线寻址的存储器?#24674;茫?#22312;这种情况下,地址?#24674;?#22312;存储器总线本身上被断言。系统
存储器在传统上?#19988;资?#24615;的,但是本文描述的原理也适用于系统存储器部分地或甚至完全
?#19988;资?#24615;的情况。

本发明的?#27573;?#20869;的实施例还包括用于携载或存储计算机可执行指令和/或数据结
构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系
统访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算
机存储介质。携带计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,
作为示例而非限制,本发明的实施例可以包括至少两种截然不同种类的计算机可读介?#21097;?br />计算机存储介质和传输介质。

计算机存储介质是存储计算机可执行指令和/或数据结构的物理?#24067;?#23384;储介质。
物理?#24067;?#23384;储介质包括计算机?#24067;?#35832;如RAM、ROM、EEPROM、固态驱动器(“SSD”)、?#38142;妗?#30456;变
存储器(“PCM”)、光盘存储器、磁盘存储器或其他磁存储设备,或可以用于以计算机可执行
指令或数据结构的形式存储程序代码的任何其他?#24067;?#23384;储设备,其可以由通用或专用计算
机系统访问和执行以实现本发明公开的功能。

传输介质可以包括网络和/或数据链路,其可以用于携带计算机可执行指令或数
据结构形式的程序代码,并且可以由通用或专用计算机系统访问。“网络?#21271;?#23450;义为使得能
够在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。
当通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)向计算机系统传送或
提供信息时,计算机系统可将该连接视为传输介质。上述的组合也应包括在计算机可读介
质的?#27573;?#20869;。

此外,在到达各种计算机系统组件时,计算机可执行指令或数据结构形式的程序
代码可以从传输介?#39318;?#21160;传输到计算机存储介质(反之亦然)。例如,通过网络或数据链路
接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如,“NIC”)内的RAM中,
然后最终传送到计算机系统RAM和/或在计算机系统处的更少?#36164;?#24615;计算机存储介质。因
此,应当理解,计算机存储介质可以被包括在也(或甚至主要地)利用传输介质的计算机系
统组件中。

计算机可执行指令例如包括指令和数据,当在一个或多个处理器上执行时,使得
通用计算机系统、专用计算机系统或专用处理设备执行特定功能或功能组。计算机可执行
指令例如可以是二进制,诸如汇编语言的中间格式指令,或甚至源代码。

本领域技术人员将理解,本文描述的原理可以在具?#34892;?#22810;类型的计算机系统配置
的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设
备、多处理器系统、基于微处理器或可编程消费电子产品、网络PC、小型计算机、大型计算
机、移动电话、PDA、平板电脑、?#26114;?#26426;、路由器、交换机?#21462;?#26412;发明还可以在分布式系统环境
中实践,其中通过网络链接(通过硬连线数据链路、无线数据链路、或通过硬连线和无线数
据链路的组合)的本地和远程计算机系统都执行任务。因此,在分布式系统环境中,计算机
系统可以包括多个组分计算机系统。在分布式系统环境中,程序模块可以位于本地和远程
存储器储存设备两者中。

本领域技术人员还将理解,本发明可以在云计算环境中实践。云计算环境可以是
分布式的,但这不是必需的。当分布式时,云计算环境可以在组织内国?#23454;?#20998;布和/或具有
跨越多个组织所拥有的组件。在本说明书和所附权利要求中,“云计算?#21271;?#23450;义为用于实现
对可配置计算资源(例如,网络、服务器、存储装置、应用和服务)的共享池的按需网络访问
的模型。“云计算”的定义不限于在正确部署时可从这样的模型获得的任何其他众多优点。

此外,本文所描述的系统架构可以包括多个独立的组件,每个独立的组件作为整
体贡献于系统的功能。这种模块化允许在接近平台可扩展性的问题时增加灵活性,并且为
此目的提供了各种优点。通过使用功能?#27573;?#26377;限的较小规模的部件,可以更容易地管理系
统复?#26377;?#21644;增长。通过使用这些松散耦合的模块来增?#31185;教?#23481;错。个别组件可以根据业务
需要而逐渐增长。模块化开发还意味着减少新功能的上市时间。可以添加或减少新功能,而
不影响核心系统。

图1示出了其中可以采用至少一个实施例的计算机架构100。计算机架构100包括
计算机系统101。计算机系统101可以是任何类型的本地或分布式计算机系统,包括云计算
系统。计算机系统101包括用于执行各种不同功能的模块。例如,通信模块104可以被配置为
与其他计算系统通信。通信模块104可以包括可从其他计算系统接收和/或发送数据的任何
有线或无线通信装置。通信模块104可以被配置为与数据库、移动计算设备(诸如移动电话
或平板电脑)、?#24230;?#24335;或其他类型的计算系统交互。

计算机系统101可以包括其他模块,包括确定模块105、评估模块106和变更选择模
块107。这些模块中的每个模块执行将在下面进一步解释的某些功能。在一些实施例中,管
理或其他用户可能期望将一组计算节点组织成联合集群(例如集群111)。用户可以提供指
示每个类型的多少节点将在聚类联合中的输入。如本文所使用的术语,“集群联合”或“联合
集群”是指多个独立集群一起协作的聚合,以提供联合?#27573;?#30340;服务,并?#19968;?#20445;持单个集群即
使在与其他集群的连接丢失和/或其他集群的失效期间?#24067;?#32493;操作的能力。每个集群由一
个或多个物理计算节点组成,其可以包括诸如服务器刀片、?#24067;?#22788;理器或处理核心、大型
机、?#24230;?#24335;或其他类型的计算系统的计算系统。因此,集群是计算系统的集合,其一起工作
以运行工作负载并根据需要而失效转移以提供容错。集群联合可以包括各种类型的集群,
包括主集群(master cluster)和工作集群(worker cluster)。

如本文所指的“主集群”是运行软件组件的集群,其负责监视工作集群并做出失效
转移决定。如本文所指的“工作集群”是运行所分配的工作负载的集群。工作集群将在工作
集群的节点内尝试本地失效转移。如果工作集群无法传输工作负载,则可以使用主集群来
托管工作负载。“主代理”是托管在主集群上的软件组件,其实现联合的控制和监视逻辑。
“工作代理”是托管在工作集群上的软件组件,其接受来自主集群的分配并向主集群提供状
态更新。“工作负载”是在集群节点上运行的软件应用或服务或代码的其他部分,其可以根
据需要而失效转移到其他集群节点。“失效转移”包括在失效情况下将工作负载从一个集群
节点快速转移到另一个集群节点的能力,或者针对性能、负载平衡或其他原因将工作负载
快速转移到更理想的集群节点的能力。

本文的实施例联?#20808;?#20309;类型的集群并且可以与基本?#20808;?#20309;集群解决方案一起使
用,其允许工作负载被托管在计算节点上并且在?#24067;?#25110;软件失效的情况下提供工作负载的
失效转移。实施例提供容错存储(例如集群数据库),其允许在主集群上运行的代理?#20013;?#29992;
于运行集群联合110的信息。在主集群上托管的主代理软件可以被拆分为每次仅在一个主
集群节点处活动的导引器组件,以及监视和控制其他节点并且在其他集群节点上活动的主
?#35745;?#32452;件。工作节点和主节点可以具有在不同时间分配给它们的不同角色,并且计算节点
本身可以?#24674;?#26032;分配为工作节点或主节点。在一些实施例中,主角色和工作者角色可以在
相同的计算系统上共存(即主节点也可以托管工作负载)。

导引器角色(或者本文中简称为“导引器”)被配置为做出决策,包括但不限于以
下:1)哪些主?#35745;?#36127;责哪些工作集群,2)哪些工作节点负责托管哪些工作负载,3)决定从工
作集群中提升一节点以退出其当前工作集群并加入主集群,或降级?#24674;?#33410;点,使其成为工
作节点并加入工作集群。这允许在主集群或工作集群上的失效计算节点从它们各自的集群
中的计算节点池?#36127;?#31435;即替换。导引器角色将其决策记录在集群数据库中(其对于主集群
可以是本地或远程的)。主?#35745;?#35282;色(或本文中的“主?#35745;鰲?监视对集群数据库的更改,并了
解它们是否需要将导引器决策传达至它们负责的工作集群。主?#35745;?#21521;工作集群发送分配,
并从工作节点接收状态更新。如果主导者没有在预定的超时间隔内(无论?#19988;?#31186;、分钟?#25925;?br />小时?#20219;?#21333;位)接收到状态更新,导引器将把缺少响应解释为失效,并将在集群数据库中记
录该失效。

在一些实施例中,导引器可以?#31169;?#24037;作者的失效并且决定如何重新分布由工作者
托管的工作负载。一旦已做出关于工作负载的重新分布的决定,导引器将在集群数据库中
记录该决定。然后,导引器可以?#31169;?#26032;的工作负载,并将其传达至它们负责的工作集群。在
主?#35745;?#22833;效的情况下,导引器可以通过由主集群递送的通知?#31169;?#23427;,该主集群报告主节点
向下或向上事件。当导引器获知主节点失效时,导引器在剩余的主集群节点之间重新分布
由该特定主集群节点监视的工作集群节点。然后,导引器将?#21496;?#31574;写入主数据库。导引器将
经由数据库通知变更?#31169;?#35813;决策,并开?#25216;?#35270;和控制新获取的工作集群。

当失效的主集群节点恢复在线状态时,它会通过在集群数据库中将其状态记录为
在线来通知导引器它可用于监视。主集群?#31169;?#21040;该情况,并将一些工作集群重新分布到新
的主集群节点,以更好地分布主集群节点上的监视和控制负载。如果失效的主集群节点在
预定时间?#25991;?#27809;有在线,并?#19968;?#21160;主集群节点的数目降到低于期望的活动主集群节点数目
的阈值以下,则导引器可以选择从工作集群中移除节点,并将其加入主集群以在主集群中
保留期望的冗余度。相反的操作也是可能的,如果被监视的工作集群的数目很小,则导引器
可以选择从主集群中移除节点并重新加入工作集群(或形成新的工作集群)。工作集群可以
是一个节点集群或多节点集群。在多节点工作集群中,将尝试在工作集群的其他节点上重
新启动失效的工作负载。一旦工作集群的恢复尝试耗尽,在工作集群上运行的工作代理可
以请求主集群帮助,将失效的工作负载传递到别处。

为了在具有数千个节点(或更多个)的分布式系统上托管工作负载,可扩展故障恢
复协议用于处理数千个托管节点与监视它们的节点之间的通信。同样重要的是,这些控制
分组所采用的网络带宽以及在托管节点和监视节点上发生的CPU处理都是低的。本文描述
的实施例提供了?#24674;?#30830;保大规模可扩展分布式集群系统中的高度可扩展故障恢复通信的
协议。托管节点以使得信息简洁的方式发送工作负载的状态。同时,监视节点不是发送关于
工作负载(如虚拟机(VM))可用的所有信息,而是仅发送确保托管节点将工作节点带到?#23454;?br />状态所需的信息。同时,本文描述的协议确保其可以容忍分组丢失,并且在一些通信路径中
出?#36136;?#25928;的情况下也在不同的网络适配器之间通信。通过在?#23454;?#30340;情况下节流消息和捎带
其他消息,可进一步实现更高的可扩展性。

在一些实施例中,容错通信协议提供由监视和托管节点每秒发送或接收的分组数
目的上限,优化在监视节点与托管节点之间交换的总信息的大小,避免发送未从监视节点
更改为托管节点或从托管节点更改为监视节点的配置或状态信息,对数据包丢失是恢复性
的,并且帮助工作节点监视主节点上的远程端点的健康状态,使得主节点可以向可达端点
发送分组。主节点和托管节点两者都可以容忍除了一个网络接口控制器(NIC)之外的所有
NIC的失效,如下面将进一步解释的。此外,协议允许在可用NIC之间的网络流量的负载平
衡,允许星状(aster)节点在可配置的时间量中检测工作节点的失效,并且允许流量的随机
化,使得工作节点不在同一时间发送导致网络流量的峰值的心跳分组。

如本文所使用的术语,“心跳分组”是指由工作节点周期性地发送到主节点以提供
关于在工作节点上运行的工作负载(例如工作节点112上的工作负载114)的信息的数据分
组(例如简洁串行化用户数据报协议(UDP)分组)。如本文中所使用的,“分配分组”是指主节
点仅在工作节点上的(多个)工作负载的配置信息自从上次收到心跳分组后发生更改时响
应于心跳分组而发送的数据分组(例如简洁串行化UDP分组)。因此,如图1所示,工作节点
112可以发送数据分组113(即心跳分组),其包括含工作负载标识符116、工作节点的当前健
康状态117、以及用于数据分组的版本标识符118的信息。分配分组可以包括要应用于工作
节点112的变更119的指示。

主节点120可以被配置为知?#28010;?#24212;该管理的所有工作节点。主节点周期性地向租
赁已过期(即,主节点120在规定的超时间隔中尚未为其接收到单个心跳分组的工作节点)
的所有工作节点(例如112)发送欢迎分组。当工作节点接收到欢迎分组时,它开始周期性地
向工作节点发送欢迎分组的主节点发?#25176;?#36339;。心跳分组113包括取决于实现的实施例的各
种类型的信息。如下面进一步解释的,在至少一个实施例中,心跳分组可以包括序列号,健
康状态和与工作负载配置相关联的配置版本标识符118。每次发生工作负载配置变更时,版
本号都会增加。

当负责工作者的主节点(或本文的“主?#35745;鰲?接收心跳分组并且验证序列号高于
接收到的最后一个序列号时,主?#35745;?#23558;工作节点112所托管的那些工作负载与其应该拥有
的那些工作负载进行比较。主节点还会检查与工作负载关联的版本是否与主集群数据库中
的最新版本匹配。在该比较之后,主导者知道要被添加到工作者、从工作者中移除、或在工
作节点上改变的工作负载的集合。主导者从添加、删除或改变的工作负载中选择一个子集,
并形成分配分组,并将其发送到工作节点。在本文中应当注意,术语“子集”是指可以从现有
集合中选择的项目集合,并且不包括具有零项目的“空子集”。确定要在子集中包括多少项
目取决于将消耗多少带宽(即,分配数据分组将有多大)。如果添加、删除或改变的数目太
大,则可以选择子集以便将分配分组保持在指定大小以下。在一些情况下,分配分组可以保
持在最大传输单元(MTU)大小以下,以避免分段。只要主导者发送关于每个分配分组中的至
少一个工作负载的信息,协议收敛且工作者最终学习它应该拥有的每个工作负载,并且移
除其不应该拥有的所有工作负载。

本文描述的容错、可扩展协议通过复制和重新排序心跳和/或分配分组的递送而
恢复损失。当主节点120具有要被发送到一个或多个工作节点的信息时,可能出现这样的情
况,其中一些工作节点的分配比对其他工作节点的分配更重要(例如,因为一个分配相比其
他分配涉及较高优先级工作负载)。为了确保首先传?#36879;?#20248;先级分配,主节点将高优先级分
配推送到高优先级队列中,并将正常分配推送到?#31995;?#20248;先级队列中。主节点可以被配置为
在从?#31995;?#20248;先级队列发送分配分组之前完成高优先级队列上的分配。这确保了在分配对时
间关键的情况下,那些分配被首?#30830;?#36865;。

使用本文所述的协议,工作节点和主节点可以容忍一个或多个网络接口和/或通
信路径的失效。正如分配分组包含有关针对工作者的工作负载的信息和相应的版本号一
样,它还包括网络接口的列表、互联网协议(IP)地址的列表和与该信息相关联的版本号。当
工作者获得分配分组时,它将针对接口的版本信息与本地版本信息进行比较。如果由主节
点发送的信息的版本大于在工作节点处的信息的版本,则工作节点知道自从上次接收到该
信息以来,一个或多个IP地址已经改变。工作节点更新其版本号,随后的心跳分组具有更新
的信息。当主设备接收到具有更新版本的下一个心跳分组时,它知道工作者具有最新的IP
地址列表,并且它不需要将该信息传送到工作节点,直到下一次在主节点上发生IP地址变
更。

基于主节点的该IP地址列表,工作节点比较本地可用的IP地址列表,并标识多个
通信路由以提供最大冗余。例如,如果主节点120在两个子网上具有两个接口,并且工作节
点112在相同的两个子网上具有两个接口,则工作节点可以从主节点的每个接口中选择一
个IP地址用于通信。如果主节点在三个子网上有三个接口,并且工作节点具有与前面示例
中相同的配置,则工作者从主节点上的每个接口中选择一个IP地址进行通信,并允许网络
堆栈决定在将通信发送到远程IP地址时使用哪个本地接口。这将在下面关于图6进一步解
释。

当确定通信路由的健康时,被选择用于通信的每个远程端点可以以指示工作节点
认为所有端点均健康的?#25105;?#26435;重(例如100)开始。每60秒(或在一些其他可配置的时间间
隔),工作节点可以发起针对下n个心跳分组的基于ACK的语义,其中n是远程端点的数目。因
此,即使关于工作节点的信息是最新的,如果主节点接收到分组,则以ACK响应。为了最小化
临时网络故障对健康监视(例如,如果两个接口共享相同的网络交换机)可能具有的影响,
基于ACK的语义在时间间隔(在该示例中为60秒)中扩展。因此,如果工作者具有用于主节点
的三个远程接口,则三个心跳将以20秒的间隔隔开。

当工作节点没有从远程端点(接口)获得针对其寻求ACK的心跳分组的ACK时,工作
节点将端点的权重减少一定量。然后,在每个时间间隔,当工作者发?#25176;?#36339;分组时,工作节
点可以实施循环方法来选择下一个可用端点。然后考虑端点的权重。如果权重为100,则使
用该端点发?#25176;?#36339;。如果不是,工作者生成0到100之间的随机数。如果生成的随机数落在范
围[0,<endpoint_weight>]中,则该特定端点用于该时间间隔的通信。否则,选择下一个端
点,并遵循相同的方法。如果端点的权重变为零,则仅当端点正在寻找针对该分组的ACK时
(在上面的示例中,每60秒一次,直到其分数增加),该端点才用于发送分配分组。由于远程
端点为不响应于ACK请求的心跳而被惩罚,如果通过递增权重来接收ACK,则端点也被奖励
(尽管在上面的示例中,权重不能大于100)。

该方法使网络流量的量最小化,并且如果至少一个远程端点可达,则确保主节点
将在n个时间间隔(n是可用远程端点的数目)中获得心跳分组。如果所有可用的端点都健
康,则使用循环方法自动允许通过可用接口进行负载分配。主节点在从其接收到心跳的同
一端点上回复心跳分组。为了确保来自许多不同工作节点的分组?#36127;?#19981;同时到达主节点,
每个工作节点可以将从?#27573;0,差量]选择的随机数添加到时间间隔。至少在一些实施例
中,该差量值通常将小于时间间隔。还应当注意,与其他配置参数(例如,工作负载的存储器
使用)相比,对应于工作负载的一些配置参数变更较小(例如工作负载状态)。为了最大限度
地减少针对每个工作负载在每个心跳中发送的数据量,针对工作负载的配置参数分为两
组。在每个心跳中仅发送对应于更频繁变更的参数的信息。下面将分别关于图2和图3的方
法200和300进一步解释这些概念。

考虑到上述系统和架构,将参照图2和图3的流程图更好地理解可以根据所公开的
主题实现的方法。为了简化说明的目的,将方法示出和描述为一系列框。然而,应当理解和
明白的是,所要求保护的主题不受块的顺序的限制,因为一些块可以以与本文所描绘和描
述的顺序不同的顺序和/或与其他块同时发生。此外,可能不需要所有所示的框来实现下文
所描述的方法。

图2示出了用于在节点集群中的计算节点之间通信的方法200的流程图。现在将频
繁参考环境100的组件和数据来描述方法200。

方法200包括从工作节点接收标识该工作节点的当前工作负载标识符和健康状态
的数据分组的动作,该数据分组包括相关联的版本标识符(动作210)。例如,计算机系统101
的通信模块104可以从工作节点112接收数据分组113。数据分组113可以是通知计算机系统
101工作节点112仍然活跃且正在工作的心跳分组。心跳分组可以包括各种类型的信息,包
括标识工作节点112的当前工作负载(例如,虚拟机或正在运行的其他应用或服务的数目和
类型)的工作负载标识符116。工作负载标识符116可以包括用于每个工作负载114(例如VM、
应用、服务或其他工作负载)的多个单独的工作负载标识符115。或者,工作负载标识符116
可以包括正由工作节点112处理的一组工作负载的单个标识符。

心跳分组还可以包括工作节点的健康状态117作为版本标识符118的指示,该版本
标识符118可以是数?#21482;?#20854;他类型的标识符。版本标识符标识工作节点当前正在运行的工
作负载配置的版本。如果计算机系统101(在一些实施例中其可以是主节点)确定工作节点
正在运行过时的工作负载配置(如由比由主节点传播的当前版本更旧的版本标识符所表明
的),则计算机系统101知道在变更的指示119中发送更新的工作负载配置。

应当注意,不同的实施例可以涉及在诸如数据分组113之类的心跳分组中传送不
同的信息。例如,在一些情况下,工作节点112可以在心跳分组中发送完全工作负载配置和
健康状态117。在其他情况下,工作节点112可以发送在工作节点上运行的工作负载的工作
负载标识符116以及健康状态117和版本ID 118。在其他情况下,工作节点112可以发送工作
负载标识符116和版本标识符118,并且在其他情况下,可以仅发送标识工作节点112正在运
行的工作负载配置版本的版本ID 118。在后?#24674;?#24773;况下。如果工作负载配置和状态保持相
同,则未来的心跳数据分组可仅包括全局版本号。因此,设想了许多不同的选项和优化,并
且任何工作节点均可以在任何给定时间实现上述实施例中的任一个。

方法200还包括确定接收到的数据分组中的版本标识符不同于先前接收到的数据
分组的动作(动作220)。计算机系统101的确定模块105可以确定版本ID 118不同于先前接
收到的心跳数据分组。例如,版本ID可以是诸如“版本31”或“版本6.0.1”之类的版本号。在
一个分组中,版本可以是6.0.1,并且在下一个分组中,它可以被递增以示出发生了变更。因
此,后续心跳分组将包括6.0.2作为其版本标识符,以此类推,直到另一变更发生并且增加
到6.0.3。无论对于版本标识符使用哪种编号、字母或命名方案,如果在分组之间的标识符
存在差异,则将通知计算机系统101已经发生工作负载配置变更(例如,添加、移除或以某种
方式改变工作负载),并且如果工作节点仍然不在最近的工作负载配置版本上,则计算机系
统101可以继续在分配分组119中发送更新的变更。

方法200接下来包括评估工作节点的当前工作负载配置以确定是否在工作节点上
进行工作负载变更的动作(动作230)。计算机系统101的评估模块106可以访问工作负载配
置或简单地访问工作负载标识符116以确定是否在工作节点上进行工作负载变更。例如,评
估模块106可以将工作节点的当前工作负载配置与主节点关于哪些工作负载要由工作节点
112处理的指示进行比较。如果主节点关于哪些工作负载要由工作节点处理的指示不同于
所接收到的工作负载配置,则主节点可以提供要应用于工作节点112上的更新的变更,以使
其与主节点保持同?#20581;?br />

一旦已经确定要在工作节点上做出工作负载变更,方法200包括选择工作负载变
更的子集以应用于工作节点的动作(动作240),生成对工作节点的所选择的工作负载变更
的子集的指示(动作250),并且将所生成的工作负载变更的指示发送到工作节点(动作
260)。计算机系统101的变更选择模块107可以选择将哪些变更传播到工作节点112。如上所
述,在网络带宽方面可能有利的是避免超过正在用于传送数据分组的协议的最大传输单元
(MTU)。因此,所选择的变更可以基于优先级(首先做出较高优先级变更)或数据大小,以便
不超过针对给定数据分组的MTU。如果给定的更新分组不包括要被最终传播到工作节点的
所有变更,则该协议将最终提供所有的变更——它可能只需要更多的数据分组和更多的时
间。最终,所有工作负载变更将通过分配分组传播到工作节点,而不超过带宽限制或传输单
元限制。

因此,容错通信协议可以用于在工作节点之间传播工作负载变更。在一些实施例
中,容错协议可以指定计算系统101每个时间段发送或接收的数据分组的数目的上限。该上
限可以控制例如在分钟、小时、天或其他时间?#25991;?#20174;一个或多个工作节点接收的心跳分组
113的数目。附加地或可替代地,由协议指定的上限可以指示分配分组的数目(例如119)在
指定时间?#25991;?#20302;于某个数量。在一些情况下,上限可以基于主节点和工作节点的数目,使得
在存在非常大数目的节点的情况下,上限可以比在存在更少节点的情况下更高。附加地或
可替代地,可以为用于在计算环境100内传送数据分组的每个协议指定不同的上限。

在一些实施例中,计算机系统101的确定模块105可以确定带宽限制适用于工作负
载变更的指示119,并且可以将所选择的工作负载变更的子集划分为至少两个指示消息。这
些工作负载变更可以包括将工作负载(例如VM)添加到工作节点112,从工作节点移除工作
负载或者改变工作节点上的一个或多个工作负载。对工作负载的改变可以包括改变工作负
载的处理优先级、改变分配给工作负载的处理核心的数目、或改变影响如何在工作节点上
托管或处理工作负载的其他设置。

计算机系统101的指示生成模块109基于从变更选择模块107接收到的所选变更子
集108来生成变更的指示119。发送到工作节点112的变更的指示119可以表示工作节点的工
作负载配置的指示和主节点关于哪些工作负载要由工作节点处理的指示之间的差量。变更
的指示还可以包括向工作节点指示要应用工作负载更新的更新版本号。因此,例如,工作者
可以发送指示它当前正在处理四个工作负载的心跳分组,并且变更的指示119可以指示要
在工作节点上处理第五工作负载。由此,工作节点将开?#21363;?#29702;所标识的第五工作负载。可以
使用工作负载ID 115来标识每个工作负载。由此,主节点可以比较工作负载ID的列表,并发
送表示移除某工作负载ID、添加某工作负载ID或基于其标识符来改变工作负载的分配。

在一些情况下,将所生成的工作负载变更的指示(即119)作为状态查询消息的一
部分发送到工作节点。因此,可以作为另一状态查询消息(其通常作为常规操作过程的一部
分而被发送)的一部分来发送变更,而不是发送单独的分配消息。该状态查询消息可以以对
应于由工作节点正在处理的工作负载的优先级的指定间隔而被发送到工作节点。例如,如
果工作负载具有高优先级,则将更频繁地发送状态更新,以确保正如预期地处理工作负载。
可以为?#31995;?#20248;先级工作负载发送较少的状态更新,因为状态更新不那么紧急。状态查询消
息发送到工作节点的间隔可以根据为工作负载指定的优先级而动态地改变。如果工作负载
的优先?#23545;?#21152;,则状态更新的?#24503;?#20063;可能增加。类似地,如果工作负载的优先级?#26723;停?#21017;状
态更新的?#24503;?#21487;以相应地减少。可以对每个工作节点或由该工作节点处理的每个工作负载
做出这些变更。

应当注意,上文和本文中所描述的容错协议可以避免发送ACK分组,而是可以仅仅
?#35272;?#36755;入的心跳分组来确定?#23454;?#30340;工作负载是否正由?#23454;?#30340;工作节点处理,工作节点的健
康状态是什么,以及它们是否正在运行最新的工作负载配置(由附加到心跳分组的版本号
指示)。此外,应当注意,容错协议即使在级联失效的情况下也限制消耗的带宽量,并且仍然
使进展传播工作负载配置,即使分组被丢弃或者即使分组仅包括要对工作负载做出的变更
的子集。每个心跳分组和每个状态请求或分配分组包括版本标识符以使其他节点知道是否
需要做出变更以及是否已经应用变更。

现在转到图3,示出了用于在节点集群中的计算节点之间通信的方法300的流程
图。现在将频繁参考环境100的组件和数据来描述方法300。

方法300包括生成数据分组的动作,该数据分组包括工作节点负责的工作负载标
识符(ID)的列表,该数据分组还包括针对每个工作负载ID的版本号和工作负荷健康状态
(动作310)。例如,计算机系统101的数据分组生成模块110可以生成数据分组121,其包括工
作节点112负责的工作负荷ID 122的列表,针对每个工作负荷ID的健康状态117和标识正在
实施哪个工作负荷配置的版本ID118。将数据分组121发送到节点集群中的主节点(例如
120)(动作320)。例如,如图4所示,节点集群可以包括主集群401和包括403A、403B和403C的
一个或多个工作集群。主集群401可以包括基本?#20808;?#20309;数目的主节点,包括主节点402A、
402B和402C。每个主节点可以被配置为监视和控制由它们对应的工作集群的工作节点
404A、404B和404C正在处理的工作负载。因此,主节点402A可以监视和控制工作集群403A的
工作节点404A的工作负载,等?#21462;?br />

方法300还包括接收差量数据分组的动作,该差量数据分组包括指定要应用于工
作节点的工作负载中的至少一个工作负载的所选变更的子集的信息(动作330)。计算机系
统101的通信模块104可以从主节点120接收指示要应用于工作节点112的所选变更子集124
的差量数据分组123。附加地或可替代地,差量数据分组123可以直接发送到工作节点112。
差量数据分组可以指示要应用于工作负载114的那些工作负载移除、添加或配置变更。每个
变更可以与标识要?#38405;?#20010;工作负载做出变更的特定工作负载ID 115相关联。然后可以将在
差量数据分组中指定的工作负载变更的所选子集应用于工作节点上的至少一个工作负载
(动作340)。

因此,以这种方式,如图5所示,主节点501可以声明要应用于给定工作负载或工作
负载集合的变更的列表。该变更列表可以出现在指定所选变更503的差量数据分组502中。
该差量数据分组(或单独的数据分组)还可以包括工作负载配置509和版本ID 510。工作节
点504接收这些变更并应用它们,更?#28388;?#21457;?#32479;?#30340;心跳分组中的版本号(例如版本ID 508)。
心跳分组505然后返回到主节点501,包括当前工作负载标识符506(即,其当前正在处理的
工作负载的标识符),其当前健康状态597和指示它在哪个工作负载配置版本上进行操作的
版本标识符508。以该方式,每个心跳间隔向主节点通知每个工作节点的状态。如果心跳分
组被丢弃,则主节点假定它是一个丢弃,并且将最终接收另一个心跳分组(直到主节点声明
工作节点废弃并重新分配其工作负载的超时时段为止)。类似地,如果在主节点501与工作
节点504之间丢弃差量或分配分组,则工作节点将继续在旧工作负载配置上操作,直到接收
到更新的差量分组。心跳分组将继续告诉主节点工作者正在旧版本下操作,由此主节点将
继续发送差量分组,直到心跳指示?#23454;?#30340;版本。

在一些实施例中,数据分组121(例如心跳分组)在随机化的时间被发送到主节点,
使?#32654;?#33258;多个工作节点的数据分组在不同的时间被发送。随机化时间可以基于具有在零与
指定的心跳时间间隔之间的增加的差量时间的指定的心跳时间间隔。由此,所添加的差量
时间空间相对于其他节点离开心跳,导致来自工作节点的交错的心跳传输。在一些情况下,
使用已由主节点120限制为每个时间段指定的带宽量的容错通信协议发送数据分组121。可
以为每个协议指定该带宽限制,并且使用给定协议的每个传输可以被随机化以避免网络流
量中的尖峰。

图6示出了以下情景,工作节点604向主节点601发送状态查询分组(即状态请求或
REQ分组)以验证计算系统与主节点之间的物理链路正常工作。例如,工作节点604可以使用
不同的物理路由(例如603A、603B或603C)与主节点601通信。每个路由可以具有不同类型的
物理?#24067;?除了图6所示的NIC或者作为图6所示的NIC的替代),包括负载平衡器、路由器、网
关?#21462;?#22312;图6所示的实施例中,工作者可以在路由603A上发送REQ,并接收确认包括NIC 602A
的物理路由在正常工作的确认(ACK)消息。这样的REQ消息可以分别通过路由603B和603C的
NIC 602B和602C发送。然后可以沿着这些路由接收ACK消息。可以以指定的时间间隔发送
REQ消息,这对于较高优先级工作负载或路由可能更频繁。

如果工作节点604确定经过了指定的时间段而没有从主节点601接收到ACK分组,
则它可以减小针对主节点和/或路由的对应的可靠性分数605,其中可靠性分数指示主节点
与计算系统之间的物理链路在正常工作的可能性。一旦从主节点601接收到ACK分组,则将
主节点的可靠性分数增加到最大级别,指示主节点与计算系统之间的物理链路在正常工
作。由此,工作节点可以能够评估每个路由,并且如果路由停止工作,则可以切换到新的通
信路由并指示应该修复或替换失效的路由上的物理?#24067;?br />

在一些情况下,如果阈值数目的主节点已失效或变得不可用,则工作节点可以在
可靠性分数605减小之前动态地减少允许经过而不从主节点接收确认分组的时间量。因此,
随着主节点的可靠性分数?#26723;停?#24037;作节点越来越不愿意等待确认分组,因为变得更?#29992;?#26174;
的是,主节点可能已经失效。以该方式,主节点和工作节点可以以意识到带宽的?#34892;?#19988;容错
的方式进行通信,并且可以动态地适应变更的情况。因此,本文提供了促进主节点与工作节
点之间的容错和可扩展通信的方法、系统和计算机程序产品。

在不脱离其精神或描述特征的情况下,本文所描述的概念和特征可以以其他具体
形式实施。所描述的实施例在所有方面都被认为仅是说明性的而不是限制性的。因此,本公
开的?#27573;?#30001;所附权利要求而不是前述描述来指示。在权利要求的等同物的含义和?#27573;?#20869;的
所有改变将被包括在其?#27573;?#20869;。

关于本文
本文标题:在分布式集群中的可扩展故障恢复通信.pdf
链接地址:http://www.pqiex.tw/p-6091773.html
关于我们 - 网站声明 - 网?#38236;?#22270; - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 辉煌棋牌合法么 北京pk10冠军走势图 云南11选5历史开奖 股票融资优点有哪些 江西多乐彩彩彩乐 双云南十一选五走势图 879组选的关系 彩票排列三走势图 白山在线棋牌游戏官网 重庆时时彩开奖网站