在分布式集群中的可扩展故障恢复通信的利记博彩app

文档序号:11160879阅读:388来源:国知局
在分布式集群中的可扩展故障恢复通信的制造方法与工艺

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

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

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



技术实现要素:
被提供以用于以简化形式介绍概念的选择,其在以下的具体实施方式中将做出进一步的描述。本发明内容并不旨在识别要求保护的主题的关键特征或者核心特征,其也并不旨在被用来确定要求保护的主题的范围。

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

附图说明

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

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

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

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

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

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

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

具体实施方式

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

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

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

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

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

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

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

本文所述的实施例可以包括或利用包括计算机硬件(例如,一个或多个处理器和系统存储器)的专用或通用计算机系统,如下面更详细讨论的。系统存储器可以包括在总存储器103内。系统存储器还可以称为“主存储器”,并且包括可由至少一个处理单元102通过存储器总线寻址的存储器位置,在这种情况下,地址位置在存储器总线本身上被断言。系统存储器在传统上是易失性的,但是本文描述的原理也适用于系统存储器部分地或甚至完全非易失性的情况。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

该方法使网络流量的量最小化,并且如果至少一个远程端点可达,则确保主节点将在n个时间间隔(n是可用远程端点的数目)中获得心跳分组。如果所有可用的端点都健康,则使用循环方法自动允许通过可用接口进行负载分配。主节点在从其接收到心跳的同一端点上回复心跳分组。为了确保来自许多不同工作节点的分组几乎不同时到达主节点,每个工作节点可以将从范围[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可以是数字或其他类型的标识符。版本标识符标识工作节点当前正在运行的工作负载配置的版本。如果计算机系统101(在一些实施例中其可以是主节点)确定工作节点正在运行过时的工作负载配置(如由比由主节点传播的当前版本更旧的版本标识符所表明的),则计算机系统101知道在变更的指示119中发送更新的工作负载配置。

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

方法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上的更新的变更,以使其与主节点保持同步。

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

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

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

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

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

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

现在转到图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可以包括基本上任何数目的主节点,包括主节点402A、402B和402C。每个主节点可以被配置为监视和控制由它们对应的工作集群的工作节点404A、404B和404C正在处理的工作负载。因此,主节点402A可以监视和控制工作集群403A的工作节点404A的工作负载,等等。

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

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

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

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

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

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

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

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1