发明内容
本发明力求解决上述问题中的一些。
本发明提供了如独立权利要求中阐述的设备和方法。本发明力求提供以下优势中的至少一些:
· 以低成本实现由服务器组提供的服务的高可用性;
· 对具有适度存储需求的请求调度的快速查找;
· 高设备利用比率;
· 不需要昂贵的存储区域网络(SAN)介质和网络;
· 需要有限的会话复制。
本发明提供了一种方法,包括:接收请求;选择要将所述请求转发至的第一虚拟服务器,其中,所述第一虚拟服务器由多个(物理)服务器之一提供,其中,所述(物理)服务器中的至少一些(通常是全部)包括或提供多个虚拟服务器;以及在所选择的第一虚拟服务器不能够接收到所述请求的情况下,将所述请求转发至所述第一虚拟服务器的相邻虚拟服务器,其中,所述第一虚拟服务器的相邻虚拟服务器是与所述第一虚拟服务器不同的服务器的一部分。因此,第一虚拟服务器的相邻服务器充当用于该服务器的备份。所述方法可以包括:将所述请求转发或试图将所述请求转发至所述第一虚拟服务器。
本发明还提供了一种设备(例如,调度器),包括:用于接收请求的输入;用于将所述请求转发(或试图将所述请求转发)至第一虚拟服务器的输出,其中,所述第一虚拟服务器由多个服务器之一提供,并且其中,所述服务器中的至少一些提供多个虚拟服务器;以及用于选择所述第一虚拟服务器的处理器,其中,在所选择的第一虚拟服务器发生故障(例如,所述第一虚拟服务器形成其一部分的服务器发生故障)的情况下,所述处理器选择所述第一虚拟服务器的相邻(虚拟)服务器,并且所述调度器的输出将所述请求转发至所述相邻服务器,其中,所述第一虚拟服务器的相邻服务器是由与所述第一虚拟服务器不同的服务器提供的虚拟服务器。相邻服务器可以是与第一虚拟服务器同时被选择的(而不是在第一虚拟服务器不可用或不可操作的情况下选择的)。
(物理)服务器的每个虚拟服务器可以具有由不同其他(物理)服务器提供的相邻服务器。因此,如果特定物理服务器变为不可操作,则在多个不同其他服务器之间分发由物理服务器提供的各个虚拟服务器的负载。
在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余服务器的每个虚拟服务器具有由不同其他(物理)服务器提供的相邻服务器。因此,不仅在第一物理服务器变为不可操作的情况下,该服务器的负载得以分发,而且在第二物理服务器也变为不可操作的情况下,在多个不同其他服务器之间分发由第二物理服务器提供的各个虚拟服务器的负载。
可替换地,在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余(物理)服务器的两个虚拟服务器具有由相同其他服务器提供的相邻服务器,并且任何其余虚拟服务器中的每一个具有由不同其他服务器提供的相邻服务器。例如,当以上阐述的前一条件在数学上不可能时,该情形可能发生。
可以将与请求相关联的会话信息发送至所选择的第一虚拟服务器以及该所选择的第一虚拟服务器的相邻服务器。例如,本发明的设备的输出可以将与请求相关联的会话信息提供给所选择的第一虚拟服务器以及所选择的第一虚拟服务器的所选择的邻居。因此,在虚拟服务器不可用,以使得代之以将被指派给该虚拟服务器的任务发送至该虚拟服务器的相邻服务器的情况下,那么该相邻服务器已经可接入与该任务相关联的会话信息。因此,可以容易地将具有与之相关联的上下文的请求重新指派给相邻服务器,而无需全网状复制或者高性能SAN或某种其他存储机制的提供,如上所述。
本发明还提供了一种包括多个虚拟服务器的服务器,其中,所述服务器形成包括多个服务器的***的一部分,其中,所述多个服务器中的至少一些(通常是全部)包括多个虚拟服务器,所述服务器被适配为使得每个虚拟服务器与相邻虚拟服务器相关联,其中,每个虚拟服务器的相邻服务器是不同服务器的一部分,并且其中,虚拟服务器的相邻服务器充当用于该服务器的备份。
可以将在请求中提供给第一虚拟服务器的会话数据拷贝至第一虚拟服务器的相邻虚拟服务器。因此,可以容易地将具有与之相关联的上下文的请求重新指派给相邻服务器,而无需全网状复制或者高性能SAN或某种其他存储机制的提供,如上所述。
在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余服务器的每个虚拟服务器具有由不同其他(物理)服务器提供的相邻服务器。
在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余(物理)服务器的两个虚拟服务器具有由相同其他服务器提供的相邻服务器,并且所述服务器的任何其余虚拟服务器中的每一个具有由不同其他服务器提供的相邻服务。
在本发明的许多形式中,以下条件中的一个或多个适用:
1. 对于任何虚拟服务器/节点(对等端),该虚拟服务器及其邻居(接替者)由不同(物理)服务器提供。
2. 对于相同物理服务器中的任何两个虚拟服务器/节点(对等端),其邻居位于不同其他物理服务器中。
3. 即使在任何一个物理服务器发生故障之后,对于任何虚拟服务器/节点,该节点虚拟服务器及其邻居仍位于不同物理服务器中。
4. 在两个物理服务器损坏的情况下,对于任何虚拟服务器/节点(对等端),该虚拟服务器及其邻居位于由不同物理服务器提供的位置。
本发明又还提供了一种包括多个服务器的***,其中,所述服务器中的至少一些(通常是全部)包括多个虚拟服务器,其中,每个虚拟服务器与相邻服务器相关联,其中,每个虚拟服务器的相邻服务器是不同其他服务器的一部分,并且其中,虚拟服务器的相邻服务器充当用于该服务器的备份。
在本发明的许多形式中,所述服务器中的每一个包括(或提供)多个虚拟服务器。
在本发明的许多形式中,由特定(物理)服务器提供的多个虚拟服务器中的每一个具有由不同其他服务器提供的相邻服务器。因此,在特定物理服务器变为不可操作的情况下,在多个不同其他服务器之间分发由物理服务器提供的各个虚拟服务器的负载。
所述***还可以包括调度器,其中,所述调度器包括:用于接收请求的输入;用于将所述请求转发至第一虚拟服务器的输出;以及用于选择所述第一虚拟服务器的处理器。此外,在所选择的虚拟服务器发生故障(例如,虚拟服务器形成其一部分的服务器发生故障)的情况下,所述处理器可以选择所述第一虚拟服务器的相邻服务器,并且所述调度器的输出可以将所述请求转发至所述相邻服务器。
可以将在请求中提供给第一虚拟服务器的所述会话数据拷贝至所述第一虚拟服务器的相邻虚拟服务器。
在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余服务器的每个虚拟服务器具有由不同其他(物理)服务器提供的相邻服务器。
在本发明的一些形式中,在(物理)服务器不可操作的情况下,其余(物理)服务器的两个虚拟服务器具有由相同其他服务器提供的相邻服务器,并且所述服务器的任何其余虚拟服务器中的每一个具有由不同其他服务器提供的相邻服务器。
本发明又还包括一种计算机程序,包括:用于接收请求的代码(或某其他装置);用于选择要将所述请求转发至的第一虚拟服务器的代码(或某其他装置),其中,所述第一虚拟服务器由多个(物理)服务器之一提供,其中,所述(物理)服务器中的至少一些(通常是全部)包括或提供多个虚拟服务器;以及用于在所选择的第一虚拟服务器不能够接收到所述请求的情况下将所述请求转发至所述第一虚拟服务器的相邻虚拟服务器的代码(或某其他装置),其中,所述第一虚拟服务器的相邻虚拟服务器由与所述第一虚拟服务器不同的服务器提供。所述计算机程序可以是包括计算机可读介质的计算机程序产品,所述计算机可读介质承载了其中实现的与计算机一起使用的计算机程序代码。
具体实施方式
图2是根据本发明的一方面的***的框图,该***总体由参考标记10指示。
***10包括调度器12、第一服务器16、第二服务器17和第三服务器18。第一服务器16包括第一虚拟服务器21和第二虚拟服务器22。第二服务器17包括第一虚拟服务器23和第二虚拟服务器24。第三服务器18包括第一虚拟服务器25和第二虚拟服务器26。
在***10中,调度器12负责接收输入请求并根据某种算法将请求转发至服务器。虚拟服务器21至26被指派有标识(ID)。原理上,虚拟服务器21至26可以实现任何算法;由虚拟服务器21至26实现的算法与本发明不相关。
调度器12将请求转发至服务器21至26,保持每个服务器的负载平衡。调度器应当被设计为使得用于目的地服务器的查找应当简单,以便提供高速请求转发。类似地,应当提供用于在服务器发生故障的情况下选择备份服务器的快速且简单的算法。以下进一步讨论用于在正常目的地服务器发生故障的情况下选择“正常”目的地(虚拟)服务器和备份(虚拟)服务器的算法。最后,调度器12不应当需要太多存储器。
作为示例,可以提供基于散列的查找。在基于散列的查找方法中,当在调度器12处接收到请求时,调度器基于会话的某标识符来计算散列值,该标识符可以是从请求消息获取的,例如客户端的IP地址和端口号、客户端在SIP中的URL、在GTP中的TEID等。由于每个服务器(或虚拟服务器)负责整个值空间中的值的范围,因此调度器将找出哪个服务器的范围覆盖这个所计算出的散列值,并将请求转发至该服务器。
利用合适的散列函数,可以在值空间中获得散列值的均匀分布。因此,可以选择或者甚至调整服务器的值范围,以适合每个服务器的实际处理能力。当测量具有会话号的负载时,通过基于散列值对请求进行调度来实现负载平衡。
对于用于寻找具有给定值的匹配范围的详细查找方法,存在可以使用的许多可用算法,例如线性搜索、二进制搜索、自平衡二进制搜索树等。
另一种可替换搜索方法是:利用会话标识符的散列值作为索引来查找负责的目的地服务器。我们可以将精确的散列值用作索引,并构建较大的表以存储用于每个索引值的对应服务器信息。然而,由于存储需求,该方法一般不是优选的。如果忽略索引值的一些比特,则可以减小索引表的这种大小。例如,我们可以通过仅使用索引中的一些前缀比特来减小该表的大小。
使用散列值的前缀等价于将ID空间分区到小分段中,其中,该索引表中的每个条目表示分段。前缀比特的数目确定了值空间中的对应分段的大小。我们可以将这些分段称为“元分段”。如果每个服务器的范围仅覆盖一个或多个元分段,则具有给定值的覆盖范围的查找的任务可以变为:利用散列值作为索引来查找散列表,以找到覆盖元分段。
详细地,范围的查找由两个步骤构成。第一步骤是:使用会话标识符的散列值作为索引来寻找匹配的元分段。在第二步骤中,寻找与元分段对应的服务器范围。因此,需要另一服务器表存储服务器的信息。索引表中的元分段的每个条目将指向服务器表中的表示覆盖服务器范围的条目。因此,可以使用两个查找表来获得从散列值至某服务器范围的映射。
如上所述,将服务器16、17和18中的每一个划分为多个虚拟服务器。典型地,虚拟服务器中的每一个被提供有标识(ID)。
图3示出了圆(circle)中的虚拟服务器21至26的布置,该布置总体由参考标记20指示。在顶部处开始并绕图3的圆顺时针移动,按以下顺序提供虚拟服务器:
1. 第一服务器16的第一虚拟服务器21。
2. 第二服务器17的第一虚拟服务器23。
3. 第三服务器18的第一虚拟服务器25。
4. 第二服务器17的第二虚拟服务器24。
5. 第一服务器16的第二虚拟服务器22。
6. 第三服务器18的第二虚拟服务器26。
在本发明中,将相邻服务器定义为沿顺时针方向的下一个虚拟服务器。因此,虚拟服务器23是虚拟服务器21的邻居,虚拟服务器25是虚拟服务器23的邻居,虚拟服务器24是虚拟服务器25的邻居,虚拟服务器22是虚拟服务器24的邻居,虚拟服务器26是虚拟服务器22的邻居,并且虚拟服务器21是虚拟服务器26的邻居。
本发明将一个服务器中的会话复制到其下一个相邻服务器。在定义了相邻服务器的情况下,利用特定服务器(或虚拟服务器)对会话的处理可以在第一服务器发生故障的情况下容易地由相邻服务器接管。该故障转移(failover)需要调度器在该故障时段期间将请求转发至恰当的目的地。
当然,可以以其他方式定义相邻服务器。关键点在于:调度器12必须容易确定特定服务器的邻居。
当使用邻居作为备份时,存在过载条件出现的潜在性。如果第一服务器A发生故障,则其所处理的请求将被传送至服务器A的备份服务器,比如服务器B。因此,服务器A的负载将被添加至服务器B的负载。用于保证服务器B未过载的最简单机制是:确保服务器A和B在故障前的正常负载小于这些服务器的全部容量的50%(假定这些服务器的容量类似)。当然,这浪费了大量的容量。对多个虚拟服务器和图3中所示的布置的使用改进了该情形,如下所述。
图4示出了分布在圆中的虚拟服务器21至26的布置,该布置由参考标记20’指示。布置20’与以上参照图3描述的装置20的区别在于服务器16不运行。因此,虚拟服务器21和22(其由物理服务器16提供)不运行,并在布置20’中以点线示出。
根据上述邻居原理,将已对虚拟服务器21进行的请求现在将被路由至虚拟服务器23(绕布置20顺时针移动的下一虚拟服务器)。将已对虚拟服务器22进行的请求现在将被路由至虚拟服务器26(绕布置20顺时针移动的下一虚拟服务器)。该路由由调度器12处理。当然,作为邻居,虚拟服务器23和26将已经分别接收到与服务器21和22相关的上下文数据。
虚拟服务器23是第二服务器17的一部分,并且虚拟服务器26是第三服务器18的一部分。因此,在服务器17和18的虚拟服务器之间分割将已对服务器16的虚拟服务器进行的请求。因此,在该情形中,每个运行的物理备份服务器不会从故障服务器接管太多负载。如果每个物理服务器将其负载保持为约60%,那么当故障服务器的负载被添加至其备份服务器的负载时,总负载为约90%(假定用于服务器的容量和负载类似)。
原理上,可以使用每物理服务器更多虚拟服务器,将故障服务器的负载进一步分发给更多其他物理服务器。因此,可以进一步提高在正常情形中每个服务器的可允许的负载。
当服务器(例如服务器16)发生故障时,调度器12应当快速反应,以将服务器(或该物理服务器的虚拟服务器)的请求转发至其备份邻居服务器。这里,服务器是虚拟服务器,或者可以被视为仅服务器ID。
利用线性范围搜索算法,如果发现请求与现在不可达的特定服务器范围相匹配,则调度器应当仅在线性表中向下移动一个条目,以得到故障服务器的邻居的信息。我们假定按负责范围的升序放置服务器的信息。
利用二进制搜索和索引表搜索算法,服务器的信息可以置于服务器表中,该服务器表的条目依照范围的顺序。查找的结果是指向服务器表中的适当条目的指针。因此,在针对请求的搜索后递增最终指针值应当得到邻居服务器的条目。
当然,其他算法是可能的。
如以上参照图4所述,本发明提供了以下布置:其中,对于任何物理服务器的所有虚拟服务器,备份邻居应当属于不同其他物理服务器。这确保了如果物理服务器发生故障,则在多个备份服务器之间分割由故障物理服务器提供的虚拟服务器的负载。图5示出了其中满足该条件并且还满足另一条件的布置,该布置总体由参考标记30指示。该另一条件是以下需求:当任一个物理服务器发生故障时,对于剩下的任何物理服务器的虚拟服务器,备份邻居还应当属于不同其他物理服务器。
图5中所示的布置30包括第一服务器的第一虚拟服务器31和第二虚拟服务器32、第二服务器的第一虚拟服务器33和第二虚拟服务器34、第三服务器的第一虚拟服务器35和第二虚拟服务器36、第四服务器的第一虚拟服务器37和第二虚拟服务器38、以及第五服务器的第一虚拟服务器39和第二虚拟服务器40。在图5中示出了虚拟服务器31至40,但是为了清楚,省略了提供这些虚拟服务器的物理服务器,如调度器那样。
在顶部处开始并绕图5的圆顺时针移动,按以下顺序布置虚拟服务器31至40。
1. 虚拟服务器31。
2. 虚拟服务器33,使得虚拟服务器33是虚拟服务器31的邻居。
3. 虚拟服务器35,使得虚拟服务器35是虚拟服务器33的邻居。
4. 虚拟服务器37,使得虚拟服务器37是虚拟服务器35的邻居。
5. 虚拟服务器39,使得虚拟服务器39是虚拟服务器37的邻居。
6. 虚拟服务器32,使得虚拟服务器32是虚拟服务器39的邻居。
7. 虚拟服务器38,使得虚拟服务器38是虚拟服务器32的邻居。
8. 虚拟服务器34,使得虚拟服务器34是虚拟服务器38的邻居。
9. 虚拟服务器40,使得虚拟服务器40是虚拟服务器34的邻居。
10. 虚拟服务器36,使得虚拟服务器36是虚拟服务器40的邻居,并且虚拟服务器31是虚拟服务器36的邻居。
对于以上参照图2至4所述的***10,虚拟服务器31至40被布置为使得在提供一些虚拟服务器的物理服务器中的任一个不可操作的情况下,现在不可操作的虚拟服务器中的每一个由不同物理服务器的虚拟服务器备份。
图6示出了总体由参考标记30’指示的布置。布置30’与布置30类似,并且区别仅在于虚拟服务器31和32(以点线示出)不可操作。虚拟服务器31和32均由第一服务器(未示出)提供,并且因此,布置30’示出了其中第一服务器不可操作的情形。
如上所述,在虚拟服务器不可操作的情况下,使用邻居虚拟服务器。因此,将已被转发至虚拟服务器31的请求现在被转发至虚拟服务器33,并且将已被转发至虚拟服务器32的请求现在被转发至虚拟服务器38。虚拟服务器33由第二服务器提供,并且虚拟服务器38由第四服务器提供,并且因此,将现在不可操作的第一服务器的负载分发给两个不同其他服务器。
因此,布置30(与布置10一样)被布置为使得对于任何物理服务器的所有虚拟服务器,备份邻居属于不同其他物理服务器。然而,如上所指示,布置30进一步发展,这是由于当任一个物理服务器发生故障时,对于剩下的任何物理服务器的虚拟服务器,备份邻居还属于不同其他物理服务器。
图7示出了总体由参考标记30’’指示的布置。布置30’’与布置30和30’类似,并且区别仅在于虚拟服务器31、32、35和36(其以点线示出)不可操作。虚拟服务器31和32均由第一服务器(未示出)提供,并且虚拟服务器35和36均由第三服务器(未示出)提供。因此,布置30’’示出了其中第一和第三服务器不可操作的情形。
因此,将已被转发至虚拟服务器35的请求现在被转发至虚拟服务器37,并且将已被转发至虚拟服务器36的请求现在被转发至虚拟服务器33。虚拟服务器37由第四服务器提供,并且虚拟服务器33由第二服务器提供,并且因此,将现在不可操作的第三服务器的负载分发给两个不同其他服务器。
可以概括上述邻居原理,如以下所阐述。
我们假定每个物理服务器具有N个虚拟服务器并且总共存在m个物理服务器。
可以详述上述第一需求(其被布置10和30均满足)如下:
· 对于任何物理服务器的所有N个虚拟服务器,其备份邻居应当属于不同其他m个物理服务器。
可以详述上述第二需求(其被布置30满足,但不被布置10满足)如下:
· 当任一个物理服务器发生故障时,对于其余物理服务器中的任一个的N个虚拟服务器,备份邻居应当属于不同其他m个物理服务器。
有时,在数学上不可能满足第二条件。例如,当N+1=m时,发生故障时涉及物理服务器的最大数目。因此,需要备份处理的请求可以得到所有其他N个活动的物理服务器的帮助。每个物理服务器将仅取得最小量的额外请求。
当无法满足第二条件时,可以重述第二条件如下:
· 当任一个物理服务器发生故障时,对于任何剩下的物理服务器的N个虚拟服务器,其备份邻居应当属于不同其他m-1个物理服务器。因此,存在可与备份邻居共享相同物理服务器的一个物理服务器的两个虚拟服务器。
我们这里在ID空间的圆中列出虚拟服务器部署的一些示例。每个情形满足上述第一和第三需求。描述了每物理服务器具有4、8和16个虚拟服务器的示例。当然,N和m的其他组合的虚拟服务器部署的解决方案将对本领域技术人员来说显而易见。
我们使用数字来表示虚拟服务器,并且数字的值表示物理服务器。数字的行用于表示虚拟服务器在空间圆中的实际放置,这可以被视为沿该圆逐一地顺时针放置数字的行。
当存在5个物理服务器时,我们将其编号为从0至4。由于每个物理服务器具有4个虚拟服务器(使得N+1=m),因此每个值将出现4次。下表示出了满足上述第一和第三需求的一个解决方案。
0 1 2 3 4
0 3 1 4 2
0 4 3 2 1
0 2 4 1 3
例如,如果物理服务器1发生故障,则需要四个虚拟服务器来提供备份。在第一行中,备份虚拟服务器属于物理服务器2。在第二行中,备份虚拟服务器属于物理服务器4。在第三行中,备份虚拟服务器属于物理服务器0。在第四行中,备份虚拟服务器属于物理服务器3。我们可以看到所有四个备份虚拟服务器均属于四个不同物理服务器,如以上第一需求中所述。其他物理服务器的故障仍满足该需求。
此外,在物理服务器1的故障之后,虚拟服务器的部署如下。
0 2 3 4
0 3 4 2
0 4 3 2
0 2 4 3
在该情形中,满足第三需求。例如,对于物理服务器0,其邻居包括2、3和4,其中,存在属于物理服务器2的两个虚拟服务器。
当存在从0至8编号的9个物理服务器时,每个物理服务器具有8个虚拟服务器,这意味着在虚拟服务器部署的表中存在8个行。下表示出了满足第一和第三需求的可能解决方案之一。
0 1 2 3 4 5 6 7 8
0 3 1 5 7 2 4 8 6
0 7 4 1 6 3 8 5 2
0 5 3 7 1 8 2 6 4
0 8 7 6 5 4 3 2 1
0 6 8 4 2 7 5 1 3
0 2 5 8 3 6 1 4 7
0 4 6 2 8 1 7 3 5
例如,当物理服务器1发生故障时,备份邻居在每一行中分别来自物理服务器2、5、6、8、0、3、4和7。
服务器1的故障后的虚拟服务器部署仍满足第三需求,其中,另一物理服务器的另一故障将导致对其他7个活动服务器的几乎均匀的请求分布。
当存在17个物理服务器时,每个物理服务器可以具有16个虚拟服务器。下表示出了虚拟服务器部署的解决方案之一。
例如,当物理服务器1发生故障时,备份邻居在每一行中分别来自物理服务器2、5、6、9、10、13、14、16、0、3、4、7、8、11、12和17。在邻居列表中不存在复制,并且其满足第一需求。
可以通过消除所有行中的任何数字来执行对满足第三需求的验证。
可以以数学方式表达如上所述满足虚拟服务器的布置的需求的问题,如以下详细描述。
可以定义第一问题,其中,存在值从1至m的正整数的集合。对于每个值,存在k个数字,其中,k是正整数。总共存在k×m个数字。这些数字将置于圆中。我们定义特定数字的下一数字沿顺时针,表示为next(a)。需要找出数字在圆中的放置,满足以下需求:
1. 对于该圆中的任何数字a,next(a)≠a。
2. 对于从1至m的任何值x,在集合{b | b=next(a), a=x}中不存在彼此相等的两个数字。
3. 如果从该圆取走任何相同值(从1至m)的k个数字,则该圆中剩下的数字应当仍满足需求1)。
4. 这些数字应当尽可能均匀地置于该圆中,以使该圆中的分段(由这些数字划分)的长度尽可能彼此接近。
5. 当在该圆中添加新的k个数字(具有值m)时,其他数字的位置将不会改变,并且新圆中的数字应当仍满足以上需求。这描述了以下情形:存在m个物理服务器,并且每个物理服务器具有k个对等端ID。
需求1)意味着:对于任何虚拟节点(对等端),其与其第一接替者(对等端)位于不同物理服务器中。
需求2)意味着:对于相同物理服务器中的任何两个虚拟节点(对等端),其第一接替者位于不同其他物理服务器中。
需求3)意味着:即使在任一个物理服务器发生故障之后,对于任何虚拟节点(对等端),其与其第一接替者仍位于不同物理服务器中。
需求4)将要将对等端的负责的空间分段保持为在分段长度方面较不多样。
需求5)要求在将其他对等端的位置保持不移动的同时支持添加新物理服务器。
还可以定义与其中存在从1至m的m个整数值并且对于每个值,存在k个数字的第一问题类似的第二问题。这些数字在圆中的部署将满足以下需求:
1. 满足问题1的所有需求1)、2)、3)、4)和5)。
2. 对于从1至
m的任何值x、y,定义X = {b | b=next(a), a=x}和Y = {b | b=next(a), a=y},如果y∈X,则x
Y。
3. 在移除k个相同值数字之后,如果移除了具有相同值的另一组k个数字,则该圆中剩下的数字仍应当满足需求1)。
注意,需求7)排除了以下这种情况:物理服务器A备份物理服务器B的数据的一部分,而物理服务器B备份物理服务器A的数据的一部分。还要注意,需求8)保证:即使2个物理服务器损坏,对于任何虚拟节点(对等端),其与其第一接替者位于不同物理服务器中。
当一个物理服务器损坏时,对于问题1和2,其工作负载可以被均匀分发给其他k(k<m)个物理服务器。尤其对于问题1,当k=m-1时,可以达到严格的故障转移中负载平衡(LBIF),即,故障服务器的所有工作负载将被均匀分发给所有其他服务器,那么,不同物理服务器之间的负载比是(k+1) : (k+1);对于其他情况,不同物理服务器之间的最大负载比是(k+1) : k。
当两个或更多个物理服务器损坏时,其还可以保持超优化的负载平衡,并且根据k值和问题1或2,不同物理服务器之间的最大负载比是(k+3) : (k+2)、或(k+3) : (k+1)、或(k+3) : k,尤其对于问题1,当k=m-1时,最大负载比是(k+3) : (k+2)。
现在描述故障转移中负载平衡的虚拟节点ID分配(VNIAL)算法。首先,我们将描述用于针对特殊情况(即,m是质数)将数字置于圆中的方法,其次,我们将针对一般情况(即,不论m是质数还是合数)对圆进行扩展,那么我们引入该方法以在该圆中添加新数字。
定义:对于给定的自然数m,当且仅当以下情况出现时,自然数α和β是共轭的:
1)α和m互质;以及
2)β和m互质;以及
3)α+β≡ m(mod m)。
对于其中m是质数的特殊情况,解决第一问题如下。
从问题1的描述我们可以容易地发现,m>k。因此,以下讨论在m>k的假设下进行。根据初等数论,每个质数(>4)具有一个或多个原根。我们假定r是m的原根,并定义一系列行向量如下:
由于r是m的原根,因此仅存在m-1个不同的行向量,对于任何i = 1,2,3,…,m-1,,并且,x 1,i ,x 2,i ,…,x m-1,i 是数1,2,…m-1的全排列。这意味着k的最大值是m-1,我们首先考虑k = m-1。
可以证明,这种放置,沿圆顺序地放置X i (i = 1,2,3,…,m-1),可以满足问题1的需求,除了添加新数的需求之外。在其他部分中将讨论添加新数的算法。
事实上,我们可以定义一系列行向量
其中,
,
i = 1,2,…,
m-1,
j = 1,2,…,
m。
结论:可以证明:
3)为了满足问题1的需求,
后(顺时针)可以紧跟除
外的任何其他向量;
4)存在用于放置这些向量的不同方法,其可以满足问题1的需求,例如,
5)从每个共轭对
和
,仅选择一个,那么其还可以满足问题1的附加需求7),例如
。
可以解决第二问题如下。当
m是质数时,
r是
m的原根。我们生成
m-1个不同行向量
X i (
i= 1,2,3,…,
m-1),如部分0中所述。由于任何两个值可以变为邻居仅一次,因此我们可以获得
。令
,我们可以从以上
m-1个向量中选择
t个向量,并根据特定顺序沿圆放置这些向量。
结论:可以证明:
1)如果2和m-2都不是m的原根,则沿该圆顺序地放置以下t个向量可以满足问题2的需求
这里,每个数是在MOD运算的意义上的,这意味着它们处于[1, m]的范围内。
2)如果2或m-2是m的原根(m>7),则使用该原根来生成向量X i ,如上所述,基于奇偶性沿该圆放置t个向量如下可以满足问题2的需求
3)当m=7时,沿该圆放置可以满足问题2的需求。
注意,m =5太小,并且在k > 1的情况下无法满足问题2的需求。
不论m是否是质数,都可以解决第一问题如下。对于任何
m,从1至
m的与
m互质的所有数是
(
)。可以证明,
和
共轭。然后,我们有
个行向量
结论:可以证明:
1)对于任何向量
V i ,存在一个且仅一个向量
V j (即,
),其不能是
V i 沿该圆的下一个向量(顺时针);
4)如果
m是质数,则
,
,其中
i = 1,2,…,
m-1。
可以解决第二问题如下。仍在以上向量集合
内,可以证明,存在
个向量,并且其具有某特定顺序的放置可以满足问题2的需求。从该向量集合中选择向量的方法依赖于
m的奇偶性。
在每个共轭对
α i 和
m-
α i 中,我们仅选择其中之一。这样,
α i 中总共存在
个数。我们可以使用所选择的
α i 来生成
个向量。
现在我们将分别讨论如何形成向量的恰当放置。
· m是偶数
可以证明,针对问题2允许沿该圆(顺时针)的
个向量的任何顺序。
· m是奇数
可以证明,当
时,存在满足问题2的需求的
个向量的序列。然而,我们未找到用于算出向量序列的具体方法。可以通过基于原(primitive)
m情形添加数字来获得向量的可行放置,这将在下一部分中讨论。
当解决了沿该圆放置数字以满足第一和第二问题的基本需求的问题时,下一目标是:通过在不破坏对数字的邻居的限制的情况下在所安置的圆中添加新数字来扩大***的规模。由于存在用于在m是质数时布置这些数字的完美解决方案,因此我们可以从这种情况(m是质数)开始。如果存在用于添加新数字的方法,则可以通过从更小但质数m情况添加数字来解决非质数m的任何其他情况。
在进一步讨论之前,我们从V i (i = 1,2,3,…,m-1)生成(m-1)×m矩阵如下,并将其称为基本生成矩阵。
并且定义(m-1)×m矩阵
我们定义(m-1)×m矩阵级数如下
其中,
是(
m-1)维列向量,并且
。这里,我们可以发现
。实际上,
A j 是与
V等价的矩阵,除每个元素被添加有(
j–1)
m之外。
我们定义Bj是根据该部分中的算法、从的合并生成的(m-1)×(m*2 j )矩阵(被称为生成矩阵),以及
算法描述——从m+1至2m***数字:
由于A1 = V,因此添加从m+1至2m(m是质数)的新数可以被视为合并矩阵A1和A2。该方案如下:
结论:可以证明:
1)B
1(或者
、或者
)的所有行向量的特定放置可以满足问题1的需求,并且
t个行向量(例如,行1,2,…,
t)的特定放置可以满足问题2的需求;
2)在移除矩阵B1的从m+1至2m的任何数之后,残留矩阵的所有行向量的特定放置可以满足问题1的需求,并且残留矩阵的t个行向量的特定放置可以满足问题2的需求;
3)对于给定的k,我们可以在移除从m+1至2m的任何数之后从B1或残留矩阵中选择k个行,并利用以上针对问题1和问题2所述的类似方法来放置这些行。
***从2m+1至4m的数:
添加从2
m+1至4
m(
m是质数)的新数可以被视为合并矩阵
和A
3以及合并矩阵
和A
4,其遵循如上所述的类似方案:
· 当合并
和A
3时,在
(或B
1)的两个列
和
之间***A
3的
,其中
结论:可以证明:
1)B
2、
、
、
和
的所有行向量的特定放置可以满足问题1和问题2的需求。
2)在移除矩阵B2的从2m+1至4m的任何数之后,残留矩阵的所有行向量的特定放置可以满足问题1的需求,t个行向量(例如,行1,2,…,t)的特定放置可以满足问题2的需求。
3)对于给定的k,我们可以在移除从2m+1至4m的任何数之后从B2或残留矩阵中选择k个行,并利用以上针对问题1和问题2的类似方法来放置这些行。
其可以被视为合并
和
,其中
i = 1,2,3,…2
n 。其遵循如上所述的类似方案:
·在两个列
和
之间***
中的
,其中
和
是矩阵
(或B
n )中的邻居,并且
·将保持在矩阵B n+1的末尾处。
1)B
n+1、
、
、……、
的所有行向量的特定放置可以满足问题1和问题2的需求,甚至更严格的需求。
2)在从矩阵B
n+1中移除从
至
的任何数之后,残留矩阵的所有行向量的特定放置可以满足问题1和问题2的需求。
3)对于给定的
k,我们可以在移除从
至
的任何数之后从B
n+1或残留矩阵中选择
k个行,并利用以上针对问题1和问题2所述的类似方法来放置这些行。
实际上,可以证明,当
时,如果我们已经得到数0,1,…,
m的有效矩阵,则可以通过启发式搜索将数
m+1的新的
k个拷贝***到该矩阵中。换言之,针对每个行向量中的新数
m+1存在至少一个有效位置,新数的位置可以是通过搜索而非计算来找到的。因此,启发式搜索是
时的另一种方案。
描述用于构建非质数或大质数M的生成矩阵的具体步骤如下:
·步骤1:寻找质数m,其中m <= M;
·步骤2:生成基本生成矩阵;
·步骤3:如部分0中所述那样扩充矩阵;
·步骤4:在生成矩阵中移除值>=M的元素。
参照其中多个物理服务器中的每一个中的虚拟服务器的数目相同的实施例,总体描述了本发明。这对本发明的所有实施例来说不是必需的。
参照计算机服务器集群,描述了本发明。然而,本发明的原理可以更宽泛地适用于对等网络。特别地,本发明可以适用在结构对等覆盖层(overlay)中,其中,所有资源和对等端具有在一个公共散列ID空间中分配的标识符,每个对等端负责该空间的一个区域并掌管该区域中覆盖的资源。在一维DHT(例如,弦)中,通常将ID空间划分为线性分段,并且每个对等端负责一个分段;在d维DHT(例如,CAN)中,将d维空间划分为d维区域。针对特定资源的请求通过覆盖层路由至掌管该覆盖层中的该资源的目的地对等端。
如果任何对等端发生故障并出于一些原因从覆盖层离开,其负责的区域以及该区域中覆盖的资源将由其第一有效接替者(对等端)接管,则以其为目的地的所有请求将被路由至该接替者并由该接替者处理,并且其工作负载将被转移至该接替者。由覆盖层提供的该高可用性特征可以被视为***级HA。
上述本发明实施例是示意性的而非限制性的。对本领域技术人员来说将显而易见,在不脱离本发明的总体范围的前提下,上述设备和方法可以并入多种修改。意在将所有这些修改包括在本发明的范围内,只要这些修改落入所附权利要求的范围内即可。