首页 / 专利库 / 联轴器,法兰和接头 / 活动度 / 动态调整活动资源的工作负荷的方法和系统

动态调整活动资源的工作负荷的方法和系统

阅读:573发布:2023-02-20

专利汇可以提供动态调整活动资源的工作负荷的方法和系统专利检索,专利查询,专利分析的服务。并且动态调整与至少一个父工作负荷组相关的活动资源的工作负荷的方法、系统和 计算机程序 。父工作负荷组包括一批工作负荷单元,每个工作负荷单元与一个关键字标识符相关,以致在关键字标识符的 指定 深度值下,属于该父工作负荷组的工作负荷单元共享相同的一系列值。活动资源独立确定是否存在过载情况。如果存在过载情况,那么增大父工作负荷组的深度值。如果存在欠载情况,那么活动资源还可合并工作负荷组。动态调整活动资源的工作负荷可被用作方法或系统的一部分,动态调整动态变化的一组活动资源内,分布式计算应用程序的工作负荷,随后把实体重定向到动态变化的目标资源。,下面是动态调整活动资源的工作负荷的方法和系统专利的具体信息内容。

1、一种动态调整活动资源的工作负荷的方法,所述工作负荷被 表示成一批单元,每个单元包括它自己的关键字标识符,活动资源与 至少一个父工作负荷组相关,父工作负荷组包括一批工作负荷单元, 以致在它们的关键字标识符的指定深度值下,属于该父工作负荷组的 工作负荷单元共享相同的一系列值,所述相同的一系列值定义与父工 作负荷组相关的组关键字标识符,所述方法包括:
活动资源独立确定在活动资源存在过载情况;和
如果存在过载情况:
那么增大父工作负荷组的深度值,以致识别至少两个子工作负荷 组;并且
指派一个目标资源以管理至少一个子工作负荷组。
2、按照权利要求1所述的方法,还包括如果存在过载情况,那 么识别可向其分配子工作负荷组的至少一个候选资源。
3、按照权利要求1所述的方法,还包括向目标资源请求工作负 荷接受。
4、按照权利要求1所述的方法,还包括在活动资源,把父工作 负荷组记录为非活动。
5、按照权利要求1所述的方法,还包括传送和子工作负荷组对 应的应用程序特定的对象。
6、按照权利要求1所述的方法,还包括把作用于父工作负荷组 的元素的实体重定向到管理子工作负荷组的目标资源。
7、按照权利要求6所述的方法,还包括:
接收来自作用于某一工作负荷单元的实体的探测消息,所述某一 工作负荷单元是父工作负荷组的成员,探测消息包括通过猜测要与所 述单元的关键字标识符相关的深度所形成的猜测标识符关键字;和
向所述实体发送响应,指示当前资源本地确定的组关键字标识符 是所述元素的关键字标识符所属的最近已知活动父组。
8、按照权利要求7所述的方法,其中作用于工作负荷单元的实 体使用所述响应,进一步细化要与所述单元的关键字标识符相关的正 确深度的估计值;和
探测与通过使用所述单元的关键字标识符的细化深度所形成的 父关键字组相关的另一资源。
9、按照权利要求1所述的方法,还包括:
确定在活动资源存在欠载情况;和
如果存在欠载情况:
那么识别至少两个工作负荷组,以便合并成一个合并工作负荷 组;
产生合并关键字标识符,以致在合并关键字标识符的指定深度值 下,属于合并工作负荷组的工作负荷单元共享相同的一系列值;和
由所述活动资源管理合并的工作负荷组。
10、按照权利要求9所述的方法,其中产生合并的关键字标识符 包括减小父工作负荷组的深度值,以致合并的工作负荷组被识别。
11、按照权利要求1所述的方法,还包括使工作负荷单元与关键 字标识符相关联,以致关键字标识符对工作负荷单元的一个或多个属 性编码。
12、按照权利要求1所述的方法,还包括构成用于映射到目标资 源的虚拟关键字,其中虚拟关键字包括完整关键字标识符的取决于负 载的子集。
13、按照权利要求12所述的方法,还包括使用构成的取决于负 载的虚拟关键字作为独立的映射服务的输入,所述映射服务返回属于 虚拟关键字的工作负荷元素应指向的目标资源的身份。
14、一种在动态变化的一组分布式资源内,运行分布式计算机应 用程序的系统,所述分布式计算机应用程序的工作负荷可被分解成一 组工作负荷单元,每个工作负荷单元包括它自己的关键字标识符,响 应整个工作负荷的变化,分布式计算中涉及的资源的数目动态变化, 所述系统包括:
协作管理构成整个工作负荷的整个一组关键字标识符的一组活 动资源,每个单个资源管理动态变化的一组关键字标识符,每个资源 独立评估它自己的工作负荷状况,并决定组关键字标识符的产生或合 并,从而减少或增大其工作负荷;
整体的一组资源,其活动资源构成可根据需要被用作分布式计算 机应用程序的一部分的子集;
接收与至少一个关键字标识符相关的虚拟关键字作为输入,并产 生来自整个资源组的目标资源的身份作为输出的一个映射服务;和
利用分布式应用程序的一组客户机实体,每个客户机实体与至少 一个关键字标识符相关,每个客户机实体动态确定它目前所属的取决 于负载的那组标识符关键字。
15、一种动态调整活动资源的工作负荷的系统,所述系统包括:
多个工作负荷单元,每个工作负荷单元与一个关键字标识符相 关;
一个父工作负荷组,所述父工作负荷组包括一批工作负荷单元, 其中在关键字标识符的指定深度值下,属于父工作负荷组的工作负荷 单元共享相同的一系列值;和
管理父工作负荷的一个活动资源,所述活动资源被配置成如果在 活动资源存在过载情况,那么增大父工作负荷组的深度值,以致识别 至少两个子工作负荷组,并指派一个目标资源以管理至少一个子工作 负荷组。
16、按照权利要求15所述的系统,其中活动资源还被配置成识 别可向其分配子工作负荷组的至少一个候选资源。
17、按照权利要求15所述的系统,其中活动资源还被配置成向 目标资源请求工作负荷接受。
18、按照权利要求15所述的系统,其中活动资源还被配置成在 活动资源,把父工作负荷组记录为非活动。
19、按照权利要求15所述的系统,其中活动资源还被配置成传 送和子工作负荷组对应的应用程序特定的对象。
20、按照权利要求15所述的系统,其中活动资源还被配置成如 果存在欠载状况,那么识别至少两个工作负荷组,以便合并成一个合 并工作负荷组,产生合并关键字标识符,以致在合并关键字标识符的 指定深度值下,属于合并工作负荷组的工作负荷单元共享相同的一系 列值,并且由所述活动资源管理合并的工作负荷组。
21、按照权利要求20所述的系统,其中活动资源还被配置成减 小父工作负荷组关键字标识符的深度值,以致合并的工作负荷组被识 别。
22、按照权利要求15所述的系统,其中活动资源还被配置成使 工作负荷单元与关键字标识符相关联,以致关键字标识符对工作负荷 单元的一个或多个属性编码。
23、按照权利要求15所述的系统,其中活动资源还被配置成构 成用于映射到目标资源的虚拟关键字,其中虚拟关键字包括完整关键 字标识符的取决于负载的子集。
24、按照权利要求15所述的系统,还包括配置成识别可向其分 配子工作负荷组的至少一个候选资源的外部服务。
25、一种包含在有形媒体中的计算机程序产品,包括:
与有形媒体结合,动态调整活动资源的工作负荷的计算机可读程 序代码,活动资源与至少一个父工作负荷组相关,父工作负荷组包括 一批工作负荷单元,每个工作负荷单元与一个关键字标识符相关,以 致在关键字标识符的指定深度值下,属于该父工作负荷组的工作负荷 单元共享相同的一系列值,所述相同的一系列值定义与父工作负荷组 相关的组关键字标识符,计算机可读程序代码使程序:
确定在活动资源存在过载情况;和
如果存在过载情况:
那么增大父工作负荷组的深度值,以致识别至少两个子工作负荷 组;并且
指派一个目标资源以管理至少一个子工作负荷组。
26、按照权利要求25所述的计算机程序产品,还包括如果存在 过载情况,那么识别可向其分配子工作负荷组的至少一个候选资源的 程序代码。
27、按照权利要求25所述的计算机程序产品,还包括向目标资 源请求工作负荷接受的程序代码。
28、按照权利要求25所述的计算机程序产品,还包括在活动资 源,把父工作负荷组记录为非活动的程序代码。
29、按照权利要求25所述的计算机程序产品,还包括传送和子 工作负荷组对应的应用程序特定的对象的程序代码。
30、按照权利要求25所述的计算机程序产品,还包括把作用于 父工作负荷组的元素的实体重定向到管理子工作负荷组的目标资源的 程序代码。
31、按照权利要求30所述的计算机程序产品,还包括实现下述 功能的程序代码:
接收来自作用于父工作负荷组的元素的实体的探测消息,所述探 测消息包括猜测深度下的猜测标识符;和
向所述实体发送响应,指示管理子工作负荷组的目标资源。
32、按照权利要求25所述的计算机程序产品,还包括实现下述 功能的程序代码:
确定在活动资源存在欠载情况;和
如果存在欠载情况:
那么识别至少两个工作负荷组,以便合并成一个合并工作负荷 组;
产生合并关键字标识符,以致在合并关键字标识符的指定深度值 下,属于合并工作负荷组的工作负荷单元共享相同的一系列值;和
由所述活动资源管理合并的工作负荷组。
33、按照权利要求31所述的计算机程序产品,其中产生合并关 键字的程序代码包括减小父工作负荷组的深度值,以致合并的工作负 荷组被识别的程序代码。
34、按照权利要求25所述的计算机程序产品,还包括使工作负 荷单元与关键字标识符相关联,以致关键字标识符对工作负荷单元的 一个或多个属性编码的程序代码。
35、按照权利要求25所述的计算机程序产品,还包括构成用于 映射到目标资源的虚拟关键字的程序代码,其中虚拟关键字包括关键 字标识符的散列值。

说明书全文

技术领域

发明涉及分布式计算和面向实用程序的计算,其中一组计算设 备协同提供特定的服务或功能。更具体地说,本发明涉及分布式的基 于服务器的应用模型,其中单个应用程序客户机设备通过常规的通信 基础结构,与一组动态变化的服务器应用程序中的一个或多个成员连 接,并交换数据。

背景技术

分布式计算指的是一种计算机结构,其中一组计算设备(通常称 为服务器)共同提供一种或多种与计算相关的服务。随着因特网的日 益普及,分布任意特定应用中涉及的计算和处理已成为非常普通的实 践,因为它允许在多个服务器间均分计算负担,有助于减少灾难性的 单点故障。因此,许多不可缺少的基于因特网的服务,例如用于把机 器主机名称解析成IP地址的域名服务(DNS)或流行的Google搜索 引擎,被实现成分布式服务,同时多个计算机协同支持大量的用户(通 常称为客户)。
任意分布式系统必须提供负载分配机制,因为服务器必须使用某 一协议协商或决定在组成服务器之间分配总的工作负荷的方式。总的 工作负荷本身可被认为由抽象工作负荷空间定义。除了其它许多东西 之外,该空间可由应用程序特定的(application-specific)对象(例如 文件或其它数据元素)组成。可按照两种不同方式之一,在协作的分 布式环境中管理总的工作空间
1.划分:每个服务器负责总的工作负荷空间的某一部分。按照 这种策略,在不同的服务器间划分应用程序(例如分布式文件系统保 存的文件)的总工作空间,同时工作空间元素的每个单个组件被分配 给特定的服务器。关心取回或修改特定组件的客户机随后必须被路由 到负责工作空间的对应部分的服务器。
2.复制/克隆:整个工作空间(应用程序的整个内容)被复制到 每个组成服务器,从而每个服务器能够起独立应用程序的作用。在这 种方法中,所有服务器的内容相同:在每个服务器存在每个单独组件 的副本。从而,关心取回或修改状态元素的客户机能够与任意单个服 务器交互作用。服务器负责使所有其它服务器被告知任意组件的状态 的任意变化。
许多有趣并正在出现的分布式计算应用程序的特征在于快速变 化或动态改变的组件。这些组件可包括保存在服务器上的内容,或者 由客户机产生的内容。这样的应用程序包括(但不限于)多人在线游 戏,遍布数据源的目录服务和车辆信息的分布式存储(远程信息处理)。 对于这样的应用程序,复制一般不可行,因为在多个服务器保持快速 变化的组件的相同副本的开销是不可接受的。因此,这种分布式应用 程序采用划分来散布处理负载。但是,负载散布的多数当前实现具有 两种基本限制:
1.先验确定其间分配应用程序的服务器的数目。通常,使用一 些离线技术,例如预报客户机负载的预测被用于计算所需服务器的数 目。一旦一组服务器被专用于特定的应用程序,即使负载平从它们 的预测轮廓突然增大或减小,这些服务器一般仍然被委托给该应用程 序。
2.该组组成服务器之间责任的划分也先验确定。从抽象的观点 来看,该划分通常基于某一名称空间的分割。例如,通过规定每个服 务器负责字母表的一个唯一字母(例如服务器1管理名称始于“A”的 所有文件,服务器2管理名称始于“B”的所有文件,等等),一组26 个服务器能够划分保存文件的责任,或者能够分配不同的服务器处理 不同的因特网域名(例如,服务器1处理.com,而服务器2处理.org 等)。
常规的分布式计算应用程序的一个缺陷是它们一般缺少资源的 按需分配。多数时候,应用程序的运行成本基于它消耗的计算资源的 数量(例如,服务器的数目)。如果该数目固定并且被先验确定,那 么它通常基于峰值负载(最坏情况)估计。这种基于峰值的规定通常 是不可接受的,因为即使当负载可能很低,并且能够由一组少得多的 服务器服务时,该应用程序也会导致浪费。通过使额外服务器的部署 随当前负载而变,分布式应用程序能够显著减少其对计算设备的平均 数目的需要。一种有效的解决方案理应在工作负荷的高峰期间增大服 务器的数目,类似地,当工作负荷强度变小时,减小参与服务器的数 目。
当前的分布式应用程序方案的另一缺陷是缺少工作负荷划分的 自适应。为了有效利用一组指定服务器,应用程序必须能够动态修改 分配给各个服务器的划分(总工作空间的多个部分)。自适应划分的 基本思想是允许面临意料不到的高工作负荷(或者其它一些问题)的 服务器无缝地把其一些职责转移给目前具有备用容量的一个或多个备 选服务器。借助这种形式的自适应划分,分布式系统能够响应实际工 作负载的变化,调整职责的分配。按照这种方法,应用程序的容量可 由所有服务器的累积容量定义,而不会受阻于单个服务器的容量,因 为应用程序现在能够动态地把负载重新从过载服务器分配给欠载服务 器。

发明内容

本发明通过支持按需资源分配和自适应工作负荷划分,解决了上 面提及的常规分布式应用程序的限制。本发明的一种方法使用一种紧 凑的表示法(称为标识符关键字)以数学上方便的方式,表示应用程 序的各个组件。从而,应用程序的总的组件空间由所有标识符关键字 的集合定义,所有标识符关键字的集合实质上定义一个标识符关键字 空间。这样,负载分配从而等同于修改在数目可变的服务器间,标识 符关键字空间的划分。逻辑上,工作空间的划分可被认为代表标识符 关键字(或应用程序组件)的分组或群集。在任何情况下,目前参与 该应用程序的每个服务器负责一个或多个不同(不重叠的)群集,以 致每个群集代表一批标识符关键字。一般来说,群集越大,组合在一 起,由单个服务器管理的一组关键字越多。为了实现在许多服务器之 间的负载分配,一个群集被分解成较小的多个子群集,并且这些子群 集中的一个或多个被重新分配给备选服务器。这些备选服务器可以是 目前正在参与应用程序的服务器,或者指派处理增加的应用程序工作 负荷的新的(另外的)服务器。本质上,标识符关键字空间被重新划 分,一些现有的分割部分被拆分成两个或更多较小的部分,这些部分 中的一些被分配给备选服务器。这种自适应工作负荷划分策略具有吸 引,因为聚类和解聚操作可由每个组成服务器独立进行,在各个服 务器之间不需要任何中心协调。从划分的观点来看,该方法实现本地 再划分(按照独立的方式拆分每个分割部分),而不是所有现有分割 部分的全局再调整。
本发明的一个例证方面是一种动态改变应用程序特定的对象被 群集成组的粒度,并响应变化的工作负荷倾斜(workload skew),使 用该动态粒度调整来调整在数目可变的服务器设备间的工作负荷划分 的机制。调整工作负荷粒度允许应用程序调整分配给任意单个服务器 的工作量,并提供在多个服务器间更有效地分配负载的能力。任意单 个群集(或者一组标识符关键字)总是被分配给单个服务器。因此, 标识符关键字组表示一组分布式服务器间负载分配的基本单位。通过 使标识符关键字组变小或变大,本发明便于动态控制分配给单个服务 器的工作负荷的数量。
本发明的另一例证方面是一种向应用程序按需分配计算资源(服 务器)的机制。本发明的这方面不仅允许改变群集的粒度,还允许产 生新的子群集。通过组合子群集产生和把新的子群集映射到新服务器 的机制,能够根据负载,修改在其间分配整个关键字空间的计算设备 (服务器)的数目。一般来说,每个群集被映射到唯一的服务器。因 此,当一个群集被拆分成两个或更多较小的子群集,并且每个子群集 被映射到可能的新服务器时,分配给该应用程序的服务器的数目增大。 类似地,当两个或更多较小的群集被合并成一个较大的群集时,分配 的服务器的数目有效减小,因为一组较大的应用程序组件现在被映射 到单个服务器,而不是分散在多个服务器之间。
本发明的另一方面涉及在负载分配算法的正式规范中使用的标 识符关键字的形成。借助称为标识符关键字的任意串,表述定义a) 应用程序的状态,和b)客户机与服务器的交互作用的组件。所有可 能关键字的总集合被定义为关键字空间。本发明通过把该关键字空间 的大小可变的分割部分分配给不同的服务器,发生作用。可变分割部 分被表示成关键字组;每个关键字组只是共享相同子模式的各个标识 符关键字的集合。目前管理特定范围的标识符关键字的服务器随后负 责保存和落入该范围中的任意关键字值对应的所有应用程序组件。类 似地,希望与该分布式应用程序交互作用的客户机借助关键字值描述 其交互作用,并且必须与目前管理该关键字值的服务器完成该交互作 用。
负载分配策略的另一例证方面是不是直接把关键字映射到对应 的服务器,而是通过另外的间接机制传送它们。在这种方法中,通过 定义可变数量(称为与每个群集相关的深度),改变群集大小(关键 字组的大小)。深度间接规定串的公共部分,对于属于该群集的所有 关键字来说,所述公共部分相同。这种间接映射方法随后获得关键字 和深度值,并根据该组合,使用其产生新的标识符(称为散列关键字)。 该产生过程具有在串的公共部分中,相同的两个标识符关键字产生相 同的散列关键字的性质。散列关键字也具有一个范围,通过利用在本 发明范围之外的技术,实质上在所有可用服务器之间划分所述范围。 随后,散列关键字被用作识别与特定关键字和特定深度相关的服务器 的基础。当改变同一关键字的深度时,相关散列关键字发生变化,导 致相对于特定服务器的映射的改变。通过使用这种间接过程,即使所 有服务器之间,散列关键字范围的分配始终保持静态,也能够在可变 的一组服务器间分配工作负荷。
本发明的另一例证方面涉及一种机制,借助该机制,希望执行关 于特定关键字的事务的客户机节点能够识别它们应与之交互作用的恰 当服务器。由于标识符关键字与特定服务器的关联取决于负载(并且 是动态的),因此客户机必须执行某种查寻,以便确定恰当服务器的 身份。不要求客户机知道服务器对关键字的动态管理,也不要求客户 机通过联系任意一个或多个特定服务器进行查寻。此外,本发明的一 种实现不要求各个服务器知道服务器的组成状态中,标识符关键字空 间的全局划分。通过联系任意服务器,客户机能够完成这种查寻。本 发明规定一种分布式查寻方法,通过该方法,客户机将重定向到正确 的服务器。
本发明的另一例证方面涉及一种机制,借助所述机制,服务器节 点能够识别它们应把管理关键字组的某一子组的职责托付给其的备选 服务器。源服务器(完成较大组的拆分的服务器)能够独立定义(标 识符关键字的)较小子组的构成,随后使用类似于客户机所使用的查 寻机制,确定现在应承担一个或多个这些子组的职责的一个或多个目 标服务器。一旦确定了目标服务器,源服务器随后向目标服务器发送 消息,指令目标服务器开始承担指定子组的职责。本发明允许反复应 用这种负载分配策略(目标服务器能够变成子组的源服务器,并对甚 至更小的子组重复该拆分策略)。按照类似的方式,子组能够被反复 合并成较大的组,有效地把较大的多组标识符关键字群集到单个服务 器上。
本发明可包括动态调整活动资源的工作负荷的方法。工作负荷被 表示成一组单元,每个单元包括它自己的关键字标识符。活动资源与 至少一个父工作负荷组相关,父工作负荷组包括一批工作负荷单元, 以致在它们的关键字标识符的指定深度,属于父工作负荷组的工作负 荷单元共享相同的一系列值。此外,所述相同的一系列值定义与父工 作负荷组相关的一组关键字标识符。该方法包括活动资源独立确定在 活动资源存在过载情况的确定操作。如果存在过载情况,那么增大操 作增大父工作负荷组的深度值,以致识别至少两个子工作负荷组,指 派操作指派一个目标资源管理至少一个子工作负荷组。
还包括根据本发明,在动态变化的一组分布式资源内运行分布式 计算机应用程序的系统。系统中的每个服务器被配置成独立评估它自 己的工作负荷状况,并确定组关键字标识符的产生或合并,从而减少 或增大其工作负荷。此外,响应整个工作负荷的变化,分布式计算中 涉及的资源的数目动态变化。系统包括一组活动资源,所述一组活动 资源协作管理构成整个工作负荷的整个一组关键字标识符,每个资源 管理动态变化的一组关键字标识符。根据需要,其活动资源构成子集 的整个一组资源被用作分布式计算机应用程序的一部分。系统还包括 一个映射设备,所述映射设备采用与至少一个关键字标识符相关的虚 拟关键字作为输入,并被配置成产生来自整个资源组的目标资源的身 份,作为输出。另外,一组客户机实体利用所述分布式应用程序,这 里,每个客户机实体与至少一个关键字标识符相关,并且动态确定它 目前所属的取决于负载的那组标识符关键字。
本发明的动态调整活动资源的工作负荷的另一例证系统包括多 个工作负荷单元。每个工作负荷单元与一个关键字标识符相关。系统 包括一个父工作负荷组,所述父工作负荷组包括一批工作负荷单元, 其中在关键字标识符的指定深度值下,属于父工作负荷组的工作负荷 单元共享相同的一系列值。另外,一个活动资源管理父工作负荷。活 动资源被配置成如果在活动资源存在过载情况,那么增大父工作负荷 组的深度值,以致识别至少两个子工作负荷组,并指派一个目标资源 管理至少一个子工作负荷组。
本发明的另一例证方面是一种包括动态调整活动资源的工作负 荷的计算机可读程序代码的计算机程序。活动资源与至少一个父工作 负荷组相关,该父工作负荷组包括一批工作负荷单元。每个工作负荷 单元与一个关键字标识符相关,以致在关键字标识符的指定深度值下, 属于父工作负荷组的工作负荷单元共享相同的一系列值。所述程序被 配置成确定在活动资源存在过载情况。如果存在过载情况,那么程序 增大父工作负荷组的深度值,以致识别至少两个子工作负荷组,并指 派一个目标资源管理至少一个子工作负荷组。
根据如附图中图解说明的本发明的各个实施例的更具体说明,本 发明的前述及其它特征、效用和优点将变得显而易见。

附图说明

图1表示具体体现本发明的例证网络环境。
图2利用基于位置的分布式系统的例子,表示关键字和分布式系 统之间的类属连接,这里,关键字被用于对分层网格中的特定位置编 码,根据每个服务器管理的位置区域,在组成服务器中分配工作负荷。
图3表示可利用特定服务器管理的一组关键字,定义在组成服务 器之间的工作负荷的划分,以及如何可利用大小变化的关键字组,有 效地描述不同服务器管理的不同工作负荷划分。
图4表示较大的群集(一个关键字组)怎样可被连续分解成较小 的群集(多个较小的关键字组),以及通过二进制树,表示这种拆分 过程的逻辑表示。
图5表示说明一系列步骤的例证流程图,通过所述一系列步骤, 一个候选关键字组被服务器拆分成两个或更多的关键字子组,一个或 多个关键字子组随后被分配给其它服务器。
图6表示接收指定特定关键字和深度组合的请求的服务器,确定 它是否应处理该请求的例证流程图。该流程图还表示在服务器确定关 键字和深度组合不正确,或者请求应由另一服务器处理的情况下,应 答该请求所需的逻辑步骤。
图7是详细说明试图在任何情况下,确定特定关键字的恰当服务 器的客户机采取的识别所述恰当服务器的步骤的例证流程图。该确定 过程实质上涉及试出与该关键字相关的可能深度的范围,并反复检查 对应的关键字组是否正在任意服务器被有效管理。
图8表示自适应负载分配技术如何能够组合工作负荷的基于关键 字的表示法,和用于可缩放的高效负载重定向的分布式散列表(DHT) 基元。该图说明如何可把关键字与可变深度联系起来,以及如何使用 基于该深度的虚拟关键字的形成,把相同的标识符关键字引向不同的 服务器。从而,深度参数提供一种极其便利的隐含改变从某一关键字 到目标服务器的映射的方式。
图9表示一组分布式服务器如何能够交换本地信令消息,确定何 时工作负荷已被充分减小,从而把多个子组合并成一个较大组的实施 例。这些步骤包括把负载信息从子服务器(管理活动关键字组的服务 器)交换给父服务器(拆分较大组,从而产生这些较小群集的服务器), 随后使父服务器指令恰当的子服务器把关于较小子组的职责返回给父 服务器。

具体实施方式

下面详细说明如何采用本发明,在多个资源之间自适应分配工作 负荷。在本发明的整个说明中,参考图1-9。当参考附图时,附图中 所示的类似结构和部件用相同的附图标记表示。
图1表示具体体现本发明的例证环境102。注意环境102只是用 于举例说明,并代表可实现本发明的无数结构。从而,本发明不应被 理解为局限于这里表示和说明的环境结构。
环境102包括与网络106耦接的客户机104。网络106可以是现 有技术中已知的,实现环境102中的各种设备之间的通信的任意网络。 从而,网络106可以是局域网(LAN),广域网(WAN),或者它们 的组合。网络106可被配置成公共网络,例如因特网,和/或专用网络, 并且可包括现有技术中已知的各种布局和协议。
根据本发明的一个实施例,客户机104通过网络106,利用至少 一个应用程序(application)108(这里也称为服务),例如多人在线 游戏。此外,应用程序108分布在与网络106耦接的多个服务器110 之间。从而,多个服务器110向客户机104提供相同的应用程序108。 如上所述,在服务器110间分配应用程序108有助于均分可能来自数 百万客户机104的计算工作负荷,从而任何服务器都不会过载和出故 障。
有利的是,可根据应用程序的负载的变化,采用本发明动态调整 分布式应用程序108使用的服务器110的数目。还可采用本发明动态 控制总工作负荷在一组不断变化的服务器110间的分布,应用程序108 分布在所述一组不断变化的服务器110中。如下详细所述,本发明使 用关键字的概念来捕捉应用程序108的总工作负荷。每个单独的关键 字对应于应用程序工作负荷的某一元素,例如一个数据项(例如一个 计算机文件),或者一组应用程序客户机设备,从而应用程序108的 总工作负荷由所有可能关键字的工作负荷的集合组成。关键字被分成 大小可能不断变化的关键字组(也称为群集)。在任意时候,在属于 特定群集的所有关键字由公共服务器处理的意义上,一个群集被看作 一个基本单元。从而,应用程序负载的分布式处理等同于使每个服务 器负责一个或多个群集。
当特定服务器面临不可接受的负载水平(或者达到指示它必须减 少其负载的一些其它条件)时,该服务器只是挑选它目前管理的群集 之一,并把该群集分成两个或更多较小的群集(称为子群集)。每个 子群集由初始的父群集的关键字子集组成。该服务器随后确定一个或 多个另外的服务器,它将把一些负载分给所述一个或多个另外的服务 器,并使用信令消息把一些或全部子群集的职责传送给备选服务器。 从而,过载服务器实质上把其工作负荷分成较小的部分,可能保留初 始工作负荷的某一部分,并把剩余部分转移给一个或多个服务器。
应注意的是相同大小(具有相同数目的关键字)的两个群集不必 对相同的工作负荷贡献相同的数量,因为这两个群集可能具有不同数 量的底层应用程序元素。例如,考虑每个关键字对应于一个唯一的应 用程序客户机设备的应用程序情况。于是,任意群集的工作负荷由与 该群集相关的客户机设备的数目确定。由于客户机设备按照不同的方 式,偶发地使用应用程序,因此,该群集中的每个关键字并非都活动, 即,具有与之相关的活动客户机。于是,不同群集的工作负荷将不同。 于是,把一个群集平分成两个大小相同的子群集的过程并不一定意味 着底层工作负荷的平分;工作负荷自己可表现出朝着这两个群集之一 的可变倾斜。一般来说,正是该倾斜的工作负荷和工作负荷倾斜的动 态变化,使得自适应负载分配成为必需。目前处理合理的非活动群集 的服务器可能突然发现该群集已变得过于活跃,而不能被处理,使得 必需在另外几个服务器中,把该群集分成较小的群集。由于这种分组 过程的结果,服务器最终负责整个工作负荷的不同大小的分割部分。 当然,可递归应用通过分离较大的群集,产生较小子群集的过程,以 致通过使用恰当大小的较小群集,使由尺寸较大的群集表现出的工作 负荷的倾斜更均匀地分布。
如下所述,本发明不需要各个服务器间的任意集中协调。通过使 用现有技术中已知的任意技术确定某些职责将被转移给的一个或多个 目标服务器的身份,过载服务器本地完成负载分离决定。该决定可集 中完成(例如使用基于表格的查寻),或者如一个实施例所示,利用 分布式查寻机制,例如分布式散列表(DHT)实现来完成。通过消除 对任何集中的状态维护的需要,根据本发明的负载分配证明高度可缩 放,并且可被用于支持任意极大的服务器组(例如由10000或更多的 服务器组成的服务器组)内的自适应负载分配。
本发明还提供一种负载合并机制。当分布式系统的某些部分上的 负载足够低,以致可被安全地集合到单个服务器(从而使一个或多个 服务器免除管理较小工作负荷的职责),子群集同样可被集合成较大 的群集,从而把关键字集合成较大的组。该集合过程也被局部化,因 为它只涉及进行初始分离的服务器(称为父服务器)和现在把关于子 组的职责返回给父服务器的那些服务器(称为子服务器)之间的交互 作用。分离和合并过程都可被递归应用,直到组的粒度(群集的大小) 变得适合于当前的应用程序工作负荷为止。此外,只在本地进行组的 分离(即由面临过载的服务器进行)。因此,本发明允许在工作负荷 的不同部分中,形成大小可变的关键字组,而不要求整个工作负荷的 关键字组的大小一致。
由于在数目动态变化的服务器内,关键字组的可变划分的缘故, 特定服务器处理的那部分工作负荷根据工作负荷而变化。当服务器处 理的工作负荷分割部分发生变化时,应用程序可能还需要把另外的应 用程序特定的状态信息或对象转移给服务器,或者从服务器转移出所 述另外的应用程序特定的状态信息或对象。这种转移意味着对划分或 合并过程的额外开销。对于其中不同的分割部分与在重新划分期间, 必须被转移的大量静态数据相关联的常规应用程序,例如数据库或文 件系统来说,这种开销很高。但是,存在工作负荷瓶颈主要由不必保 存的流式数据或瞬时数据确定的更多应用程序情况(例如,多人视频 游戏,基于流式数据的查询)。虽然本发明的负荷划分方案适用于所 有分布式计算应用程序,不过本发明特别适合于其中重新划分不涉及 静态数据的大量传送的这种面向瞬时数据的应用程序。
为了进一步说明本发明,必须说明“标识符关键字”和分布式应用 程序的整个工作负荷之间的关系。图2表示了假定的分布式应用程序, 其中根据组织成网格的地理区域,划分工作负荷。例如,分布式应用 可在较大范围内跟踪汽车,并回答关于汽车的查询。此外,不同的服 务器负责整个地理区域的不同分割部分。图2中,整个区域201被分 成一组网格(202~226),每个网格代表区域201可被分成的最小单 元。本例中,每个网格202~206由四位二进制标识符关键字(234~ 258)表示。一般来说,标识符关键字234~258可以是任意长度,并 且使用其它基数,例如三进制或四进制。因此,具有标识符关键字值 “0011”(246)的网格214代表被分割区域201的最小单元之一。
在本发明的一个实施例中,分级实现对网格的标识符关键字的分 配,并且对网格的标识符关键字的分配反映区域间的某一分组法。例 如,区域201的整个上半部具有其标识符关键字始于“0”的网格,而区 域201的下半部由具有始于“1”的关键字的网格组成。为了以数学方式 表示这种最小网格可被组合成较大组的聚类形式,用意味着“不关心” 的前缀符号“*”表示各组。因此,区域201的上半部可被表示成“0*” (规定其关键字始于初始模式“0”的所有网格的集合的简写符号)。类 似地,表示法“10*”表示整个左下侧象限(包括网格206、208、210 和212),因为左下侧象限中的所有网格具有始于模式“10”的标识符 关键字238、240、242和244。注意该方法允许根据组的组成成员的 共性,以其它形式产生组。例如,某一组可以以前缀为基础,同时组 规范识别所有组成网格必须具有的共享尾值。作为一个例子,组“*10” 指的是网格204、208、220和224的集合,因为它们分别具有满足规 定的关键字模式的标识符关键字236、240、252和256。
现有可明白通过指定特定服务器管理的一个或多个标识符关键 字组,如何能够表示组成服务器间地理区域的划分。图3表示了工作 负荷划分的一个例子。同样,区域201由网格(202~226)矩阵表示, 每个网格与其各自的4位标识符关键字(234~258)相关联。另外, 三个服务器,服务器A 302,服务器B 304和服务器C 206分别管理 整个区域201的大小可变的部分308、310和312。服务器A管理的职 责范围(包括网格202~216)可由组“00*”(对应于关键字“0000”、 “0001”、“0010”和“0011”)和组“10*”(对应于关键字“1000”、“1001”、 “1010”和“1011”)表示。类似地,服务器B的职责范围(包括网格218 和232)可由组“010*”(对应于关键字“0100”和“0101”)表示。最后, 服务器C的职责范围可由组“11*”(包括网格222、224、226和228) 和“011*”(包括网格220、230)表示。
通过简单地修改它目前管理的一个或多个组,服务器能够根据本 发明实现负载分流。例如,假定迄今为止管理由关键字“1000”、“1001”、 “1010”和“1011”组成的组“10*”(包括网格206、208、210和212)的 服务器A 302停止管理该组,改为开始管理由关键字“1010”和“1011” 组成的组“101*”(包括网格208和210)。从而,服务器A 302减少 了其工作负荷;虽然先前它管理整个左下侧象限,不过现在它已把其 职责范围缩小到左下侧象限的下一行。为了确保所有服务器支持整个 工作负荷,某一其它服务器(或者目前空闲,或者正在管理工作空间 的某一其它部分)现在应承担由关键字“1000”和“1001”组成的剩余组 “100*”(包括网格206和212)的职责。该例子表示通过同等地修改 各个标识符关键字组的管理,如何能够实现调整工作负荷划分的问题。
预期根据本发明的工作负荷划分对关键字的映射可应用于任意 分布式计算应用程序。任意分布式应用程序的工作负荷划分由相对于 各个服务器的大小可变的关键字组的分配表示。标识符关键字可代表 一个或多个应用程序特定的属性的编码,根据标识符关键字,划分工 作负荷。例如,考虑车辆跟踪应用程序,这里根据车辆的属性分配工 作负荷。假定所有车辆具有车辆颜色、车辆制造商和车辆识别号(VIN) 等属性,每个属性可具有4个不同的值,并且均被表示成2位。此外, 假定颜色属性被编码成蓝色=“00”,红色=“01”,白色=“10”和黑色 =“11”。一种可能的分层标识符关键字需要6位,前面的2个最高有 效位记录车辆颜色值,中间的2位记录车辆制造商,最后的2位用于 VIN。在这种编码方案中,目前管理关键字组“01*”的服务器实质上负 责跟踪所有红色汽车。另一方面,管理关键字组“1*”的服务器目前负 责跟踪白色和黑色的汽车。在这种系统中,标识符关键字和关键字组 具有与它们相关的一些语义含义。
另外预期标识符关键字可代表和任意语义相关属性没有任何关 系的任意映射。例如,保存文件的分布式文件系统应用程序可随机地 向每个文件分配一个6位二进制数。这种情况下,关键字组“101*”只 代表其文件关键字始于“101”的一组文件。由于这种随机分配的缘故, 不能使任意其它语义含义和该组文件联系起来。
从而,本发明可应用于任意形式的应用程序工作负荷到标识符关 键字的编码,而不管它们是否在语义上相关。为了简化说明,下面用 二进制关键字的符号说明本发明,应用程序工作负荷的最小单位被表 示成一个N=7位的关键字,N表示各个标识符关键字的总长度。另外, 标识符关键字定义工作负荷适应过程,从而,过载的服务器通过把其 一些工作负荷重定向给一个备选服务器,分流其一些工作负荷。类似 地,接合关键字组的机制定义相反的负载合并过程,从而,通过从备 选服务器取回工作负荷,未充分使用的服务器可增大其工作负荷。
如上所述,通过按照分级方式改变服务器管理的关键字组,本发 明能够分配或合并工作负荷。每个关键字组与称为深度的参数相关, 深度表示帮助定义关键字组的组成标识符关键字的二进制位的数目。 在指定的深度位中,关键字组中的所有标识符关键字都相同,但是在 剩余的各个位,可能具有不同的值。该深度等于“*”符号之前的符号的 数目。例如,关键字组“101*”具有等于3的深度,因为该组的所有组 成关键字共享相同的3个起始位“101”。
图4表示增大关键字组的深度如何等同于把较大的关键字组分成 两个或更多较小的组。例如,考虑深度=3,并且必须被分离的关键字 组“101*”(402)。为了增大关键字组402的深度,关键字标识符“101*” 被分成两个关键字标识符“1010*”和“1011*”,通过考虑下一(第4) 位位置中的所有可能值,获得这两个关键字标识符“1010*”和“1011*”。 从而,关键字组“101*”(402)被分成两个子组:关键字组“1010*”(404) 和关键字组“1011*”(406)。显然关键字组402实际上是较小的子组 “1010*”(404)和“1011*”(406)的组合。此外,增大组的深度(用 两个或更多的子组代替该组)有效地把属于公共组的关键字分散在这 些较小的子组中。考虑两个7位关键字“1010110”和“1011110”。虽然 它们都是关键字组“101*”的一部分,但是当深度增大到4时,它们落 入两个不同的关键字组中;“101011”是关键字组“1010*”的成员,而 “1011110”是关键字组“1011*”的成员。于是应注意到增大特定组的深 度,并用所得到的较小组代替较大组,是一种产生较小的多组关键字 的有效手段。
在本发明的一个实施例中,每个关键字组被映射到单个服务器 (或者由单个服务器管理)。通过由较大的组产生两个或更多的子组, 较大关键字组的初始负载被分配给两个或更多的服务器。注意相反过 程也成立;减小两个或更多子组的深度等同于把两个较小的组合并成 一个较大的关键字组。例如,当只在深度=3的情况下考虑关键字组 “1010*”和“1011*”时,它们可相同地由较大的关键字组“101*”(深度 =3)表示。增大深度的过程也可递归地应用于各个子组。例如,在图 4中,深度=4的关键字组“1011*”(406)再次被分成深度=5的两个较 小组,“10110*”(408)和“10111*”(410)。可按照两种不同的方式 概括深度增加的过程。
1.对于由高阶基数描述的标识符关键字来说,深度增加1用于 把关键字组分成许多关键字组。例如,深度=4的三进制关键字“0120*” 可被分成深度均等于5的三个子组“01200*”、“01201*”和“01202*”。
2.关键字深度可被增大大于1的值。例如,与二进制关键字“101*” 相关的深度(深度=3)可被直接加2,产生深度均等于5的四个不同 子组“10100*”、“10101*”、“10110*”和“10111*”。
也可同时应用使用高阶基数的步骤,和把关键字深度增加大于1 的值的步骤。
图4还表示了对于二进制关键字组,深度增大如何可被认为由二 进制树结构上的不同深度表示。关键字组“1010*”和“1011*”(深度均 等于4)是父组“101*”(深度等于3)的子节点。这些关键字组又可具 有子节点。例如,关键字组“10110*”和“10111*”(深度均等于5)是 关键字组“1011*”的子节点,而关键字组“011100*”和“011101*”(深度 均等于6)是关键字组“01110*”的子节点。本发明允许树形结构的不 同部分生长到不同的深度。换句话说,根据相关关键字空间的相对“热 度”,可在不同的粒度等级,把整个应用程序负载的不同部分群集在一 起。
图5中,说明了动态调整活动资源的工作负荷的例证程序的流程 图。图5说明了通过有效地把某一部分的工作负荷分散给一个备选过 载服务器,分流一些负载的实施例的步骤。注意相反的负载合并过程 被推迟到后面参考图9说明。应注意所示的逻辑操作可被实现成(1) 在计算系统上运行的一系列的计算机执行的步骤,和/或(2)计算系 统内的互连机器模。所述实现只是取决于实现本发明的系统的性能 要求的选择问题。因此,构成这里描述的本发明的实施例的逻辑操作 被称为操作、步骤或模块。
控制流程始于确定操作502,在确定操作502,诸如服务器之类 的活动资源检查是否存在需要负载拆分的过载条件。一般来说,活动 资源与一个父工作负荷组相关。父工作负荷组包括许多工作负荷单元, 每个工作负荷单元与一个关键字标识符相关,以致属于父工作负荷组 的工作负荷单元共享在关键字标识符的规定深度值之内的一系列相同 的值。如果不存在过载条件,那么该程序结束。另一方面,如果确定 负载拆分是必需的,那么控制转移到识别操作504。
在识别操作504,活动资源选择要拆分的一个或多个候选工作负 荷组。例如在图3,服务器A 302管理具有关键字标识符“00*”和“10*” 的工作负荷组308。如果存在过载条件,那么服务器A 302可选择拆 分整个工作负荷组308,或者只选择拆分“00*”或“10*”工作负荷组之 一。可使用许多算法来确定哪个组,或者哪些组将被拆分。下面详细 说明一种这样的拆分算法。返回图5,一旦识别操作504已完成,那 么控制转移到增大操作506。
在增大操作506,活动资源增大父工作负荷组的深度值,以致识 别至少两个子工作负荷组。从而,管理具有标识符关键字“1010*”(深 度值等于4)的父工作负荷组的服务器可产生深度值等于5,并且识别 两个子工作负荷组的两个子标识符关键字“10100*”和“10101*”。如上 所述,深度值可被增加除1以外的其它增量。在增大操作506完成之 后,控制转移到分配操作508。
在分配操作508,分配目标资源,以便管理新产生的子工作负荷 组中的至少一个。识别将向其分配子组的目标资源的过程用类属“Map ()”函数表示。可以预期的是Map()函数使用各种算法。下面提 供并讨论基于DHT,并且不需要任何集中查寻表的例证Map()函 数。
在本发明的一个特定实施例中,一旦Map()函数返回目标资源 的身份,那么过载的活动资源(例如图3中的服务器A 302)在请求 操作510,向目标资源(用于“10100*”的服务器B 304和用于“10101*” 的服务器C 306)发送“AccepLoad”消息,指示目标资源现在应承担管 理子组的职责。作为职责转移的一部分,活动资源还需要把另外的应 用程序特定的对象(即,对应于子组“10100*”和“10101*”的对象)传 送给目标资源。
在子工作负荷组职责已被转移给一个或多个目标资源之后,在改 变操作512,活动资源使其关于父工作负荷组的映射项非活动。例如, 服务器A使其关于“1010*”的项目非活动,指示它不再管理该较大的 工作负荷组。该项目被保持为“非活动项目”,指示该服务器过去管理 该组,但是目前已把该组拆分成较小的组。换句话说,非活动项目表 示二进制树形结构中的对应节点现在具有深度更大的子节点(并且可 能具有其它下级节点)。作为映射过程的一部分,允许服务器A把一 个或多个子组映射回它自己。
在本发明的一个实施例中,服务器把活动关键字组拆分成两个 (或更多)关键字子组,但是随后保留这些子组中的一个(或多个) 的职责。这种形式的Map(.)函数允许真实的负载分流,其中过载服 务器实质上自己保留某一部分的初始工作负荷,只把剩余的那部分工 作负荷分配给备选服务器。在另一实施例中,通过使深度增大较大的 数量,服务器能够产生多个子组(例如使深度加3会产生8个子组), 随后自己有选择地保留这些子组中的一部分,同时把剩余子组的管理 转移给备选服务器。
由于本发明的结果,从特定标识符关键字到对应服务器的映射是 动态的。由于在不同的情况下,关键字是(不同深度的)不同活动关 键字组的一部分,并且由于这些不同的活动组(在二进制树形结构中, 它们共享父-子关系)可能映射到不同的服务器,因此客户机需要动态 确定恰当服务器节点的身份。例如在图3中,目前位于网格230(具 有关键字“0111”)中的车辆必须完成与服务器C 306的事务处理。但 是,在未来某一时刻,服务器C 306可拆分关键字组“011*”(深度=3), 保留子组“0110”,并把关于另一子组“0111”的职责移交给服务器B 304。网格230中的车辆随后必须动态地重新绑定它自己和服务器B 304,或者被重定向给服务器B 304。
一般来说,特定的关键字是被排列成二进制树形结构中的父-子 节点的多个关键字组的一个成员。例如,关键字“1010111”是关键字组 “*”(深度=0),“1*”(深度=1),“10*”(深度=2),“101*”(深度 =3),“1010*”(深度=4),“10101*”(深度=5),“101011*”(深度 =6)和“1010111*”(深度=7)的一员。由于负载拆分算法的缘故,在 任意时刻,这些关键字组中只有一个活动。关于该特定关键字的事务 必须以具有该活动项的节点为目标。
通过使深度还与每个单独的关键字相关联,能够表示关键字相对 于其当前活动的关键字组的动态分配。这类似于与关键字组相关的深 度的概念。如果假定关键字“1010111”与具有活动项“101*”的服务器交 互作用,那么关键字“101011”可被认为目前具有为3的正确深度,这 意味着它目前被映射到组“101*”(通过获得该关键字的前3位而形 成)。另一方面,如果假定客户机与具有活动项“10101*”的服务器交 互作用,那么相同的关键字的当前深度为5,并被映射到组“10101*” (通过获得前5位而形成)。从而,显示客户机的查找正确服务器的 过程等同于确定当前活动的与指定关键字相关的深度。
逻辑上,客户机(或者一般地说,试图向其恰当的服务器解析某 一关键字的任意请求者)动态查找用于特定关键字的正确服务器的过 程如下所示:请求者假定(猜测)该关键字的某一深度,并向与对应 关键字组相关的服务器发出探测消息,了解该关键字组目前是否活动。 例如,客户机C可猜测关键字“1010111”的深度为3,并向服务器A 发出探测消息,以便确定Map()函数是否指示服务器A应负责组 “101*”。图6表示了接收规定特定关键字和深度组合的请求的服务器 或其它资源,确定它是否应处理该请求的的例证程序的流程图。图6 还表示了在该服务器确定关键字和深度组合不正确,或者另一服务器 应处理该请求的情况下,所执行的响应该请求的逻辑步骤。
该过程始于接收操作602,在接收操作602,诸如服务器之类的 资源接收来自客户机之类的请求者的探测消息,以确定特定的标识符 关键字和关键字深度是否活动。当收到探测消息时,被探测的服务器 随后可报以“CORRECT”或“INCORRECT”消息,指示猜测是否正确。 就“INCORRECT”消息来说,服务器向请求者返回另外的消息。
随后在确定操作604,服务器确定关键字实际上是否是其任意活 动关键字组的一个成员,即,该关键字的任意可能前缀目前是否被列 举为该服务器管理的各组的一个活动项。如果该关键字活动,那么控 制转移到检查操作606,服务器检查匹配的活动关键字组的深度是否 与请求者在探测消息中指定的猜测深度“d”一致。如果这两个深度匹 配,那么请求者确实猜对正确的深度,并到达正确的服务器,控制转 移到发送操作608。在发送操作608期间,服务器返回“CORRECT” 消息,回应该正确的深度=d。
在客户机的估计深度不正确的情况下,服务器可能面临两种不同 的情况。一种情况下,客户机仍然到达正确的服务器,但是具有错误 的深度。例如,假定Map()函数已确定服务器A负责子组“10101*”。 虽然项目“101*”非活动(该组已被递归拆分成较小的组),服务器A 仍然是关键字“1010110”的正确服务器,虽然深度等于5。这种情况下, 控制转移到发送操作610,在发送操作610,服务器向请求者返回 “CORRECT”消息,但是指定正确的深度(匹配的活动关键字组的深 度)。对于另一种情况来说,当客户机到达错误的服务器时,该服务 器返回“INCORRECT”消息,但是具有“最长前缀匹配(LPM)”深度, LPM深度实质上是服务器单独知道的关键字的最接近的原始组的指 示。
这里,说明最长前缀匹配(LPM)过程。服务器实质上考虑其所 有非活动项目(在先前某一时刻,它主动管理的,但是目前已被拆分 成较小组的各组),并在确定操作612,确定(所有这些项目中)从 第一位开始的,与客户机的关键字的最长匹配。例如,如果服务器具 有关于“01*”、“100110*”和“111*”的非活动项目,那么关于关键字 “1010110”的LPM匹配等于2,因为该关键字具有(与项目“100110*”) 的两个起始位的最大匹配。一旦深度被确定,控制就转移到发送操作 614,服务器在其“INCORRECT”消息中返回该深度(如果根本没有位 匹配,那么深度也可以是0)。显然,如果组由其它形式的分层关键 字组定义(例如,根据共享的后缀,而不是前缀),那么识别最接近 的原始组的过程可能涉及稍微不同的匹配标准(例如,最长后缀匹配)。
为了最后确定正确的服务器,客户机/请求者还必须遵循使用来 自服务器的“CORRECT”和“INCORRECT”响应,最终确定正确深度 的过程。一般来说,各种迭代方案都是可能的。例如,客户机可从深 度=0的值开始,并线性进行到深度的最大可能值,联系每个可能的服 务器,直到发现匹配为止。本发明可包含所有这样的深度确定程序。
图7中,表示了本发明预期的例证深度确定程序。该程序始于初 始化操作702。在该操作期间,最小搜索范围被设置成0,最大搜索范 围被设置成N,这里N是关键字的长度。这是因为关键字的真实深度 已知介于0和关键字的长度之间。一旦初始化操作702完成,控制就 转移到选择操作704。
在选择操作704,服务器选择介于min和max之间的特定值。作 为一种可能的选择技术,客户机可选择(min,max)之间的中点。在 选择操作704完成之后,控制转移到发送操作706。
在发送操作706,客户机向关于对应的关键字组指示的服务器发 送探测消息。响应该探测消息,该服务器利用上面概述,并示于图6 中的逻辑,发送响应(CORRECT或INCORRECT)。服务器返回的 参数被称为retDepth参数。在客户机收到该响应之后,控制转移到检 查操作708。
在检查操作708,客户机检查服务器是否报以CORRECT消息。 如果是,那么服务器响应包含retDepth参数中的真实深度。因此,客 户机已确定与该关键字相关的真实深度,控制转移到绑定操作710, 把该客户机和正确的服务器绑定在一起,该过程结束。
但是,如果服务器返回INCORRECT消息,那么控制转移到设 置操作712,客户机把搜索范围的最小间隔设置成当前最小值或者加1 的retDepth值中的较大者。这种选择由指定retDepth的INCORRECT 消息意味着与关键字相关的真实深度必须至少为retDepth+1的观察 结果激发。一旦赋予了新的最小间隔值,那么控制转移到检查操作 714。
在检查操作714,客户机随后检查retDepth值是否也小于客户机 的猜测深度(在先前的探测消息中发送)。如果是,那么控制继续进 行设置操作716,客户机还把搜索的最大范围调整为先前的猜测值。 这部分逻辑由下述观察结果激发,即,如果客户机的真实深度确实大 于猜测值,那么分布式系统必须具有深度=猜测深度的组的非活动项 目,因为只有通过拆分已变成非活动项目的较大组,才能形成(具有 较大深度的)较小子组。由于客户机的请求不能发现深度=猜测深度 的非活动项目,因此这意味着真实深度必须小于猜测深度。客户机随 后将在修改后的范围内重复搜索算法。继续该过程,直到客户机能够 获得正确的服务器;具有包括该关键字的活动项目的那个服务器为止。
如上所述,本发明和任意正确设计的Map(.)函数一起工作, 只要Map()函数能够向恰当的服务器解析关键字组(活动或非活动)。 该映射函数可以是集中的(每个请求者必须联系特定的计算节点,以 便确定发送操作706中对应服务器的身份),或者是分布式的(映射 保存在多个节点中)。这种映射函数的一个实施例可以是包含从每个 唯一关键字组到特定服务器的一对一映射的静态表格。
可利用分布式散列表(DHT)实现本发明。DHT实质上是映射 函数的分布式实现。但是,DHT实现已被证明拥有其它有吸引力的功 能,因为它们能够很好地与大量的服务器节点一起缩放,并且能够按 照非常高效的方式,处理相对于该分布式集合的计算节点的动态添加 或清除。对于说明本发明来说,知道所有DHT实现共享下述抽象现 为就足够了。
1.DHT获得输入关键字(所述输入关键字可以和标识符关键字 相同,也可不同于标识符关键字),并首先使用“散列函数”(随机化 技术)计算新的“散列值”。该散列值本身可被表示成M位的二进制数。 各个DHT节点使用信令技术划分所有可能的二进制散列值的整个范 围(M位意味着总共2M个可能散列值)。随后使用散列值把输入关 键字引向目前管理该散列值的服务器。因此,为了把特定的对象映射 到特定服务器,该对象的标识符关键字可被用作DHT架构的输入。 从而,从标识符关键字到特定服务器的映射被表示成如下所示:
标识符关键字k→(散列函数)→散列值v→(DHT映射)→服 务器s
这里标识符关键字k首先由散列函数变换成散列值,散列值随后 被映射到特定服务器。映射成同样散列值的标识符关键字从而被引向 公共服务器。类似地,导致不同散列值的关键字很可能被引向不同的 服务器。
一般来说,常规的DHT算法不允许在不同的时刻,相同的标识 符关键字k被映射成不同的散列值(v)。在本发明的一个实施例中, 通过a)定义产生相同标识符关键字的不同散列值的技术,和b)使用 这种差异散列值产生技术提供分布式环境中的自适应负载分配,按照 新方式利用DHT。
该实施例使用一种形式的编码,用标识符关键字产生“虚拟关键 字”。该虚拟关键字随后被用作散列函数的输入关键字。图8中,表示 了组合工作负荷的基于关键字的表示法,和用于可缩放的高效负载重 定向的分布式散列表(DHT)基元的例证程序。为了举例说明该程序, 利用DHU实现,把长度N=7,深度值d=3的二进制标识符关键字 k=“1010011”映射到底层服务器。
该程序开始于产生操作802,在产生操作802,产生虚拟关键字。 为了产生虚拟关键字k′,服务器获得k的前d位,并用N-d个尾随零 构成最低有效位。例如,在深度=3的情况下,标识符关键字“1010011” 的虚拟关键字由“1010000”给出,在深度=6的情况下,由“1010010”给 出。
一旦产生了虚拟关键字,随后关于虚拟关键字k′调用包括集体划 界为804的步骤的DHT协议,以确定目标服务器s(本实施例假定深 度d的标识符关键字由服务器s管理)。DHT协议804以两步过程的 形式工作。首先,在计算操作806,计算与关键字k′相关的散列值v。 其次,在映射操作808,使用DHT的分布式查寻识别目前负责该散列 值的服务器s。一旦识别了服务器s,那么在交互作用操作810,客户 机能够与该恰当服务器通信。
也可使用类似的程序来识别用于具有指定深度dg的关键字组kg 的目标服务器。关键字组kg的dg个最高有效位被保留,而用尾随零 掩蔽N-dg个最低有效位,从而形成虚拟关键字。例如,关键字组“010*” (dg=3)的虚拟关键字为“0100000”,而关键字组“1101*”(dg=4)的 虚拟关键字为“1101000”。
如上所述,客户机可使用深度和关键字组合来识别探测消息的目 标服务器。当结合DHT使用时,还形成客户机的深度确定过程。客 户机产生对应于猜测深度的虚拟关键字,随后使用DHT识别目标服 务器。类似地,当某一服务器试图确定应保存特定关键字组的服务器 的身份时,它首先形成该关键字组的虚拟关键字,并使用该虚拟关键 字作为DHT的输入,来确定目标服务器。通过采用这种技术,关键 字组将具有和属于该关键字组的任意标识符关键字相同的虚拟关键 字,只要标识符关键字的深度被设置成关键字组的深度。例如,考虑 关键字“1101010”和“1101111”所属于的关键字组“1101*”(深度=4)。 在深度=4的情况下,这两个标识符关键字都产生虚拟关键字 “1101000”,它等同于根据组“1101*”产生的虚拟关键字。因此,如果 该过程把一个关键字组分配给特定的服务器,那么该组的所有标识符 关键字也将被引向相同的服务器,因为关键字组和单个标识符关键字 的分配都是基于共同的虚拟关键字完成的。
使用虚拟关键字和DHT技术实现自适应负载分配技术还有一个 优点。考虑试图把关键字组“1010*”(深度=4)拆分给两个不同服务器 的父服务器。该服务器首先产生两个子组“10100*”和“10101*”,并试 图识别这两个子组的服务器。但是,构成虚拟关键字的过程确保这些 子组之一(通过掩蔽“0”形成的一个子组)具有和父组相同的虚拟关键 字。例如,“1010*”(深度=4)和“10100*”(深度=4)具有相同的虚 拟关键字“1010000”。因此,父服务器将总是把它自己识别成这些子组 之一的目标。因此,虚拟关键字机制允许父服务器实现真正的负载分 流,因为它总是保持一半的初始关键字空间,并把另一半的初始关键 字空间重新分配给另一服务器。
如前所述,本发明允许在选择供拆分的候选关键字组的时候,使 用各种不同的算法。在一个实施例中,服务器始终监视与被管理的每 个关键字组相关的工作负荷。这可通过使用计数器或监视器分别跟踪 这些关键字组中每个关键字组中的应用程序活动来实现。如果服务器 需要分流一些负载,那么它随后将选择贡献最大负载的关键字组(“最 热”的关键字组)。其它可能的选择机制包括选择最大的活动关键字组 (深度最小的关键字组),最小的活动关键字组(深度最大的关键字 组)或者具有最大“归一化”工作负荷(即,除以关键字组的大小的工 作负荷)的关键字组。
服务器不仅可以使用虚拟关键字和深度的概念来分流负载,并将 其分配给另外的服务器,而且还可使用虚拟关键字和深度的概念把来 自许多服务器的负载合并给较小的服务器组。实现这种合并的一种方 法是定期把每个活动关键字组的工作负荷传送给其父组。如图4中所 述,负载拆分操作可被模拟成二进制树,活动关键字组表现为二进制 树的树叶。该树中的每个关键字组与一个服务器相关联。管理树叶关 键字组的服务器能够定期向父服务器,即,管理被拆分前的父关键字 组的服务器,回报观察到的工作负荷。例如在图3中,存在三个树叶 关键字组:“1010*”(深度=4),“10110*”(深度=5)和“10111*”(深 度=5)。管理一个树叶关键字组(例如“10111*”)的服务器将定期向 管理父关键字组(“1011*”)的服务器回报该树叶关键字组的工作负荷。
参见图9,图9表示了根据本发明,合并工作负荷的例证程序。 该程序开始于接收操作902。在该步骤中,父服务器接收来自管理子 关键字组的服务器的工作负荷报告。在收到工作负荷报告之后,控制 转移到估计操作904。
在估计操作904,父服务器估计如果它接受一个或多个子关键字 组的职责,那么它理应承担的额外工作负荷。例如,负责(当前非活 动的)关键字组“1011*”的服务器可使用关于关键字组“10110*”和 “10111*”的负载报告,估计如果它把这些关键字组的深度减回4,那 么总的工作负荷会增大多少。在完成估计操作904之后,控制转移到 判定操作906。
在判定操作906,如果子组和父服务器的工作负载都足够低,那 么根据某一预定策略,父服务器随后可重新开始负责较大的关键字组 (例如“1011*”)。从而,控制转移到激活操作908,使该项目活动。 随后,在指令操作910,指令子服务器关于子组的项目。一旦执行了 指令操作,就结束该过程。但是,如果负载水平过高,以致不能合并, 那么控制转移到操作912,服务器保持当前的分配策略不变。这种负 载合并过程的备选实施例可涉及使用中央实体来确定何时会发生负载 合并,或者使用多个节点之间的信令来同时消除多级子组。
出于举例说明的目的,给出了本发明的前述说明。上述说明不是 穷尽的,也不打算把本发明局限于公开的具体形式,鉴于上述教导, 可做出其它各种修改和变化。为了更好地说明本发明的原理及其实际 应用,从而使本领域的技术人员能够在适合于预期特殊应用的各种实 施例和各种修改中更好地利用本发明,选择并描述了公开的各个实施 例。附加权利要求应被解释成除了现有技术限定的范围之外,还包括 本发明的其它备选实施例。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈