利用连接操作进行网络负载平衡转让专利

申请号 : CN200410063249.3

文献号 : CN1607781B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : A·贝德格辛S·B·豪斯A·海德J·M·周S·N·堪尼亚R·V·韦尔兰德

申请人 : 微软公司

摘要 :

在示例设备实现中,一种设备,包括:连接转移器,其配置用来从所述的设备转移连接;所述连接转移器能够在协议堆栈促成对连接的连接状态的编译;所述连接转移器适配于来将所编译的协议状态和所述连接的数据聚集成聚集的连接状态。所述连接转移器进一步能够使所述聚集连接状态被发向目标设备。在示例介质实现中,处理器可执行指令使设备执行操作,包括:从分组获取源/目的对的至少一部分;用所述源/目的对的至少一部分访问封装映射表来定位封装映射条目;从所述封装映射条目中提取流标识符;和用所述的流标识符代替部分所述分组的来产生封装分组。

权利要求 :

1.一种用于连接转移的方法,所述方法包括:

响应于接收来自客户端的连接请求,在负载平衡单元(106)接受与客户端(102(1),

102(2)…102(m))的连接,其中所述接受动作包括响应于连接请求分组,发送确认分组到所述客户端;

在所述负载平衡单元从所述负载平衡单元的网络堆栈聚集所接受的与所述客户端的连接的连接状态,其中与所述客户端的连接为正在被转移到主机(108(1),108(2)…108(n))的连接;

从所述负载平衡单元发送所述与客户端的连接的所述连接状态到所述主机(108(1),

108(2)…108(n)),包括:通过将对应于所述连接的流标识符(3814)与所述连接状态绑定来产生二进制块(3422),以及从起始设备以可靠的方式发送所述二进制块到所述主机(108(1),108(2)…108(n)),以使所述二进制块即使在包含所述二进制块的一个或多个分组丢失或破坏时也可以被所述主机完整地接收;

在所述主机接收来自所述负载平衡单元的所述与客户端的连接的所述连接状态;

将所述与客户端的连接的所述连接状态(3502)注入到所述主机的协议堆栈中,其中在所述主机上的应用不知晓所述连接是被转移的连接;以及使用被注入到所述主机的所述协议堆栈的所述连接状态在所述主机上继续所述与客户端的连接。

2.如权利要求1所述的方法,所述方法进一步包括:在所述负载平衡单元(106)接收与所述客户端的连接的数据;

其中聚集操作包括以下操作:

从所述网络堆栈和所述数据的协议状态中聚集所述连接状态。

3.如权利要求1所述的方法,其特征在于聚集操作包括以下操作:从所述网络堆栈中编译协议状态。

4.如权利要求3所述的方法,其特征在于编译操作包括以下操作:从在所述网络堆栈的最高级别开始的网络堆栈中编译所述协议状态。

5.如权利要求3所述的方法,其特征在于,编译操作包括以下操作:从所述网络堆栈中的传输控制协议TCP堆栈部分和网际协议IP堆栈部分编译所述协议状态。

6.如权利要求1所述的方法,其特征在于:

其中所述起始设备是所述负载平衡单元(106)构成部分。

7.如权利要求1所述的方法,所述方法进一步包括:响应于连接指针为所述连接选择流标识符(3814);和在所述主机(108(1),108(2)…108(n))从起始设备接收流标识符到TCP/IP4字节组的映射,其中所述起始设备是所述负载平衡单元(106)构成部分。

8.如权利要求1所述的方法,

所述方法进一步包括:

通过使用流标识符(3814)转发所述连接的后续分组到所述主机以封装所述的后续分组。

9.如权利要求1所述的方法,其特征在于:

接收操作包括以下操作:

接收所述连接状态,所述连接状态具有该连接的协议状态和数据。

10.如权利要求1所述的方法,其特征在于注入操作包括以下操作:将所述的协议状态注入到开始在所述网络堆栈的最高级别的网络堆栈中。

11.如权利要求1所述的方法,其特征在于注入操作包括以下操作:将所述协议状态注入到所述网络堆栈中的传输控制协议TCP堆栈部分和网际协议IP堆栈部分。

12.如权利要求6所述的方法,其特征在于接收操作包括以下操作:在所述主机(108(1),108(2)…108(n))中接收来自于负载平衡单元(106)的二进制块(3422);和在所述网络堆栈的级别解绑定所述连接状态和所述流标识符(3814),所述网络堆栈的级别在所述网络堆栈的协议堆栈部分的级别之下。

13.如权利要求1所述的方法,所述方法包括:

在所述主机接收封装映射;和

在可根据所述主机的流标识符(3814)访问的封装映射表(3806,3810)中存储所接收到的封装映射。

14.如权利要求1所述的方法,所述方法进一步包括:从所述负载平衡单元接收具有流标识符(3814)的封装分组;和用将所述流标识符(3814)链接到源/目的地址信息对的封装映射条目(3086(1),3810(1))来解封装所述封装分组。

15.一种负载平衡单元(106),包括:

连接转移器(310),其被配置用来从所述负载平衡单元转移连接;所述连接转移器能够通过网络堆栈促成对连接的协议状态的编译;所述连接转移器适配于将所编译的协议状态和所述连接的数据聚集成所述连接的聚集连接状态;所述的连接转移器进一步能够使得所述聚集连接状态被发向主机(108(1),108(2)…108(n)),以及分类器(304),它能够接受所述连接,所述分类器适配于发出转移连接命令到所述连接转移器(310);

其中所述聚集连接状态的所述所编译的协议状态被注入到所述主机上的网络堆栈的协议堆栈部分,其中所述主机上的应用不知晓所述连接是被转移的连接;

其中使得所述聚集连接状态被发向主机进一步包括通过将对应于所述连接的流标识符(3814)与所述聚集连接状态绑定来产生二进制块(3422),并且以可靠的方式发送所述二进制块到所述主机(108(1),108(2)…108(n)),以使所述二进制块即使在包含所述二进制块的一个或多个分组丢失或破坏时也可以被所述主机完整地接收。

16.如权利要求15所述的负载平衡单元(106),其特征在于所述连接转移器(310)至少部分用软件来实现。

17.如权利要求15所述的负载平衡单元(106),其特征在于与所编译的协议状态聚集成所述聚集连接状态的数据包括已由所述分类器(304)确认的数据。

18.如权利要求15所述的负载平衡单元(106),其特征在于所述连接转移器(310)包括:转移器衬垫(3412),其置于所述负载平衡单元(106)的网络堆栈中的协议堆栈(3404)之上;和转移器中间驱动器(3414),其置于所述负载平衡单元(106)的所述网络堆栈中的协议堆栈(3404)之下。

19.如权利要求18所述的负载平衡单元(106),其特征在于所述转移器中间驱动器(3414)被置于所述负载平衡单元(106)的所述网络堆栈的硬件协议接口层。

20.如权利要求18所述的负载平衡单元(106),其特征在于:所述转移器衬垫(3412)适配于接收转移连接命令和传输所述转移命令到所述协议堆栈(3404);和所述转移器中间驱动器(3414)适配于转换所述连接的数据拷贝以用于随后与所编译的协议状态的聚集。

21.如权利要求18所述的负载平衡单元(106),其特征在于所述转移器中间驱动器(3414)适配于将聚集的连接状态和所述连接的流标识符(3814)绑定成二进制块(3422)。

22.如权利要求15所述的负载平衡单元(106),其特征在于所述连接包括传输控制协议/网际协议TCP/IP连接,并且所编译的协议状态包括与TCP/IP连接相关的信息。

23.如权利要求15所述的负载平衡单元(106),其特征在于所述负载平衡单元(106)进一步包括:协议堆栈,所述协议堆栈适配于响应于转移连接命令将所述连接的协议状态编译成编译的协议状态。

24.一种用来进行连接操作的装置,包括:

转移装置,用来通过将正在转移的连接的连接状态从起始设备传输到目标设备,来从所述的起始设备向所述的目标设备转移所述连接,其中所述转移装置包括注入装置,用来将正被转移的连接的连接状态的协议状态部分注入到网络堆栈的协议堆栈部分,其中在所述目标设备的协议堆栈级别之上的应用不知晓所述连接是被转移的连接;和穿越装置,用来将被转移连接的分组以一种封装的格式从所述起始设备穿越到所述目标设备;

其中从所述起始设备向所述目标设备转移所述连接进一步包括:通过将对应于所述连接的流标识符与所述连接状态绑定来产生二进制块,以及从起始设备以可靠的方式发送所述二进制块到所述目标设备,以使所述二进制块即使在包含所述二进制块的一个或多个分组丢失或破坏时也可以被所述目标设备完整地接收。

25.如权利要求24所述的装置,其特征在于所述转移装置包括:聚集装置,用来为从一个协议状态和从正在被转移的连接确认的数据中聚集所述连接状态。

26.如权利要求25所述的装置,其特征在于所述聚集装置包括:编译装置,用来编译来自于协议堆栈的协议状态。

27.如权利要求24所述的装置,其特征在于所述穿越装置包括:封装装置,用来使用代替所述分组的源/目的地址信息对的至少一部分的流标识符来封装被转移连接的所述分组。

28.如权利要求24所述的装置,其特征在于所述穿越装置包括:映射装置,用来映射各个源/目的地址信息对到各个流标识符,各个源/目的地址信息对识别各自的转移连接。

29.如权利要求24所述的装置,其特征在于所述转移装置包括:驱动器装置,用来将所述连接状态与用来封装正被转移连接的分组的流标识符绑定。

30.如权利要求24所述的装置,其特征在于所述穿越装置包括:解封装装置,用来使用链接到所述分组的源/目的地址信息对的至少一部分的流标识符来解封装所述转移连接的穿越分组。

31.如权利要求24所述的装置,其特征在于所述穿越装置包括:映射装置,用来映射各个标识符到各个源/目的地址信息对,各个源/目的地址信息对识别各自的转移连接。

32.如权利要求24所述的装置,其特征在于所述转移装置包括:驱动器装置,用来将所述转移连接的穿越分组转换成封装格式并将它们传送所述穿越装置。

33.如权利要求24所述的装置,其特征在于所述装置包括至少一个设备。

34.如权利要求24所述的装置,其特征在于所述装置包括一个或多个处理器可存取介质。

说明书 :

利用连接操作进行网络负载平衡

[0001] 相关专利申请
[0002] 该美国非临时专利申请是(i)共同待决的美国非临时专利申请第10/610506号(2003年6月30日提交的)的部分继续申请,(ii)共同待决的美国非临时专利申请第10/610519号(2003年6月30日提交的)的部分继续申请,和(iii)共同待决的美国非临时专利申请第10/610321号(2003年6月30日提交的)的部分继续申请。
[0003] 具体来说,该美国非临时专利申请是2003年6月30日提交的、题为“FlexibleNetwork Load Balancing”的共同待决的美国非临时专利申请第10/610506号的部分继续申请,并通过引用整体结合于此。
[0004] 具体来说,该美国非临时专利申请也是2003年6月30日提交的、题为“NetworkLoad Balancing with Host Status Information”的共同待决的美国非临时专利申请第10/610519号的部分继续申请,并通过引用整体结合于此。
[0005] 具体来说,该美国非临时专利申请也是2003年6月30日提交的、题为“NetworkLoad Balancing with Session Informatin”的共同待决的美国非临时专利申请第10/610321号的部分继续申请,并通过引用整体结合于此。

技术领域

[0006] 本发明一般涉及网络负载平衡,作为例子但非限制,本发明尤其涉及利用连接操作来进行网络负载平衡,例如利用穿越的连接转移和/或结合应用级负载平衡的连接转移。

背景技术

[0007] 通信以及涉及通信的生活的许多方面已经大大地受到因特网的影响。因特网能够使信息在两个人和/或实体之间的通信变得快速并相对容易。因特网包括许多连在一起的网络节点,使得信息可以在它们之间进行传输。一些网络节点可以是将分组从一条链路传播到另一条链路的路由器,可以是个人客户端计算机,可以是针对不同实体的个人网络(例如,企业内部互连网),等等。
[0008] 就个人网络以及其它的网络而言,到达一个或多个因特网节点的分组被分布到该个人网络的其它节点中。例如,这样一个个人网络可以通过一组服务器来构成,每一个服务器可以针对到达该个人网络的分组。企业、大学、政府办公室等可以在其个人网络中以短时间帧来接收许多的分组。为了及时地进行响应并减少到达分组拒收或丢失的可能性,个人网络可以依靠多个服务器,其中每个服务器同时针对所到达的分组。
[0009] 到达的分组常常是与某些信息有关的查询,例如文档、目录项、网页等。到达的分组也可以与顾客和商人之间的电子交易有关。对于基于分组的通信中的分组,其它的目的也是可能的。不管怎样,到达的分组被分布到服务器组的不同服务器中以适应分组的快速到达和/或复杂的信息交换。
[0010] 在服务器组的不同服务器之间对到达分组的分布经常被称之为网络负载平衡。换句话说,当节点构成个人网络和/或当它们将个人网络连接到因特网时,可以在分组到达因特网节点时对其进行负载平衡操作。
[0011] 这样的负载平衡操作是通过使用在节点面向个人网络的专用硬件完成的,这些节点将该个人网络连接到因特网和/或为该个人网络在因特网上提供展示。进行负载平衡操作的物理硬件通常整体上是重复的,以此来实现冗余配置并提高负载平衡操作的可靠性。为了提高使用负载平衡操作的性能,需要整体复制先前负载平衡硬件及其操作性能的更强大的硬件来代替先前的负载平衡硬件。因此将这种按比例提高该负载平衡操作性能限于通过其替代来增加硬件的能力。
[0012] 为了实现负载平衡操作,硬件通常对到达的连接请求执行循环分配。换句话说,到达的连接请求被线性地分配到服务器组的服务器,对于单个连接请求以同样方式被分配到每一个服务器。这种连接的循环负载平衡分布被典型地使用,而不考虑个人网络的的条件或到达连接请求的特性。如果负载平衡操作确实超出了循环分布,则进在以下层面上考虑这些其它的因素,即根据网络业务量和/或个人网络的拥塞等级来对它们进行推测。
[0013] 因此,需要一种方法和/或技术来改进网络负载平衡和/或与其相关的选项。

发明内容

[0014] 在第一示例设备实现中,设备包括:连接转移器,其配置用来从所述设备转移连接;所述连接转移器能够在协议堆栈上为连接促成协议状态的编译;所述连接转移器适配于将所述编译的协议状态和所述连接的数据聚集成所述连接的聚集连接状态;所述的连接转移器进一步能够使所述聚集连接状态被发送到目标设备。
[0015] 在第一示例介质实现中,一个或多个处理器可存取介质,包括处理器可执行指令,当被执行时,指示设备执行操作,包括:接收连接的连接状态;将所述连接的连接状态注入到网络堆栈中;和使用所注入的连接状态来继续所述连接。
[0016] 在第二示例介质实现中,一个或多个处理器可存取介质,包括处理器可执行指令,当被执行时,指示设备执行操作,包括:从呼入分组中获得源/目的对的至少一部分;用所获得的源/目的对至少一部分访问封装映射表以对封装映射条目进行定位;从所定位的封装条目中提取流标识符;和用所提取的流标识符代替部分呼入分组来产生封装的分组。
[0017] 在第二示例设备实现中,设备包括:穿越器,其配置用来将分组穿越到所述设备;所述穿越器可访问封装映射表,所述封装映射表包括多个封装映射条目,每个封装映射条目将流标识符链接到源/目的对的至少一部分;所述穿越器适配于用接受具有特定流标识符的封装分组;所述穿越器适配于用特定流标识符来在特定封装映射条目查找特定源/目的对;其中所述穿越器进一步适配于通过用至少部分所述特定源/目的对代替所述特定流标识符来解封装所封装的分组。
[0018] 将在此描述其它的方法、系统、途径、装置、应用程序接口(API)、设备、介质、过程、配置等实现。

附图说明

[0019] 同样的数字在全部的附图中用来指代相同和/或相应的方面,特征,和部分。
[0020] 图1是图示说明负载平衡基础结构和多个主机的示例网络负载平衡范例。
[0021] 图2是图示说明多个负载平衡单元和多个主机的示例网络负载平衡范例。
[0022] 图3展示了具有分离功能的示例负载平衡单元和示例主机。
[0023] 图4展示了具有分离的分类和传递功能的示例网络负载平衡基础结构。
[0024] 图5是示出用来将网络负载平衡基础结构扩展成不同配置的示例方法的流程图。
[0025] 图6以设备的角度展示了第一示例网络负载平衡基础结构配置。
[0026] 图7以设备的角度展示了第二示例网络负载平衡基础结构配置。
[0027] 图8A和8B以部件的角度展示了第一和第二示例网络负载平衡基础结构配置。
[0028] 图9A和9B以资源的角度展示了第一和第二示例网络负载平衡基础结构配置。
[0029] 图10展示了包含主机状态信息的示例网络负载平衡方法。
[0030] 图11展示了涉及主机状态信息的用于进行网络负载平衡的示例方法的流程图。
[0031] 图12展示了包括健康和负载信息的示例网络负载平衡方法。
[0032] 图13A是在图12中展示的示例健康和负载表。
[0033] 图13B是在图12中展示的示例联合健康和负载高速缓冲存储器。
[0034] 图14是展示了包括健康和负载信息来进行网络负载平衡的示例方法的流程图。
[0035] 图15展示了用来在图12所展示的所述主机和负载平衡单元之间进行通信的示例消息协议。
[0036] 图16展示了用来在图12所展示的所述的主机和负载平衡单元之间进行通信的示例消息传输方法。
[0037] 图17A和17B分别展示了对于图13A的健康和负载表以及图13B的联合健康和负载高速缓冲存储器的示例健康和负载信息代理存储器的情形。
[0038] 图18展示了利用健康和负载信息的示例目标主机分配过程。
[0039] 图19展示了包括会话信息的示例网络负载平衡方法。
[0040] 图20展示了包括使用通知和消息进行通信的会话信息的典型网络负载平衡方法。
[0041] 图21展示了一个包括使用通知和消息传送会话信息来进行网络负载平衡的示例方法的流程图。
[0042] 图22展示了在多负载平衡单元管理会话信息的示例方法。
[0043] 图23A是在图20中所示的示例会话表。
[0044] 图23B是在图22中所示的示例分布式原子管理器(DAM)表(DAMT)。
[0045] 图24展示了在多负载平衡单元中用来管理会话信息的示例方法的流程图。
[0046] 图25展示了具有请求路由功能的示例网络负载平衡基础结构。
[0047] 图26展示了用来对于(i)会话信息和(ii)健康和负载信息来路由引入的分组的示例方法的流程图。
[0048] 图27展示了在没有失败时的示例业务路由流程。
[0049] 图28展示了在出现失败时的示例业务路由流程。
[0050] 图29展示了来保证网络负载平衡基础结构的高可靠性的附加示例故障排除过程。
[0051] 图30展示了业务路由与健康和负载信息交互作用的示例操作实现。
[0052] 图31展示了网络负载平衡基础结构的示例高可靠性机制。
[0053] 图32展示了用连接转移方式进行应用级网络负载平衡的示例方法。
[0054] 图33展示了从第一设备到第二设备转移连接的示例方法的流程图。
[0055] 图34从起始设备的角度来展示示例连接转移的方法。
[0056] 图35从目标设备的角度来展示示例连接转移的方法。
[0057] 图36展示了用卸载程序来进行连接转移的示例方法。
[0058] 图37展示了用加载程序来进行连接转移的示例方法。
[0059] 图38展示了在传输装置和主机之间进行分组穿越的示例方法。
[0060] 图39展示了在第一设备和第二设备之间进行分组穿越的示例方法的流程图。
[0061] 图40展示了示例计算(或一般的设备)操作环境,其能够(整体或部分)地实现这里所描述的网络负载平衡的至少一个方面。

具体实施方式

[0062] 示例网络负载平衡范例
[0063] 本部分描述了网络负载平衡的示例范例,并用于提供下面部分的描述的基础,环境,上下关系等。本部分主要参考图1-3。
[0064] 图1是一示例网络负载平衡范例100,其展示了负载平衡基础结构106和多个主机108。示例的网络负载平衡范例100包括多个客户端102(1),102(2)...102(m)和多个主机
108(1),108(2)...108(n)以及网络104和负载平衡基础结构106。
[0065] 每一个客户端102可以是能够进行网络通信的任何设备,例如计算机,移动台,娱乐装置,另一个网络等等。客户端102也可以是与操作客户端设备的人和/或实体有关。换句话说,客户端102包括是用户和/或机器的逻辑客户端。网络104可以由一个或多个网络来构成,例如因特网,企业内部网,有线或无线电话网络,等等。客户端102的其它的示例设备和网络104的网络类型/拓扑将参考图40题为“计算机或其它设备的示例操作环境”的部分描述。
[0066] 单个的客户端102能够跨过网络104通过网络负载平衡基础结构106与一个或多个主机108进行通信,反之亦然。主机108拥有一个或多个用来和客户端102进行交互/通信的应用,以供客户端102使用,等等。每个主机108可以对应于服务器和/或设备,多个服务器和/或多个设备,部分服务器和/或部分设备,及它们的一些组合,等等。对于主机108的特殊实现方式将在下面根据不同的网络负载平衡情况进一步描述。(然而,为了清楚起见,一般不示出主机108的后端支持。)而且,对于主机108设备的其它例子也将参考图40题为“计算机或其它设备的示例操作环境”的部分描述。
[0067] 负载平衡基础结构106可以通过网络104在一个或多个虚拟的网际协议(IP)地址是可达到和可定位的。在那里,从客户端102(或其它节点)接收指向到负载平衡基础结构106的虚拟IP地址的通信,并被传输到主机108。负载平衡基础结构106由硬件和/或软件部件组成(图1中没有明确描述)。
[0068] 尽管负载平衡基础结构106是作为完整的椭圆来表示的,但是完成负载平衡操作的该结构也可以被分布到示例网络负载平衡范例100的其它部分。例如,正如下面所进一步描述的那样,负载平衡基础结构106的软件部分可以被放置在一个或多个主机108上。有关负载平衡基础结构106的体系结构实例将参考图40在题为“计算机或其它设备的示例操作环境”的部分中进行描述。
[0069] 正如(1)所指示的那样,一个或多个主机108可以从主机108提供主机状态信息到负载平衡基础结构106。该主机状态信息可以是特定于应用。这样的主机状态信息的例子将在下面进一步描述,并包括对于主机108的健康和/或负载信息,会话信息,等等。包括从主机108提供健康和/或负载信息到负载平衡基础结构106的特定实现将在下面题目为“示例健康和负载处理”的部分中进行描述。
[0070] 在(2),将请求从客户端102(1)通过网络104发送到在负载平衡基础结构106的虚拟IP地址上。来自客户端102的请求的内容,格式等,依赖于该请求所指向的应用,并且,术语“请求”暗含了根据环境来自主机108的一个或多个响应。客户端请求的种类包括,但不局限于此:
[0071] 1.来自使用浏览器程序的客户端的超文本传输协议(HTTP)GET请求。依靠该应用(更具体地说,依靠该请求的统一资源定位符(URL)),它可以更好地服务不同主机组的请求,并且在主机上客户端“会话”状态的存在可以影响将从特定客户端路由传送到特定主机的请求。这些请求可以在安全套接字层(SSL)(或其它加密的)连接上。
[0072] 2.虚拟专用网(VPN)连接(例如,主机是一组VPN服务器)。在这种情况下,“请求”可以被认为是第二层隧道协议(L2TP)或点到点隧道协议(PPTP)“连接”(后者是传输控制协议(TCP)控制连接和相关通用路由封装(GRE)数据业务的组合)。
[0073] 3.终端服务器连接(例如,主机是一组终端服务器)。
[0074] 4.使用专用应用特定协议以单独的TCP连接的形式(每个请求一个)的专用请求。
[0075] 5.简单对象访问协议(SOAP)请求。
[0076] 6.包括在TCP连接上的控制信息和在实时协议(RTP)上的对延迟敏感的媒体流的实时通信请求。
[0077] 因此,请求可以采用许多不同的、特定于应用的形式。在某些描述的实现中,负载平衡基础结构106可以作出特定于应用的传输决定。
[0078] 在(3)中,负载平衡基础结构106将请求从102(1)传输到主机108(2)(在此例子中)。在选择将请求传送至的主机108时,负载平衡基础结构106可以考虑多种因素中的一个或多个,这依赖于在此所描述的实现中那一种或多种正在被使用。例如,负载平衡基础结构106可以考虑:每个主机108的应用健康和/或负载信息,存储在主机108中的有关客户端102(1)的会话信息,等等。
[0079] 图2是一个示例网络负载平衡范例200,其展示了多个负载平衡单元106和多个主机108。具体地说,负载平衡基础结构106是作为在示例网络负载平衡范例200中多个负载平衡单元106(1),106(2)...106(u)示出的。此外,还展示了两个路由器和/或交换机202(1)和202(2)。
[0080] 路由器/交换机202(如果存在)可以被认为是(图1的)负载平衡基础结构106的组成部分或分离出来的部分。路由器/交换机202负责将从网络104接收到的所有请求和各个分组传送到负载平衡单元的共享虚拟IP(VIP)地址。如果第一路由器/交换机202失效,则第二路由器/交换机202可以在第一时间内进行接管。尽管只展示了两个路由器/交换机202,但是也可以选择性地使用一个或多于两个的路由器/交换机202。
[0081] 路由器/交换机202可以不用知道该负载平衡基础结构或负载平衡。如果路由器/交换机202不知道负载平衡,两个示例的选项中的其中一个就会被使用:对于第一个选项,一个负载平衡单元106被“赋予”共享VIP地址,并且所有的网络业务量都被传输到该地址上。然后该负载平衡单元106均匀地将这些业务量重新分配在其它负载平衡单元106上。然而,对于该第一选项,存在瓶颈和失败的问题(如果多个VIP地址在多个负载平衡单元106之间被共享和分离,可以减少这种情况的发生)。对于第二选项,路由器/交换机202被“欺骗”来将网络业务量引导到所有的负载平衡单元106上,每个负载平衡单元分别来决定为了负载平衡应当接受什么业务。然而,对于第二选项,存在事倍功半和交换性能/兼容性问题。
[0082] 另一方面,如果路由器/交换机202知道负载平衡,可以使路由器/交换机202在多个负载平衡单元106之间分配呼入的网络业务量(例如,以循环方式)。应当可以理解到这种有负载平衡意识的路由器/交换机202是实现进行初级的负载平衡功能的(例如,在硬件上)。例如,具有负载平衡意识的路由器/交换机202能够进行简单的基于IP地址的会话联系,使得来自于以特定源IP地址的所有分组被引导到一个相同的负载平衡单元106上。
[0083] 负载平衡单元106中每个分开图示的负载平衡单元106代表了一个物理设备、多个物理设备、或单个物理设备的一部分。例如,负载平衡单元106(1)可以对应于一个服务器、两个服务器、或更多。可选地,负载平衡单元106(1)和负载平衡单元106(2)可以一起对应于单个服务器。以下进一步参照图3以功能性的角度描述示例的负载平衡单元106。
[0084] 在图2中展示了两个示例的请求路径[1]和[2]。对于请求路径[1],客户端102(2)发送请求,通过网络104到达路由器/交换机202(1)。路由器/交换机202(1)将来源于客户端102(2)的请求的分组引导到负载平衡单元106(1)。然后,负载平衡单元106(1)根据一些负载平衡功能(例如,策略)将该请求的分组传输到主机108(1)。对于请求路径[2],客户端102(m)发送请求,通过网络104到达路由器/交换机202(2)。路由器/交换机
202(2)将来源于客户端102(m)的请求的分组引导到负载平衡单元106(u)。然后,负载平衡单元106(u)根据一些负载平衡的功能将该请求的分组传输到主机108(n)。示例的负载平衡功能将在下面参考图3进一步描述。
[0085] 图3展示了具有区别功能的示例负载平衡单元106和示例主机108。负载平衡单元106包括七(7)个个功能框302-314。负载平衡单元106的这些功能框至少可以部分地由软件来实现。主机108包括一个或多个应用316。在所描述的实现中,负载平衡单元106包括传送器302,分类器304,请求路由器306,会话跟踪器308,连接转移器310,穿越器312,和健康和负载处理器314。
[0086] 健康和负载处理器314部分地置于主机108中并且部分地置于负载平衡单元106的设备上。健康和负载处理器314监视主机108的健康和/或负载(或更一般的状态),使得其健康和/或附在信息可用于负载平衡功能(例如,在作出负载平衡的决定时)。健康和负载处理器314的示例实现将在下面进一步描述,尤其在题为“示例健康和负载处理”的部分。
[0087] 会话跟踪器308也可以部分地被置于主机108中并部分地置于负载平衡单元106的设备上。会话跟踪器308监视由客户端102所创建的会话,以使负载平衡功能可以利用先前创建会话的重新连接/继续状态。例如,一些应用将特定于应用的客户会话数据保存在主机上(其也是一种主机状态信息)。这些应用通常希望客户端在任何给定的会话期间使用相同的主机。会话的示例类型包括:(i)TCP连接(严格说来,它是一个会话);(ii)SSL会话;(iii)安全IP(IPsec)会话;(iv)HTTP基于点心文件的会话;等等。
[0088] 尽管会话跟踪器308在负载平衡单元106中作为一个离散框来进行了展示,但是该会话跟踪器308的会话跟踪功能实际上可以以全局范围实现。换句话说,会话联系是通过多个负载平衡单元106支持的。会话跟踪器308包括会话信息的集中式数据库和/或分布式数据库来保持会话联系。会话跟踪器308的示例实现以及重点对采用分布式数据库的方法,将进一步在下面进行描述,尤其是在题为“示例会话跟踪”的部分。
[0089] 分类器304使用由健康和负载处理器314和/或会话跟踪器308获取和保持的数据,可能还结合其它的因素来对呼入的请求进行分类。换句话说,分类器304为从客户端102中呼入的每个请求选择目标主机108。传送器302根据由分类器304选择的目标主机
108来传输客户请求(和/或其分组)。传送器302和分类器304可以每一分组为单位来进行操作。对于传送器302和分类器304的示例实现将在下面进一步进行描述,尤其在题为“灵活进行网络负载平衡的方法”和“示例分类、传输和请求路由传送”的部分。
[0090] 与传送器302和分类器304的每个分组实现进行对比,请求路由器306,可用作运行在主机108上的应用代理。例如,请求路由器306可以结束TCP连接,对每个来自于客户端102的逻辑请求进行(可能部分地)语法分析,并重新提交每个逻辑请求到目标主机108。因此,依靠由请求路由器306作出的决定,来自于客户端102的每一个逻辑请求可以被引导到不同的主机108上。进一步,请求路由器306可以对连接执行预处理(例如,SSL加密),可以选择接纳某些请求(例如,由于请求路由器306保持一个高速缓冲容量的响应),可以在将请求传输到主机108上之前任意地修改它们,等等。对于请求路由器306的示例实现也将在下面进一步描述,尤其在题为“灵活进行网络负载平衡的示例方法”和“示例分类、传输和请求路由传送”的部分。
[0091] 连接转移器310能够使连接在负载平衡单元106先被终止,然后再转移,使得最终该连接在主机108终止。这种连接转移有利于应用级的负载平衡。连接转移器310能够将连接从负载平衡单元106以以下方式转移到主机108上,即,在负载平衡单元106的初始终止对请求客户端102和新终止的主机108的应用316来说是透明的。穿越器312可以利用用于分组穿越的封装方法该方法不会引入对每一穿越分组的额外开销。
[0092] 在不涉及连接转移的情况下也可使用穿越器312的功能。此外,连接转移器310和/或穿越器312可以额外地被用在非负载平衡的实现中。连接转移器310以及穿越器312的示例实现,将在下面进一步得到描述,尤其在题为“用可选穿越和/或应用级负载平衡的示例连接转移”的部分。
[0093] 任何给定的负载平衡单元106的实现可以包括一个或多个所阐述的功能。尽管是分别进行阐述的,但是框302-314的每一个的功能实际上可以是与其它的功能相互关联的,相互重叠的和/或相互包含的。例如,健康和负载处理器314的健康和/或负载信息可以被分类器304使用。而且,连接转移器310和穿越器312可以和传送器302和分类器304一起协同工作。其它的相互重叠和相互作用的示例情况在下面进行描述。
[0094] 在一个所描述的实现中,主机108运行并提供对一个或多个应用316的访问。一般地,应用316包括文件传送程序,网站管理/服务器程序,远程访问程序,电子邮件程序,数据库访问程序,等等。具体地讲,但不局限于此,应用316包括web服务器(例如来自于Microsoft 公司的互连网信息服务器 (IIS))、终端服务器(例如Microsoft 终端服务TM TM器 )和防火墙和代理产品(例如因特网安全和加速服务器 (ISA))。尽管在之前的描述中特定的应用316例子与Microsoft 产品有关,但是,作为在此所述描述的网络负载平衡并不局限于任何一个或多个特定的商家、应用或操作系统。
[0095] 灵活进行网络负载平衡的方法
[0096] 本部分阐明在该部分和其它部分中所描述网络负载平衡实现是如何提供进行网络负载平衡的灵活方法的。本部分主要参考图4-9B。
[0097] 如上面所提的,可以通过用更大并更强的第二网络负载平衡器来代替第一网络负载平衡器来成比例地增加网络负载平衡功能。第二网络负载平衡器的硬件性能除了提供更大的容量外,还复制了第一网络负载平衡器整个的硬件性能。这是一个非常低效率而且不灵活的方法,尤其当只有一个网络负载平衡特征限制网络性能并促使网络负载平衡器升级时。
[0098] 图4展示了具有分离的分类和传输功能的示例网络负载平衡基础结构。分离的分类功能和传输功能分别由分类器304和传送器302来表示。尽管分类和传输功能将在下面进一步描述,尤其是在题为“示例分类、传输和请求路由传送”的部分,但是在这里还是作为网络负载平衡基础结构功能和主机108之间的相互作用的一个例子给出了初步的描述。
[0099] 在所述的实现中,传送器302对应于虚拟IP(VIP)地址(或多个地址),并且是该地址的网络端点。传送器302是一个相对低级的部件,如果有,当将分组路由传送到下一个或最终目的地时,其只能作出简单和/或初步的策略决定。传送器302通过查询路由表来确定该目的地。分类器304基于一个或多个因素(例如,主机状态信息)来操作路由表,这将进一步在这里的其它部分进行描述。
[0100] 客户端102和主机108也对应于指定网络地址。具体来说,客户端102(1)对应于地址C1,客户端102(2)对应于地址C2...客户端102(m)对应于地址Cm。并且主机108(1)对应于地址H1,主机108(2)对应于地址H2...主机108(n)对应于地址Hn。
[0101] 在图4中示出了五条通信路径(1)-(5)。通信路径(1)在客户端102(1)和传送器302之间,而通信路径(5)在传送器302和主机108(1)之间。通信路径(2)-(4)在传送器302和分类器304之间。在本例中,为简单起见,与通信路径(1)-(5)路径有关的连接是HTTP TCP连接。此外,在本例中的负载平衡涉及将呼入连接路由传送到最小负载的主机108,至少不需清楚地考虑任何应用级负载平衡。
[0102] 通信路径(1)-(5)指示传送器302和分类器304如何对来自于102(1)的HTTP TCP连接进行负载平衡。在(1),客户端102(1)通过发送定址于该VIP地址的TCP SYN分组来开始TCP连接。网络104的路由基础结构通过路由器/交换机202(1)将该分组路由传送到传送器302,该路由器/交换机202是最“靠近”传送器302的。
[0103] 在(2),传送器302为了查询该连接,查询路由表,该路由表可以是在传送器302的内部或是其它可以访问的地方。该连接可以由TCP/IP的4字节组(即,源IP地址,源TCP端口,目的IP地址,目的TCP端口)来在该路由表中进行标识。因为是该连接的第一个分组,所以在路由表中没有条目。因此,传送器302应用“缺省路由”的操作,即发送该分组到分类器304。
[0104] 在(3),分类器304为主机108(1),108(2)...108(n)查询其(例如,联合)有关主机状态信息的高速缓冲存储器。分类器304得出主机108(1)是可用的,并且在此例中该时刻它是最小负载的主机108。分类器304还从路由表中“探测”路由,该路由表是被传送器302为该连接所查询过的。例如,分类器304添加路由条目或指示传送器302来添加路由条目到所述的路由表,该路由表将所述的TCP连接(例如,由TCP 4字节组所标识的)映射到特定目标主机108,在本例中是主机108(1)。更尤其是,路由条目规定了主机108(1)的网络地址H1。
[0105] 在(4),分类器304发送TCP SYN分组返回到传送器302。可选地,分类器304可以不使用传送器302而将该初始TCP SYN分组传输到主机108(1)。有关分类器304其它可选项在下面将进一步描述。
[0106] 在(5),传送器302能够为由SYN分组所代表的连接来访问路由条目,并以此来将分组传输到在地址H1的主机108(1)。传送器302还将来自该连接的客户端102(1)的所有后续分组直接传输到主机108(1)。换句话说,传送器302能够避免与该连接的分类器304的进一步交互。当该连接停止时,可以使用下面进一步描述的一种机制或多种机制的组合来删除路由条目。
[0107] 在多种协议环境中,对于通信路径(5)来说,传送器302不能简单地将来自于客户端102(1)的分组照着原来的样子发送到在网络地址H1的主机108(1)上,因为这些分组定址于VIP地址,而该地址是传送器302本身独有的。相反,传送器302可以使用一个或多个下述的示例选项:
[0108] 1.传送器302通过(i)用传送器302的IP地址和网址解析(NAT)所产生的端口号重写源(客户端102(1))IP地址(C1)和端口号;和(ii)用主机108(1)的IP地址(H1)重写目的IP地址(VIP),来执行NAT。
[0109] 2.传送器302通过用主机(108(1))的IP地址(H1)重写目的IP地址(VIP)来执行“半-NAT”,以使得源(客户端102(1))IP地址(C1)和端口号可以被保留下来。
[0110] 3.传送器302将从客户端102(1)接收到的分组从传送器302穿越到主机108(1)。在本例中具体来说是,通过将每个分组封装到定址于主机108(1)的新IP分组中来实现穿越。在主机108(1)上的具有网络负载平衡意识的软件重构在传送器302从客户端102(1)接收到的起始分组。该起始分组然后被指示到在主机108(1)的虚拟接口上(例如,对应于传送器302的VIP地址是束缚到在主机108(1)的该虚拟接口上)。有关穿越的示例实现方式(特别是对于连接转移的情况)将在下面参考穿越器312来进一步说明,尤其是在题为“用可选穿越和/或应用级负载平衡的示例连接转移”的部分。
[0111] 尽管图4-9B展示了两个具体的分离的功能,也就是,分类和传输,但是应该可以理解其它的功能,例如请求路由器306,会话跟踪器308,连接转移器310,和健康和负载处理器314的功能也可以独立地扩展,(例如,独立提取),正如下面所要描述的那样。进一步来讲,应该注意到,一个或多个的功能可以在不同时间和/或同时独立分离并扩展。而且,尽管是为了清楚起见在本部分和其它部分的许多例子中使用TCP/IP,但这里所描述的网络负载平衡原理也适用于其它传输和/或通信协议。
[0112] 在图4的示例方式中,网络负载平衡功能(例如那些在图3中所示的)可以为了扩展的目的而被相互之间分离开来。它们也可以为了增强可用性而被分离开来并采用各种各样的双重配置。对于可测量性和可用性的示例配置将在描述了图5所示的方法之后参考图6-9B来进行描述。
[0113] 图5展示了用来将网络负载平衡基础结构扩展成不同配置的示例方法的流程图500。流程图500包括三个框502-506。尽管流程图500的操作可以在其它的环境中用多种软件方法来执行,但是,图1-4和6-9B尤其被用来展示该方法的某一方面和例子。
[0114] 在框502,网络负载平衡基础结构操作于第一配置,例如,每个配置与以下的一个或多个有关:不同负载平衡功能的一个或多个选择,比例,和/或相互关系;多个和/或多种类型的不同设备;不同部件的组织和/或分布;资源的分布和/或分配等。在框504,网络负载平衡基础结构被扩展。例如,分离的负载平衡功能可以在单一和/或独立的基础上来被扩展和/或伴随地集中起来。在框506,所扩展的网络负载平衡结构以第二种配置方式来运行。
[0115] 如上所述,单片网络负载平衡器可以被通过用更强有力的网络负载平衡硬件来代替先前网络负载平衡硬件来整体地按照比例地增加网络负载平衡的能力。对比来看,通过扩展网络负载平衡基础结构能够使网络结构平衡(子)功能被个别地和/或独立地扩展。它也可以使网络负载平衡功能在不同数量的设备之间和之中一起或单个地扩展。下面提供装置,部件,和面向资源扩展的例子。
[0116] 图6从设备的角度来展示了第一示例网络负载平衡基础结构配置。在第一面向设备的网络负载平衡基础结构配置中,展示了三个设备602(1),602(2),和602(3),然而,可选地,可以使用一个,两个,或多于三个设备602。
[0117] 正如所展示的,传送器302(1)、分类器304(1)和主机108(1)置于并在设备602(1)中执行。传送器302(2)、分类器304(2)和主机108(2)置于并在设备602(2)中执行。还有,传送器302(3)、分类器304(3)和主机108(3)置于并在设备602(3)中执行。这样,在第一面向设备的网络负载平衡基础结构配置中,各自的传送器302,分类器304,和主机108共享各自设备602的资源。
[0118] 在操作时,传送器302作为一个或多个VIP地址的网络端点。任何分类器304可以根据主机的状态信息为连接探测到任何主机108的路由。例如,分类器304(2)可以为一个新的呼入连接探测到主机108(3)的路由。根据对此连接的新路由条目,传送器302(2)将后续的分组传输到主机108(3)。
[0119] 在一个可选的面向设备的网络负载平衡基础结构配置(它是由第一个示出的网络负载平衡基础结构配置所扩展的)中,添加了第四设备602(4)(图6中没有明确示出),它包括传送器302(4)、分类器304(4)和主机108(4)。另一方面,如果用分类器304(1-3)已经给出了足够的分类功能但是额外的传输功能还可以有利于主机108的请求处理,那么可以添加第四设备602(4),其包括传送器302(4)和可选的主机108(4)。对于这种扩展配置,如果出现的话,另一个分类器304(1、2或3)可以为传送器302(4)探测到主机108(1、2或3)和主机108(4)的路由。
[0120] 图6中第一面向设备的示例网络负载平衡基础结构配置尤其适合更小的宿主情况,其中对于这种网络负载平衡基础结构来说分离的设备在技术上和/或经济上不是值得的或可靠的。然而,当宿主责任扩展到更大数量(和/或在相同数量上的更大需求)主机108时,或者如果在主机108上的网络负载很重要时,第一面向设备的典型网络网络负载平衡基础结构配置可以被扩展来满足这一需要,就象由图7的第二面向设备的网络负载平衡基础结构配置所表示的。
[0121] 图7从设备的角度展示了第二示例网络负载平衡基础结构配置。在第二面向设备的网络负载平衡基础结构配置中,展示了三个设备602(1),602(2),和602(3)。还有,可选地可以使用一个,两个,或多于三个设备602。
[0122] 如图所示,传送器302(1)和分类器304(1)置于并在设备602(1)中执行。传送器302(2)和分类器304(2)置于并在设备602(2)中执行。还有,传送器302(3)和分类器304(3)置于并在设备602(3)中执行。这样,在第二面向设备的网络负载平衡基础结构配置中,每一个各自的传送器302和分类器304不与主机108共享各自设备602的资源。进一步来说,网络负载平衡基础结构可以服务任何数量的主机108。
[0123] 在操作时,传送器302作为一个或多个VIP地址的网络端点。任何分类器304可以根据主机的状态信息为连接探测到任何主机108的路由。例如,分类器304(2)可以为一个新的呼入连接探测到主机108(2)的路由。根据对此连接的新路由条目,传送器302(3)将后续的分组传输到主机108(2)。
[0124] 因此,例如以软件来实现的网络负载平衡基础结构可以通过将所述网络负载平衡基础结构(或其部分)从与主机108共享的设备移动到不与主机108共享的设备中来扩展。而且,如在上述的图6中所暗含的,另一个设备602(4)可以被添加到所述网络负载平衡基础结构中来提供额外的传输功能,额外的分类功能,额外两种类型功能,等等。
[0125] 图8A和8B从部件的透视图来展示了第一和第二示例网络负载平衡基础结构配置。如图示,第一面向部件的示例网络负载平衡基础结构配置800包括四个部件。第二个面向部件的示例网络负载平衡基础结构配置850包括六个部件。可选的第二配置850包括由虚线框所展示的第七部件,其将在下面进一步描述。
[0126] 具体地讲,第一面向部件的示例网络负载平衡基础结构配置800(或第一配置800)包括(i)两个传送器302(1)和302(2),和(ii)两个分类器304(1)和304(2)。第二示例面向网络负载平衡基础结构配置850(或第二配置850)包括(i)四个传送器302(1),
302(2),302(3),和302(4)和(ii)两个分类器304(1)和304(2)。这样,第一配置800通过添加两个部件相对于第二配置850来扩展,在本例中,该两个部件是传输部件。
[0127] 在一个描述的实现方式中,每个各自与网络负载平衡有关的功能部件对应于各自的设备(在图8A和8B中没有明确示出);然而,每个部件可以可选地对应于设备的部分或多于一个设备。例如,传送器302(1)和302(2)可以被分布于三个设备。或者,传送器302(1)和分类器304(1)对应于第一设备,而传送器302(2)和分类器304(2)对应于第二设备。
[0128] 两个与网络负载平衡相关的功能部件被添加用来把第一配置800扩展成第二配置850。然而,部件(多于两个)可以可选地被添加来扩展网络负载平衡基础结构。进一步来说,两个或多个不同类型的功能部件可以被“同时”扩展。例如,正如由虚线框所展示的,另一个分类部件(例如分类器304(3))也可以被添加用来把第一配置800扩展成第二配置850。
[0129] 而且,可以以相互之间相似的(例如,等同的)或不相似的比例来进行两个或多个不同类型的功能部件的扩展。正如所展示的,添加传送器部件302(3)和302(4)而不同时添加分类部件304或同时添加单个的分类器部件304(3)来以不相似的比例进行扩展。然而,当添加两个传送器部件302(3)和302(4)来以相似比例进行扩展时,可以添加两个分类器部件304(3)和304(4)(后者在图8B中没有明确示出)。不管怎样,正如参考图9A和9B所描述的那样,每一个单独的与网络负载平衡相关的功能部件可以消耗不同数量的有效网络负载平衡基础结构的资源。
[0130] 图9A和9B从资源的角度示出了第一和第二示例网络负载平衡基础结构配置。第一面向资源的的示例网络负载平衡基础结构配置900(或者第一配置900)包括负载平衡单元106的第一资源分布或分配。第二面向资源的示例网络负载平衡基础结构配置950(或者第二配置950)包括负载平衡单元106的第二资源分布。
[0131] 正如所展示的那样,第一配置900包括70%-30%的资源分布,而第二配置包括40%-60%的资源分布。这种资源可以包括所有的设备资源(例如设备数),处理资源(例如,处理器的周期数),存储器资源(例如,高速缓冲存储器部分,主存储器等等),网络带宽和/或接口资源(例如,每秒的比特数和/或物理网络接口卡(NIC)),等等。
[0132] 对于第一配置900具体来说,传送器302消耗负载平衡单元106的70%的资源,而分类器304消耗这些资源的30%,在产生第二配置950的扩展过程中的重新分配之后,传送器302消耗了负载平衡单元10640%的资源而分类器304消耗了这些资源的60%。
[0133] 在示例的情况下,当较少、较长的事务正被相关的主机(在图9A和9B中没有示出)处理时,第一配置900有助于更好的网络负载平衡性能,因为分类功能在连接的初始通信开始时使用而传输功能在此之后使用。另一方面,当较多、较短的事务被相关的主机处理时,第二配置950有助于更好的网络负载平衡性能,因为对于通过网络负载平衡基础结构集中的分组总数的更大的百分比使用分类功能。在这种情况下,如果还使用请求路由传送功能,那么请求路由器306还被分配总的计算资源的一定百分比。可以在处理连接期间依据当前的资源消耗和/或不足来调整在三个功能之间的资源分布(例如在“忙碌中”调整)。
[0134] 正如上面参考图2和3所指示的,每个负载平衡单元106对应于总的网络负载平衡基础结构的全部或部分。对于任何所给出的物理上、逻辑上、任意地等定义的或规定的负载平衡单元106来说,在扩展过程期间其资源可以被再分配。更具体来说,负载平衡单元106不同的与网络负载平衡有关的分离的功能之间/之中的资源分布可以在扩展过程中改变。此外,多于两个不同的功能以及在图9A和9B中没有具体展示的与网络负载平衡有关的其它功能都可以被分配不同的资源百分比。
[0135] 被分配到所有负载平衡功能的整个系统资源的百分比可以在扩展的过程中改变。作为一般的处理能力的例子,致力于负载平衡的总处理能力的百分比是随着需要被负载平衡的业务量的增加而逐渐增加的。
[0136] 网络负载平衡软件可以有选择地执行监视来分析和确定是否应该重新分配资源。例如,网络负载平衡软件可以监视不同的与网络负载平衡有关的功能的处理器利用率。实际上的重新分配也可以有选择地被网络负载平衡软件在离线或在线模式下自动执行。
[0137] 应该可以理解,这里所描述的(例如,至少部分地由软件来实现的)网络负载平衡基础结构的扩展能力是与不同的安装有关,并且没有必要与单个安装的变化有关。在面向资源的例子中,这里所述的网络负载平衡基础结构可以根据在一个安装环境中一个资源分布来配置,并且可以根据在具有不同操作参数的另一个安装环境中的另一个资源分布来配置。此外,有关扩展的能力,特征,选项,等等也可以用来“缩减”。换句话说,也可以减少用于网络负载平衡基础结构的资源。
[0138] 示例的健康和负载处理
[0139] 本部分描述了主机状态信息(例如健康和/或负载信息)是如何被收集并在网络负载平衡中使用的。本部分主要参考图10-18并阐明诸如由健康和负载处理器314(图3中的)所提供的健康和负载功能。正如在上面参考图3所描述的那样,每个主机108拥有一个或多个应用316。健康和负载处理器314利用与应用316和/或主机108有关的健康和/或负载信息来进行特定描述的网络负载平衡实现。
[0140] 图10展示了涉及主机状态信息(HSI)1006示例网络负载平衡方法。每个主机108(1),108(2)...108(n)分别包括一个或多个应用316(1),316(2)...316(n)。通常这些主机108和这些应用316特定地会随时间而改变状态。
[0141] 例如,主机108和应用316可以接受新的连接或不接受新的连接。而且,它们也可以快速地处理客户请求或慢速地处理客户请求。进一步来说,它们可以预留许多资源或具有很少未使用资源。这些数据或是其它的数据的整体或任何部分可以包括主机状态信息1006。通常,主机状态信息1006给出了主机108和/或运行其上的应用316的一些方面的状态指示。
[0142] 在描述的实现中,每个主机108(1),108(2)...108(n)分别包括主机状态信息(HSI)确定器1002(1),1002(2)...和1002(n)。每个主机108(1),108(2)...108(n)还分别包括主机状态信息(HSI)传播器1004(1),1004(2)...和1004(n)。每个主机状态信息确定器1002和/或主机状态信息传播器1004可以是负载平衡基础结构(LBI)106的一部分。
[0143] 每个主机状态信息确定器1002为其各自的主机108和/或运行主机上的应用316确定主机状态信息1006。下面将参考图12-14,尤其图13A,来描述用来确定这些主机状态信息1006的示例技术。每个主机状态信息传播器1004为其各自的主机108和/或应用316将主机状态信息1006传播到负载平衡基础结构106(例如,没有置于主机108的负载平衡基础结构106的那些部分)。下面将参考图12-17,尤其是图13B和15-17,来描述用来传播这些主机状态信息1006的示例技术。
[0144] 具体地讲,每个主机状态信息传播器1004将主机状态信息1006(直接或间接地)传播到负载平衡基础结构106的每个负载平衡单元(LBU)106,负载平衡基础结构包括至少一个健康和负载处理器314和/或分类器304。当进行网络负载平衡时,负载平衡基础结构106参考主机状态信息1006。例如,如由逻辑1008所指示的那样,负载平衡基础结构106能够根据主机状态信息1006来作出负载平衡的决定。
[0145] 在(1)的操作中,主机状态信息确定器1002为各自的主机108和/或应用316确定主机状态信息1006。在(1)和(2)中,主机状态信息传播器1004将主机状态信息1006从主机108传播到负载平衡基础结构106。例如,主机状态信息1006可以被传播到单个的负载平衡单元106。在(3)中,逻辑1008根据主机状态信息1006作出网络负载平衡的决定。在(4),根据这些网络负载平衡的决定,将连接传送到目标主机108。
[0146] 图11展示了涉及主机状态信息的示例网络负载平衡方法的流程图1100。流程图1100包括三个框1102-1106。尽管流程图1100中的操作可以在其它环境用多种软件方法来执行,但是特定用图1-3和10来阐述该方法的某些方面和例子。
[0147] 在框1102,将主机状态信息从主机发送到负载平衡单元。例如,可以将主机状态信息1006从主机108发送到负载平衡单元106。在框1104,在负载平衡单元从主机接收主机状态信息。例如,负载平衡单元106可以从主机108接收主机状态信息1006。在框1106,根据所接收到的主机状态信息来作出负载平衡的决定。例如,在负载平衡单元106的逻辑1008根据主机状态信息1006对网络负载平衡作出决定。
[0148] 这样,在图10中,负载平衡基础结构106从主机108(和/或其应用316)收集主机状态信息1006和根据主机状态信息1006引导入主机108的负载平衡呼入请求。正如下面参考图12-18所进一步描述的那样,该主机状态信息1006可以是特定于应用的。并且也如下面进一步的描述的,主机状态信息1006的例子包括健康和/或负载信息。
[0149] 图12展示了涉及健康和/或负载信息(HLI)1206的示例网络负载平衡方法。主机108(1),108(2)...108(n)通过珠如网络的通信链接1210耦合到负载平衡单元106(1),106(2)...106(n)。
[0150] 如所展示的,主机108使用通信链接1210将健康和负载信息1206传送到负载平衡单元106。如由所示的双箭头指示的那样,该健康和负载信息1206的双向通信是指由负载平衡单元106到主机的两路通信,这样可以提供一定的完整性、一致性、正确性等,使得主机108和/或负载平衡单元106可以相互独立地失效。这种从负载平衡单元106到主机108的两路通信将在下面尤其是参考附图15来进一步描述。
[0151] 健康信息反映给定的主机和/或应用能否处理客户请求。负载信息反映给定的主机和/或应用在特定时刻所能处理的客户请求的数、量和/或级别。换句话说,负载能够直接和/或相反地反映给定主机和/或应用的可用数,可用量,和/或总容量水平。正如在上面所描述的,参考图12-18所描述的实现集中于健康和/或负载信息。然而,那些实现方式也可以适用于针对主机的(包括其应用)一般状态信息。
[0152] 在描述的实现中,每个主机108(1),108(2)...108(n)包括各自的健康和负载基础结构(H&LI)部件1202(1),1202(2)...1202(n)。每个健康和负载基础结构部件1202可选地是置于每个主机108并在其上运行的负载平衡基础结构106的一部分。健康和负载信息1206可以通过软件来实现。当起作用时,每个健康和负载基础结构1202(1),1202(2)...1202(n)产生并保持各自的健康和负载(H&L)表1204(1),1204(2)...1204(n)。
[0153] 这些健康和负载表1204可以包括特定于应用的条目。存储在健康和负载表1204的健康和负载信息1206可以独立于负载平衡基础结构106。例如,管理员,设计人员,等等,可以在配置时为健康和负载信息1206规定标准。此外,主机108或拥有主机108的设备的外部实体可以用来为在设备上的应用316确定健康和负载信息1206。下面将参考图13A来进一步描述示例的健康和负载表1204。
[0154] 每个负载平衡单元106(1),106(2)...106(u)包括各自的联合健康和负载(H&L)高速缓冲存储器1208(1),1208(2)...1208(u)。每个联合健康和负载高速缓冲存储器1208包括来自于每个健康和负载表1204(1),1204(2)...1204(n)的信息。从而,每个负载平衡单元106具有快速(例如,高速缓冲)访问每个主机108的健康和负载信息1206的能力,以此来使得负载平衡单元106对网络业务量进行负载平衡。
[0155] 在操作中,健康和负载基础结构1202将健康和负载信息1206从健康和负载表1204推到联合健康和负载高速缓冲存储器1208中。这种提供健康和负载信息1206的机制是事件驱动的,其能够使健康和负载表1204的变化以一种及时、可压扩的方式被提供给联合健康和负载高速缓冲存储器1208。
[0156] 图13A是在图12中所示的示例健康和负载表1204。在描述的实现中,健康和负载表1204包括每一个与不同应用316相关的多个条目1302。每个条目1302可以对应于在具有三列的健康和负载表1204中的一行。这些列对应于应用的标识符(ID)1302(A),应用状态特征1302(B),和负载平衡器指示1302(C)。
[0157] 因为,每个条目1302与特定的应用316相关,所以每当一个应用被启动(例如,由管理员)时就添加一行。同样,每当一个应用被关闭时,就删除/移除一行。相似地,在列中的单个的字段1302(A),1302(B),和/或1302(C)当其中的一个值变化时可以被修改/更新。例如,当给定应用316的一个状态特征值发生变化时,就更新对于该给定应用316的条目1302的应用状态特征1302(B)字段中的值。
[0158] 增加和删除应用316的条目1302可以通过在主机108的控制管理器输入来实现。例如,操作系统的控制管理器部分知道什么时候应用316启动和停止,因为它动态地参与着应用316的启动和停止。因此,控制管理器可以识别它已经(至少部分地)开启了应用
316,并且控制管理器可以创建它已经(至少部分地)停止了该应用316。因此,由控制管理器通知健康和负载基础结构1202应用316的启动和停止。因此,无需从应用316对健康和负载基础结构1202提供这样清楚的通信。一个控制管理器的例子是来自于Microsoft公司的Windows 操作系统的服务控制管理器(SCM)。
[0159] 应用标识符1302(A)包括用来唯一标识与条目1302相关的应用316的信息。应用标识符1302(A)可以包括一个或多个与应用316相关的下面的内容:虚拟IP地址和端口,物理IP地址和端口,使用的协议,和任何特定于协议的信息。协议可以是HTTP,IPsec,SOAP,等等。特定于协议的信息可以是URL模式或字符串以进一步描述与条目1302相关的应用的。这样,应用标识符1302(A)在特定的主机108上特定地指的是具体的应用端点。
[0160] 其它的标识符可以替换地被使用。例如,为了降低通信的带宽,应用标识符1302(A)可以是32位的数字,该数字映射到在负载平衡单元106和健康和负载基础结构
1202的上面所述的示例信息。而且,在条目1302的任何字段可以实际上包含全局唯一标识符(GUID),该标识符被用作查找该字段真实信息的密钥。
[0161] 应用状态特征1302(B)包括反映与条目1302相关的应用316的状态的信息。应用状态特征1302(B)包括相关应用316的以下内容:应用健康,应用负载,和应用容量。应用健康是一个指示应用是否在运行的准布尔(quasi-Boolean)值。应用健康可以是健康,失效,或未知。应用健康是一个相对瞬时值,并且当该应用的健康值变化时,被以相对低的延迟(例如,大约一秒或几秒)传输到负载平衡单元106。
[0162] 应用负载是指示所给的应用被占用或忙的程度以及直接或相反地表示该应用能够处理多少额外的负载。应用负载是变化相对慢的或者用引入滞后方法进行修匀的平均值,(如果需要的话)以消除由于负载增加和降低所带来的瞬时峰值。它相对来说不经常被传输到负载平衡单元106(例如,大约每分钟一到四次)。该应用负载的值被赋予有关应用容量的意义。
[0163] 应用容量是指示该应用的最大容量的值。对于给定的环境,一般情况下选择它是有意义的,但对其它的环境也有足够的灵活性。应用容量是没有单位的,并具有有限的数字(例如,0-99),其可以在配置的时候设定。它基于处理能力,存储器大小/速度,网络接入,它们的一些组合,等等。应用容量表达了在一组主机108(1,2...n)中的相同类型的其它应用之间和之中的相对容量。
[0164] 因此,相对于应用容量,应用负载更有意义。对于给定的应用,应用负载是有关该应用的应用容量的一个百分比。可选地,应用负载可以被表示为一个无单位的数字,其中,百分比可以根据该应用容量的值来确定。
[0165] 负载平衡器指示1302(C)包括这样的信息,该信息反映了由健康和负载基础结构1202为负载平衡单元106所创建的指示与条目1302有关的应用316的所需的和/或所期望的状态。负载平衡器指示1302(C)包括有关应用316的以下内容:目标负载平衡状态和当前负载平衡状态。
[0166] 目标平衡状态反映了指示负载基础结构1202所需的负载平衡单元106的状态。当前负载平衡状态反映了健康和负载基础结构1202所知道的指示在负载平衡单元106中记录的有关负载平衡单元106的当前状态。当前负载平衡状态因此反映负载平衡指示,即,健康和负载基础结构1202希望负载平衡单元106以所指示的使用通信协议来进行当前的操作。这样一种示例通信协议将在下面参考图15来进一步描述。目标负载平衡状态和当前负载平衡状态的相互作用和相互关系也将根据图15的描述了进一步澄清。
[0167] 目标负载平衡状态和当前负载平衡状态的每个的值可以取有效,无效,或遗漏。有效值指示了新的请求/连接是受欢迎的并将其定位到与条目1302相关的应用。无效值指示了没有额外的分组应当被传输到该相关的应用。遗漏值指示了没有新的请求/连接的分组应当被发送到该相关的应用,但是对于现存的请求/连接的分组应当继续被传输到相关的应用。
[0168] 在描述的实现中,各个限定形式的健康和负载信息1206被存储在置于多个主机108的各个主机108中的健康和负载表1204中。在该实现中,如果主机108崩溃,健康和负载信息1206就会丢失,其所属的那些应用316也会崩溃。因此需要自动地无需复制数据的高可靠性方法。然而,该限定形式的健康和负载信息1206可以有选择地存储在其它地方。
其它的这样的存储器包括负载平衡单元106本身、为多个其它(包括所有其它的)主机108存储和保持健康和负载信息1206的主机108(作为其唯一的任务或结合宿主的责任)、另一分离的和/或外部的设备,等等。
[0169] 如果限定形式的健康和负载信息1206除了被分布到主机108(1,2...n)之外,还被存储和保持在其它地方,那么这种健康和负载信息1206可以为高可靠性的目的而进行冗余存储(例如,也存储在复制性的设备,备份中等等)。用来存储健康和负载信息1206的示例代理情形将在下面参考图17A和17B来进行描述。图17A涉及用于健康和负载表1204的代理场合,而图17B涉及用于联合健康和负载高速缓冲存储器1208的代理场合。
[0170] 图13B是在图12中所展示的示例的联合健康和负载高速缓冲存储器1208。在描述的实现中,在每个负载平衡单元106中的每个联合健康和负载高速缓冲存储器1208包括为在每个主机108的每个健康和负载基础结构1202而存储在每个健康和负载表1204中的至少部分信息。高速缓冲的健康和负载信息可以在联合健康和负载表高速缓冲存储器1208中以任何方式来组织。
[0171] 正如所展示的,联合健康和负载高速缓冲存储器1208包括每个主机108(1),108(2),...108(n)的高速缓冲存储器,它对在各个主机108(1,2..n)的健康和负载表1204中的部分或全部信息进行复制。具体地讲,联合健康和负载高速缓冲存储器1208包括主机#11304(1)的高速缓冲存储器,主机#21304(2)的高速缓冲存储器……主机#n 1304(n)高速缓冲存储器。这样,所展示的联合健康和负载高速缓冲存储器1208由主机108(1,2..n)以较宽的级别用各个高速缓冲存储器来组织,其中每个单独高速缓冲存储器1304包括相应的各个主机108(1,2..n)的特定于应用的条目。可选地,联合健康和负载高速缓冲存储器1208可以根据应用316的类型以较宽的级别用各个框进行组织,其中各个框指向由主机
108(1,2..n)进一步划分的特定应用类型。也可以使用其它的数据结构格式。
[0172] 图14展示了涉及健康和负载信息的示例网络负载平衡方法的的流程图。流程图1400包括八个框1402-1416。尽管流程图1400中的操作可以在其它环境用多种软件方法来执行,但是特定地用图1-3和12-13B来阐述该方法的某些方面和例子。例如,两个框1402-1404的操作可以由主机108来执行,而六个框1406-1016的操作可以由负载平衡单元
106来执行。
[0173] 在框1402,确定在主机的健康和负载信息。例如,对于应用316(2)的健康和负载信息1206可以被健康和负载基础结构1202(2)确定并被存储在主机108(2)的健康和负载表1204(2)中。在框1404,确定的健康和负载信息被传播到负载平衡单元,例如,健康和负载基础结构1202(2)可以将应用316(2)的健康和负载信息1206发送到负载平衡单元106(1,2,...u)。如箭头1418所示的,重复框1402和1404的操作,使得可以随着变化的发生而持续不断地监视和更新(应用)健康和负载。
[0174] 在框1406,从主机接收健康和负载信息。例如,负载平衡单元106(1)可以从多个主机108(1,2...n)来接收健康和负载信息1206,其包含了主机108(2)的应用316(2)的健康和负载信息1206。在框1408,缓存所接收到的健康和负载信息。例如,负载平衡单元106(1)可以将来自于主机108(1,2...n)的健康和负载信息存储到联合健康和负载高速缓冲存储器1208(1)中。参考图13B的联合健康和负载高速缓冲存储器1208(1)的实现,来自于主机108(2)的应用316(2)的健康和负载信息1206可以被存储在主机#21304(2)的高速缓冲存储器中。如箭头1420所示,重复框1406和1408的操作,使得可以随着变化的发生而持续不断地接收和更新(应用)健康和负载信息。
[0175] 如虚箭头1422所指示的,负载平衡单元106在处理(应用)健康和负载问题的同时也处理来自于客户端102的通信。在框1410,接收请求新连接的分组。例如,负载平衡单元106(1)可以通过网络104从客户端102(2)接收一个TCP SYN分组。在框1412,查询缓存的健康和负载信息。例如,负载平衡单元106(1)可以查询联合健康和负载高速缓冲存储器1208(1)。尤其是,负载平衡单元106(1)可以与该应用有关的条目,TCP SYN分组通过主机#1,#2...#n 1304(1,2...n)的高速缓冲存储器指向该应用。
[0176] 在框1414,根据缓存的健康和负载信息选择主机。例如,负载平衡单元106(1)根据在联合健康和负载高速缓冲存储器1208(1)中缓冲存储的健康和负载信息1206来选择具有应用316(2)的主机108(2)。所选择的应用316(和主机108)应当是健康的并能够接受额外负载(例如,可能是在具有TCP SYN分组直接指向的应用类型的应用中最小负载的应用)。
[0177] 对于所缓冲存储的健康和负载信息的查询(在框142)和根据所述缓冲存储的健康和负载信息来进行的主机选择(在框1414)可以在接收具体的新连接请求分组之前和/或使用分批方案来执行。而且,该选择可以根据多种方案中任何一种。例如,可以使用基于令牌或循环的方案。至于其它的方案,该选择可以使用在应用选项之间的相对负载的加权。这种利用基于令牌或循环的方案的查询和选择将在下面参考图18和在题为“示例分类、发送和请求路由传送”,尤其是关于分类功能的部分中进一步描述。
[0178] 在框1414选择了目标主机之后,新连接请求分组可以被发送到该主机。在框1416,从客户端接收到的分组被传输到该所选的主机上。例如,TCP SYN分组被从负载平衡单元106(1)传输到所选的主机108(2)。该初始分组的传送可以直接由分类器304或传送器302来执行。正如在题目为“示例分类、发送和请求路由传送”的部分中所进一步描述的那样。
[0179] 对于描述的实现,健康和负载基础结构1202可以可以置于和分布于多个主机108,也可以置于负载平衡单元106(由健康和负载处理器314所表示的)。健康和负载基础结构1202拥有三个责任。第一,它揭示了监听端点来为健康和负载表1204的应用状态特征1302(B)获得应用状态更新。第二,它同步于应用存储状态信息来确定负载平衡单元106应该做什么,其包含在负载平衡器指示1302(C)中。第三,健康和负载基础结构1202将来自于主机108的指示传送到负载平衡单元106。
[0180] 负载平衡器指示1302(C)的指示内容是有关应用状态特征1302(B)的信息的有效摘要形式。然而,负载平衡单元106除了接收该处理指示外,也可以接收应用状态特征1302(B)的原始信息。传输健康和负载表1204的这些和其它字段的内容是通过使用消息协议来完成的,该协议将在下面参考图15来进一步描述。
[0181] 图15展示了用来实现在图12所示的主机108和负载平衡单元106之间有关健康和负载信息通信的示例消息协议1500。通常,使用事件驱动机制将来自于主机108的健康和负载表1204的变化推向负载平衡单元106。换句话说,对于描述的实现,当健康和负载表1204被更新时,信息被从主机108传输到负载平衡单元106。这就避免了周期性地发送所有的每个健康和负载表1204的快照,降低了由健康和负载基础结构1202网络带宽消耗。
[0182] 消息协议1500可以通过使用任何有效的消息传输机制来实现。这种机制包括可靠的组播传输,点到点传输(例如,用户数据报协议(UDP)),等等。如所述展示的,消息协议1500包括七种消息类型1502-1514:心跳消息1502,再见消息1504,行变化消息1506,获取表快照消息1508,发送表快照消息1510,假定表状态消息1512,和假定错误消息1514。
[0183] 应该可以理解,除了箭头1516和1518之外,该示出并没有隐含在不同消息类型1502-1514之间的时序关系。例如,行变化消息1506通常并不跟在再见消息1504之后。
[0184] 心跳消息1502指示特定主机108正在运行并且在联合健康和负载高速缓冲存储器1208中对特定主机1304的相应特定高速缓冲存储器提供相应的特定健康和负载表1204的内容的一些错误校验。在每个主机108的每个健康和负载基础结构1202直接或间接地发送心跳消息到在每个负载平衡单元106的每个联合健康和负载高速缓冲存储器1208。
[0185] 心跳消息1502解决了在联合健康和负载高速缓冲存储器1208中的数据过时的问题,该问题部分地是因为每个健康和负载表1204的整体的快照不能周期性地传输到每个负载平衡单元而引起的。下面将参考图16来进一步描述用来传输心跳消息1502的方案。
[0186] 心跳消息1502包括主机标识符,错误校验数据,并可选地包括DNS名。主机的标识符可以是唯一的(例如,32位)数字,它在配置时选择。错误校验数据可以是校验和、状态变化序列号、世代号、CRC值等等,其使接收负载平衡单元106能够验证其联合健康和负载高速缓冲存储器1208中的内容与该发送主机108的健康和负载表1204的内容是否一致。如果使用世代号的方法,那么多个世代ID就用于每个赋予应用“信息块”的ID。依靠该环境,消息就可以指信息块号或信息块号/世代ID对。
[0187] 错误校验数据(或,更一般地,内容指示器)可以是整个健康和负载表1204的单一值,或者它可以是在每个条目1302的基础上确定多个值。DNS名可以有选择地被发送(例如,每“x”次心跳)来验证或更新主机当前正确的网络地址。
[0188] 从一个特定的主机108将再见消息1504发送到负载平衡单元106来指示特定主机108正计划关闭。再见消息1504包括主机标识符,该标识符可以被查询/映射到特定主机108的网络地址。再见消息1504被主机108用来清除、有意关闭,以促成“快速清除”。然而,如果丢失了再见消息,由于心跳消息1502不再被发送,最终使得高速缓冲存储器对于特定主机108的条目而变得过时。
[0189] 将行变化消息1506从特定主机108发送到负载平衡单元106来指示特定主机108的给定应用316的健康和/或负载已经变化。行变化消息1506包括主机标识符,应用标识符,操作,和用于操作的数据。上面描述了关于心跳消息1502和再见消息1504的示例主机标识符。以上描述了关于健康和负载表1204的与应用有关的条目的应用标识符1302(A)的示例应用标识符。
[0190] 行变化操作可以被添加,删除,或更新。换句话说,用来操作的数据可以是被添加的(用添加操作)或是已经在负载平衡单元106的联合健康和负载高速缓冲存储器1208中存在的信息的代替(用更新操作)。对于删除操作而言,不需要提供数据。消息协议1500被如此定义来使得多个操作可以保证对于单一的行变化消息1506执行。因此,对于特定的主机标识符来说,多组应用标识符、操作、和操作数据可以为主机108的多个应用316重复使用,主机由特定主机标识符来标识。
[0191] 将获得表快照消息1508从特定联合健康和负载高速缓冲存储器1208的特定负载平衡单元106发送到单独的主机108或多个主机108。该获得表快照消息1508请求在主机108的健康和负载基础结构1202为各自的主机108提供各自的健康和负载表1204的快照。该消息包括请求负载平衡单元106的标识,并可以由负载平衡单元106在以下情况下使用:(i)在它已经失效又恢复后;(ii)主机108失效,恢复,并又开始发送心跳消息1502之后;(iii)如果行变化消息1506被发送到负载平衡单元106,但该消息已丢失,因此其联合健康和负载高速缓冲存储器1208与各自主机108的各自健康和负载表1204失去同步;和(iv)等等。
[0192] 对于第三(iii)种情况,在联合健康和负载高速缓冲存储器1208和各自的主机108的各自健康和负载表1204之间缺乏同步可以由来自于各自主机108的后续心跳消息
1502来恢复,因此“错误校验”将指示联合健康和负载高速缓冲存储器1208是过时的。负载平衡单元106然后可以发送获得表快照消息1508以使得它能更新其联合健康和负载高速缓冲存储器1208。这样,对于三种(i,ii,iii)示例情况种的任何一种,负载平衡单元106随后使用获得表快照1508来重构其联合健康和负载高速存储器1208。获得表快照1508可以被重复地以点到点的方式发送到每个主机108或者以组播方式被一次发送到多个主机
108,
[0193] 在如箭头1516所示单个主机108从特定负载平衡单元106接收获得表快照获得表快照消息1508后,发送表快照消息1510被从单个主机108发送到特定负载平衡单元106。发送表快照消息1510的内容可以由健康和负载基础结构1202制备并包括单个主机
108的健康和负载表1204的所有或至少多行以使得特定负载平衡单元106可以重新构建其联合健康和负载高速缓冲存储器1208。发送表快照消息1510可以是分离设计的消息,或者它可以等同于在行变化消息1506中添加操作的序列。
[0194] 假定表状态消息1512和假定错误消息1514与在健康和负载表1204中条目1302的负载平衡器指示1302(C)的目标负载平衡状态和当前负载平衡状态相关。目标负载平衡状态是一种指示,即,健康和负载基础结构1202希望负载平衡单元106在其之下操作。当前负载平衡状态是一种指示,即,健康和负载基础结构1202期望或相信负载平衡单元106当前在其之下操作。通常,这两种负载平衡状态是一致的。
[0195] 然而,目标负载平衡状态在状态指示变化的过渡期间是不同于当前负载平衡状态的。例如,目标负载平衡状态和当前负载平衡状态最初都被设置为有效。一旦检测到主机108和/或其的应用316出现问题,就将目标负载平衡状态指示转为遗漏。使用行变化消息
1506将遗漏指示发送到负载平衡单元106。
[0196] 在所有的负载平衡单元106的所有联合健康和负载高速缓冲存储器1208中注意该指示变化之前有延迟。在此过渡期间,在主机108的健康和负载表1204,目标负载平衡状态是遗漏,而当前负载平衡状态仍然是有效。在将当前负载平衡状态改变到遗漏之前,健康和负载基础结构1202需要确保联合健康和负载高速缓冲存储器1208实际上已经被更新到新的遗漏指示状态。
[0197] 为了核实负载平衡单元106的联合健康和负载高速缓冲存储器1208已经被更新为新的状态指示,健康和负载基础结构1202发送假定表状态消息1512到负载平衡单元106。在传输指示状态指示将有改变的行变化消息1506之后,假定表状态消息1512被发送一段时间(例如,预定的延迟周期)。在本例中,假定表状态消息1512指示表状态应该是遗漏。如虚箭头1518所示的,如果负载平衡单元106的联合健康和负载高速缓冲存储器1208不同于假定状态指示,那么负载平衡单元106对应于该假定表状态消息1512。
[0198] 如果在联合健康和负载高速缓冲存储器1208中的指示确实不同于假定状态指示,那么负载平衡单元106发送假定错误消息1514到发布假定表状态消息1512的主机108的健康和负载基础结构1202。健康和负载基础结构1202然后周期性地重发假定表状态消息1512直到不再从联合健康和负载高速缓冲存储器1208接收假定错误消息1514。在那一点上,健康和负载基础结构1202发送具有新的当前负载平衡状态的行变化消息1506。在这种意义下,联合健康和负载高速缓冲存储器1208该当前负载平衡状态的最终确定器,而健康和负载基础结构1202是目标负载平衡状态的最终确定器。
[0199] 图16展示了用于图12所示的主机108和负载平衡单元106之间通信的示例消息传输方法。示例消息传输方法能够减少由心跳消息1502在通信链接1210上所消耗的带宽。图16的消息传输方法尤其适合于心跳消息1502,但它也可用于消息协议1500的其它消息。
[0200] 示出了一组主机108(1),108(2),108(3)...108(11),和108(12)和负载平衡单元106(1),106(2)...106(u)。每条线代表该组主机108(1,2...12)中成员间联接或内含。该组主机108(1,2...12)构成了节点成员组,这些节点一起工作来传输心跳信息到负载平衡单元106,尽管展示了十二个主机,但是更多或更少的也可以作为任何给定主机组的部分。
而且,所有由负载平衡基础结构106服务的主机108可以被分成一个,两个,三个,或更多组的主机。
[0201] 在描述的实现中,对于主机组108(1,2...12)的成员节点选择一引导来负责向负载平衡单元106发送心跳消息1502。在主机组108(1,2...12)中的每个主机108(非引导)将其心跳消息发送到所选引导。在本例中,主机108(4)是所选引导。
[0202] 利用节点的成员关系,在主机组108(1,2...12)中的每个主机108的心跳信息传输到该组的引导主机108(4)。主机108(4)收集这些心跳信息并将其合并为联合心跳消息1602。然后,联合心跳消息1602(1),1602(2)...1602(u)被发送到各自的负载平衡单元106(1),106(2)...106(u)。这些联合心跳消息1602可以有选择地被压缩来进一步降低带宽消耗。
[0203] 作为另一个可选的,引导主机108(4)可以只转发在组成员中的变化到联合健康和负载高速缓冲存储器1208。换句话说,在该模式下,如果不是唯一,联合健康和负载高速缓冲存储器1208将主要地处理成员的状态变化。引导主机108(4)的责任是,当一个主机108在线时确保传送第一次问好,而当该主机108离线时,确保发送再见消息1504。此外,主机108能够周期性地规定心跳信号1502将被“转发”。这表示引导主机108(4)将其发送到联合健康和负载高速缓冲存储器1208,即使它不代表成员关系的变化。
[0204] 当负载平衡单元106的联合健康和负载高速缓冲存储器1208与健康和负载表1204不同步时,心跳信号1502(包括联合心跳消息1602)由负载平衡单元106使用。例如,缺乏同步可由联合健康和负载高速缓冲存储器1208和/或负载平衡单元106的崩溃或其它故障引起。如上所述,每个心跳消息1502包括错误校验数据,其能用来验证在联合健康和负载高速缓冲存储器1208和健康和负载表1204之间的等同性。如果对于特定主机108和/或其应用316发现不等同,那么从心跳消息1502中获取特定主机108的DNS名。
[0205] 为了以发送表快照消息1510的形式来得到更新后的健康和负载信息1206,由联合健康和负载高速缓冲存储器1208使用DNS名将获得表快照消息1508发送到特定主机108。将不同或相同的获得表快照消息1508发送到发现不等同的每个主机108。最终,可由新的心跳消息1502验证,联合健康和负载高速缓冲存储器1208中的健康和负载信息1206等同于健康和负载表1204中的健康和负载信息1206。这样,可将失效的联合健康和负载高速缓冲存储器1208引导回操作中,而不用人为通过使用消息协议1500和等价的校验方法去处理。
[0206] 图17A和图17B分别展示了用于健康和负载表1204和用于联合健康和负载高速缓冲存储器1208的示例健康和负载信息代理存储场合。在参考图12-16的上述实现中,主机108包括健康和负载基础结构1202。然而,其它的实现可以需要主机不包括健康和负载基础结构1202。
[0207] 例如,主机可以运行一种形式的应用和/或操作系统,其中健康和负载基础结构或没有实现或因为策略原因而没有安装在主机上,结果是,这种类型的主机没有在其上执行的健康和负载基础结构1202。主机1702是这样一个主机,其不执行健康和负载基础结构1202。然而,主机1702可以利用在一个或多个代理上执行的健康和负载基础结构1202,例如代理1704。
[0208] 代理1704具有置于其中并在其上执行的健康和负载基础结构1202,其包括健康和负载表1204。主机1702能够通过为运行在主机1702上的应用向健康和负载表1204提供健康和负载信息1206而使用健康和负载基础结构1202的功能。可选地,代理1704能够通过执行外部监视操作而推断出主机1702上的健康和负载。代理1704被展示为通过冗余配置来产生高可靠性的代理1704(1)和1704(2)。
[0209] 在参考图12-16上述的和参考图18下述的实现中,负载平衡是由包括联合健康和负载高速缓冲存储器1208的负载平衡单元106完成的。然而,其它的实现方式可以通过不包括联合健康和负载高速缓冲存储器1208的负载平衡来实现。
[0210] 例如,可以通过单片的负载平衡硬件或没有/或不能存储或包括联合健康和负载高速缓冲存储器1208其它负载平衡基础结构来完成。负载平衡器1706反映出了这样一种负载平衡装置,它不具有联合健康和负载高速缓冲存储器1208。然而,负载平衡器1706可以利用存在于一个或多个代理上的联合健康和负载高速缓冲存储器1208,例如代理1708。
[0211] 代理1708包括联合健康和负载高速缓冲存储器1208,它存储由负载平衡器1706服务的宿主应用的健康和负载信息1206。当进行负载平衡时,负载平衡器1706通过使用应用程序接口(API)访问联合健康和负载高速缓冲存储器1208的健康和负载信息1206,来使用这些信息,该应用程序接口对于负载平衡器1706来说是本地的,并且由负载平衡器1706支持。可选地,联合健康和负载高速缓冲存储器1208能够调用API来将包含有指示的健康和负载信息1206推到负载平衡器1706。代理1708被展示为通过冗余配置来产生高可靠性的代理1708(1)和1708(2)。
[0212] 图18展示了涉及负载平衡单元106的分类器304和健康和负载处理器314的示例目标应用端点分配过程。在健康和负载处理器314获得联合健康和负载高速缓冲存储器1208之后,就利用其健康和负载信息1206为新的请求/连接来选择应用端点。
[0213] 正如参考图13B在上面所描述的,联合健康和负载高速缓冲存储器1208包括多个主机108的高速缓存健康和负载信息1206。为了有利于从来源于多个主机108的健康和负载信息1206中创建和更新联合健康和负载高速缓冲存储器1208,组织其中的健康和负载信息1206,使得可以通过每个主机108的标识符来访问它。当然,也可以组织健康和负载信息1206,使得为了有利于应用端点的选择而由应用316的类型进行访问。
[0214] 换句话说,健康和负载处理器314能够通过多个主机108的健康和负载信息1206以每个应用316为单位访问健康和负载信息1206。一旦对于每一主机108,已访问了给定应用316的健康和负载信息1206,就可以根据这些健康和负载信息1206进行呼入连接请求的分配。例如,通过选择给定应用316的端点并考虑给定应用316健康端点中的可用相对负载容量,将给定应用316可能的端点分配到呼入连接请求。
[0215] 在描述的实现中,分类器304向健康和负载处理器314发出目标应用端点分配请求1802。如所示,目标应用端点请求1802包括(i)虚拟IP地址和端口,(ii)协议,和(iii)协议规范信息。因此目标应用端点分配请求1802标识呼入连接请求所指向应用316的类型。
[0216] 健康和负载处理器314接收目标应用端点分配请求1802并使用多种选择机制的任何一种和多种来选择至少一个对应于应用316所标识类型的物理端点。为了减少延迟,健康和负载处理器314在多个呼入连接请求上选择待使用的应用端点分配。使用目标应用端点分配响应1804,将该分配从健康和负载处理器314提供到分类器304。如所示,目标应用端点分配响应包括应用316所识别类型的物理IP地址和端口(例如,端点IP1,IP2,和IP3)的分配.
[0217] 可使用一个或多个分配方法完成目标应用端点分配响应1804的分配。例如,示出令牌分配方法1806和百分比分配方法1808。令牌分配方法1806是基于单元的分配方案,而百分比分配方法1808是基于时间的分配方案。
[0218] 令牌分配方法1806根据每个健康端点IP1,IP2,和IP3的各自负载和容量比来为它们各自分配令牌。对于所展示的例子,在所有可用的容量中,IP1有40%的可用容量,IP2有35%的容量,而IP3有25%的可用容量。这样,令牌总数按照这些百分比来进行划分。令牌总数可以作为部分目标应用端点分配请求1802来提供,或者由健康和负载处理器314来确定。
[0219] 可以使用任何总数的令牌,例如10,45,100,250,637,1000,等等。该值是根据每秒中的连接请求总数和应用健康和/或负载变化的速度/频率来确定的。当用应用端点分配来响应每一连接请求时,分类器304“用尽”/消耗一个令牌直到所有的令牌都耗尽;然后,分类器304使用目标应用端点分配请求1802来请求另一个令牌分配。
[0220] 百分比分配方法1808用相似的方法来确定可用相对容量。然而,不是用令牌,而是用持续定时器1810来将这些确定的每应用端点可用的相对容量提供给分类器304。分类器304根据这些可用的相对容量百分比来将目标应用端点分配给呼入连接请求直到持续定时器1810到时。
[0221] 对于百分比分配方法1808来说,分类器304保存应用端点分配运行记录来与该分配百分比结合并跟踪持续定时器1810的时间。当该计时器到时时,分类器304就使用目标应用端点分配请求1802请求另一个百分比分配。
[0222] 应该注意,令牌分配方法1806也可以使用时间限制。如果所分配的令牌太旧,它们将被丢弃并获取新的。否则,分类器304消耗旧的令牌,它是先前根据当前过时的健康和负载信息所分配的。有关由分类器304使用应用端点分配的方法将在下面的题为“示例分类、转发、和请求路由传送”的部分进一步描述。
[0223] 示例会话跟踪
[0224] 本部分描述了如何收集诸如会话信息的主机状态信息并如何将其用于网络负载平衡。本部分主要参考图19-24并阐明会话联系保存功能,例如由会话跟踪器308(图3中的)所提供的。如上面参考图1-3所描述的,每个主机108拥有一个和多个能够提供服务给客户端102的应用316。会话跟踪器308利用会话信息,该会话信息于特定描述的网络负载平衡实现的应用316和客户端102之间所建立的连接环境有关。
[0225] 图19展示了涉及会话信息1902的示例网络负载平衡方法。在连接[1],客户端102(1)被展示为正在通过负载平衡基础结构106来与主机108(2)建立一个新的连接。负载平衡基础结构106可以包括一个和多个负载平衡单元106。当连接请求到达负载平衡基础结构106时,通常该请求被路由传送到主机108,该路由传送过程是根据主机108和/或其应用316(图19中未明确示出)的健康和/和负载信息使用网络负载平衡功能来完成的。
[0226] 当建立了连接[1]时,就在客户端102(1)和服务应用316(在本例中是在主机108(2)_之间建立了会话。该会话提供了在客户端102(1)和主机108(2)之间进行通信交换的环境。会话环境的信息被存储在主机108(2)。当连接[1]完成时,不再使用会话环境。
另一方面,如果客户端102(1)为了由应用316提供的服务而试图启动和主机108之间的另一个连接,那么会话环境还是有用的。如果没有将该另外的连接路由传送到存储该会话环境的相同主机108(2)上,那么客户端102(1)需要创建新的会话环境,对于客户端102(1)的用户来说该会话环境可以是耗时的,数据/处理增强的,和/或不尽如人意的。利用基于健康和/或负载信息的网络负载平衡,没有比将第二连接路由传送到108(2)的随机性更大的可能性。
[0227] 然而,如果负载平衡基础结构106能够访问会话信息和主机108之间的映射,那么负载平衡基础结构106能够把与先前所创建会话的连接请求路由传送到适合的主机108。一些会话信息可以从通过负载平衡基础结构106的分组内容来推断。然而,这种方法因为种种原因是不精确且具有偶然性。第一,会话的创建和结束仅仅是推断出的。第二,有些会话不是用包含在分组中的适合指示来“正式”终止的。例如,有些会话仅仅是暂停。第三,从主机108(2)传输到客户端102(1)的分组可能占据了并不包含在负载平衡基础结构106的路径,这就排除了通过会话信息的负载平衡基础结构106探听这些分组可能。
[0228] 如在图19所展示的,主机108提供会话信息(SI)1902给负载平衡基础结构106。使用来自于主机108的会话信息1902,会话联系保存器1904可以保存所创建的会话和该会话所创建于其上的主机108之间的联系。会话信息1902包括客户端102和特定主机108之间创建的会话和该特定主机108之间的链接或从客户端102和特定主机108之间创建的会话到该特定主机108的映射。该映射作为主机会话信息映射表1906的组成部分能够由会话联系保存器1904来访问的。有关会话信息的更具体描述将在下面尤其是参考图20,22,
23A,23B来给出。
[0229] 在对于会话跟踪的特定描述的实现中,涉及到客户端102的逻辑特点。正如在上面参考图1所展示的,客户端102可以是特定设备和/或设备的特定用户。因此,对于正在从不同的设备来访问主机108的客户端用户来说,会话联系能够仍然被保留。因此持续使用会话信息1902的会话还可以在代理情形下实现(例如,一些因特网服务提供商(ISP))。
[0230] 继续连接[1]的例子,将主机108(2)上创建的会话提供给负载平衡基础结构106作为会话信息1902。具体说来,在主机会话信息映射1906创建客户端102(1)和主机
108(2)的会话环境以及主机108(2)的标识符之间的联接/映射。当对于同样的会话环境,连接[2]的连接请求到达时,会话联系保存器1904将该会话环境放置于主机会话信息映射
1906中并确定主机108(2)与来自于连接/映射的会话环境相关。
[0231] 根据来自于主机会话信息映射1906的主机108(2)到由会话联系保存器1904确定的请求会话环境的映射,将连接[2]路由传送到主机108(2)。在这种情况下,对于负载平衡基础结构106来说,保存会话联系的优先级比保存基于应用健康和负载的网络负载平衡决定的优先级高。然而,当诸如负载很重或当与会话相关的应用和/或主机处于失效状态时,健康和/或负载是比会话跟踪更重要的网络负载平衡因素。
[0232] 有多种与会话相关的连接类型。例如,包括:TCP连接,传输层安全(TLS)/SSL会话,PPTP会话,IPSec/L2TP会话,ISA会话,HTTP基于点心文件的会话,终端服务器会话,管理员定义的会话,等等。具体说来,TCP连接被认为是TCP分组的会话。而且,可以列举并支持由管理员来定义的会话模型。进一步来说,还可以支持通过暂停来描绘的客户端基于IP地址的会话。这是相对非智能的会话支持,但它是一些用户所期望的。
[0233] 来自于客户端102的连接请求随着所希望的会话的类型而变化。例如,对于“TCP连接”型的会话来说,该连接请求包括TCP分组。对于“SSL会话”型的会话来说,该连接请求包括TCP连接。其它的这些连接请求对应于其它的会话类型。这些例子也展示了会话层是如何存在的。在较低会话层,TCP连接的会话环境包括TCP四字节组、会话号、所发送/接收的字节数等等。在较高会话层,SSL会话的会话环境包括32字节的会话ID、被提供给主机108的客户端102的公共密钥等等。
[0234] 图20展示了涉及使用通知2006和消息2008来传输会话信息的示例网络负载平衡方法。示出多个负载平衡单元106(1),106(2)...106(u)和多个主机108(1),108(2)...108(n)。每个主机108(1),108(2)...108(n)包括置于其中并在其上运行的一个或多个各自的应用316(1),316(2)...316(n)。通知2006被用来提供来自于应用316的会话信息,消息2008被用来将来自于主机108的会话信息提供到负载平衡单元106。
[0235] 如所示,每个主机108(1),108(2)...108(n)包括各自的会话跟踪基础结构(STI)2002(1),2002(2)...2002(n)。每个会话跟踪基础结构2002(1),2002(2)...2002(n)包括各自的会话表2014(1),2014(2)...2014(n)(尽管在图19只示出了会话表2014(1))。
[0236] 每个负载平衡单元106(1),106(2)...106(u)包括各自的业务量路由传送功能(TRF)2012(1),2012(2)...2012(u)。业务量路由传送功能2012包括,例如,分别由分类器304和请求路由器306提供的分类和/或请求路由传送功能。分布于负载平衡单元106(1),
106(2)...106(u)上的是分布式会话跟踪管理器2010。
[0237] 在描述实现中,业务量路由传送功能2012和分布式会话跟踪管理器2010构成了负载平衡基础结构106的组成部分。会话跟踪基础结构2002也可以是部分负载平衡基础结构106的(例如,远端)。
[0238] 利用API 2004将会话信息从应用316提供到会话跟踪基础结构2002。使用API2004,使应用316能够通知会话跟踪基础结构2002会话信息,包括信息的各种变化。更具体来说,每个应用316能够提供通知2006,而会话跟踪基础结构2002能够接收通知
2006。
[0239] 当创建或开启新的会话时,从应用316提供会话已建立的通知(或会话建立通知2006(E))。会话建立通知2006(E)包括会话标识符并可选地包括应用316的标识符。当中止或关闭会话时,从应用316提供会话已中止的通知(或会话中止通知2006(T))。会话终止通知2006(T)也包括该会话的标识符并可选地包括该应用316的标识符。
[0240] 当会话跟踪基础结构2002接受会话建立通知2006(E)时,它为该新的会话在会话表2014中插入条目。示例的会话表2014将在下面参考图23A进一步描述。当会话跟踪基础结构2002接受会话中止通知2006(T),它为将旧的会话从会话表2014中删除该条目。
[0241] 会话表2014(1)是关于在主机108(1)上的应用316(1)的会话信息的权威来源。然而,在接收到具有会话参考的每个呼入连接请求时,需要业务量路由传送功能2012与主机108联系来访问会话表2014,这通常有太多的延迟。会话信息1902因此而被缓冲存储在负载平衡单元106中。
[0242] 在负载平衡单元106,分布式会话跟踪管理器2010缓存会话信息1902作为其会话跟踪管理责任的组成部分。通常,分布式会话跟踪管理器2010是分布式应用和/或部分置于每个负载平衡单元106上的虚拟服务。对于每个逻辑会话,分布式会话跟踪管理器2010用可靠并可扩展的方式为其保存会话信息的至少一个缓存备份,当具有会话参考的呼入连接请求被负载平衡基础结构106接收到时,这种方式可以快速地用于路由业务。
[0243] 在主机108和负载平衡单元106之间的通信是通过可靠的协议来完成的,该协议确保从主机108发送来的消息2008到达所希望的负载平衡单元106。每个主机108必定与至少特定的负载平衡单元106相关联,该平衡单元是消息2008希望的负载平衡单元106。这种联接关系是通过给每个主机108赋予特定负载平衡单元106的IP地址来创建的,其用来在会话跟踪基础结构2002和分布式会话跟踪管理器2010之间发送会话跟踪消息2008。
为了有助于提高负载平衡基础结构106的可靠性,如果负载平衡单元106失效,则另一个负载平衡单元就采用失效的负载平衡单元106的IP地址。所采用的IP地址的失效检测可以通过使用心跳或另外的活动监视方法来完成。
[0244] 这样,消息2008将会话信息1902从会话跟踪基础结构2002传输到分布式会话跟踪管理器2010。例如,当会话跟踪基础结构2002接受会话建立通知2006(E)时,它还发送会话开启消息2008(U)给分布式会话跟踪管理器2010。会话开启消息2008(U)包括会话标识符,主机标识符,并可选地包括其它信息。有关会话开启消息2008(U)的内容将在下面参考图23B进一步描述,对于每个会话,由分布式会话跟踪管理器2010的实现存储该消息。当会话跟踪基础结构2002接受会话中止通知2006(T)时,它还发送会话关闭消息2008(D)给分布式会话跟踪管理器2010。消息2008可以在会话跟踪基础结构2002根据通知2006适当地修改会话表2014之前,期间或之后发送。
[0245] 图21展示了涉及用通知和消息来传输会话信息的示例网络负载平衡方法的流程图2100。流程图2100包括十五个框2102-2130。尽管流程图2100的操作可以在其它环境下用多种软件方式来执行,但是,特定于使用图1-3和19-20来展示该方法的某些方面和例子。
[0246] 例如,四个框2102-2104和2118-2120的操作是通过应用316来执行的,六个框2106-2110和2122-2126的操作是由会话跟踪基础结构2002来执行的,而五个框2112-2116和2128-2130的操作是由分布式会话跟踪管理器2010来执行的。八个框2102-2116的操作主要针对开启会话,而七个框2118-2130主要针对关闭会话。
[0247] 在框2101,开启会话。例如,应用316可以开启与客户端102的会话。在框2104,提供会话建立通知。例如,作为开启会话的结果和/或与开启会话的结合,应用316用API2004将会话建立通知2006(E)提供给会话跟踪基础结构2002。
[0248] 在框2106,接受会话建立通知。例如,会话跟踪基础结构2001可以根据API2004从应用316接受会话建立通知2006(E)。在框2108,在会话表中插入条目。例如,会话跟踪基础结构2002可以为所开启的会话在会话表2014中插入条目。这种插入的例子尤其将在下面参考图23A来进一步描述。在框2110,发送会话开启消息。例如,会话跟踪基础结构2002可以用可靠的通信协议发送会话开启消息2008(U)到分布式会话跟踪管理器2010。
[0249] 在框2112,接收会话开启消息。例如,分布式会话跟踪管理器2010可以根据可靠的通信协议来从会话跟踪基础结构2002接收会话开启消息2008(U)。在框2114,创建会话信息条目。例如,分布式会话跟踪管理器2010可以在一个或多个负载平衡单元106中为缓存的会话信息1902创建会话信息条目。这种创建和随后的添加操作的例子尤其将在下面参考图22和23B来进一步描述。
[0250] 在框2116,用会话信息路由传送网络业务。例如,与分布式会话跟踪管理器2010结合在一起的业务量路由传送功能2012可以使用缓存的会话信息1902,包括所创建的会话信息条目,以路由传送具有会话参考的呼入连接请求。这种业务量路由的例子尤其将在下面参考图24来进一步描述。其它的例子将在下面的题目为“示例分类、转发、和请求路由传送”的部分中来描述。
[0251] 在框2118,关闭该会话。例如,应用316可以关闭与客户端102的会话。在框2120,提供了会话中止通知。例如,作为关闭会话的结果和/或与关闭会话结合,应用316用API2004将会话中止通知2006(T)提供给会话跟踪基础结构2002。
[0252] 在框2122,接受会话中止通知。例如,会话跟踪基础结构2002可以根据API2004从应用316接受会话中止通知2006(T)。在框2124,在会话表中移除条目。例如,会话跟踪基础结构2002可以为所中止的会话在会话表2014中移除条目。在框2126,发送会话关闭消息。例如,会话跟踪基础结构2002可以用可靠的通信协议发送会话关闭消息2008(D)到分布式会话跟踪管理器2010。
[0253] 在框2128,接收会话关闭消息。例如,分布式会话跟踪管理器2010可以根据可靠的通信协议来从会话跟踪基础结构2002中接收会话关闭消息2008(D)。在框2130,破坏会话信息条目。例如,分布式会话跟踪管理器2010可以在任何具有该会话信息条目的负载平衡单元106处缓存的会话信息1902破坏会话信息条目。这种破坏和随后的删除操作的例子尤其将在下面参考图22和23B来进一步描述。
[0254] 图22展示了在多个负载平衡单元106中管理会话信息的示例方法。每个负载平衡单元106(1),106(2)...106(u)各自包括分布式原子管理器(DAM)2202的部分2202(1),2202(2)...2202(u)。DAM2202是分布式会话跟踪管理器2010的示例实现方式。每个DAM部分2202(1),2202(2)...2202(u)各自包括DAM表(DAMT)2206的部分2206(1),
2206(2)...2206(u)。
[0255] DAM2202是分布式应用或虚拟服务,其能够以可靠和可扩展的方式来管理会话信息1902,以使得业务量路由传送功能2012可以用它来保存会话联系。例如,业务量路由传送功能2012可以通过使用API(没有具体示出)访问DAM2202以搜索DAMT2206来。函数调用2204,DAM2202的操作,和图22的其它方面将在图23A和23B的描述之后进一步来描述。
[0256] 图23A是在图20说展示的示例会话表2014。会话表2014包括“v”个条目2302(1),2302(2)...2302(v)。根据从个应用316接受的会话建立通知2006(E)由会话跟踪基础结构2002插入每个条目2302。根据从应用316接受的会话中止通知2006(T)由会话跟踪基础结构2002移除每个条目2302。
[0257] 正如上面所描述的,每个会话建立通知2006(E)包括会话标识符并可选地包括应用316的标识符。在会话表2014中的每个条目2302(1),2302(2)...2302(v)包括各自的字段:(i)会话标识符2302(1I),2302(2I)...2302(vI)和(ii)会话类型和/或应用2302(1T),2302(2T)...2302(vT).
[0258] 会话类型和/或应用2302(T)可以是“TCP”、“IPSEC”、“终端服务器”、“HTTP-点心文件”、如上面所述的、应用类型等等。会话标识符2302(I)可以是“<源IP地址,源TCP端口,目的IP地址,目的TCP端口>”,“客户端IP=172.30.189.122”,“用户=’joe_user”’,“点心文件=’{b7595cc9-e68b-4eb0-9bf1-bb717b31d447}”’,另外的例如对于会话的特定于应用的识别,等等。对于TCP连接/会话类型,会话标识符2301(I)可以有选择地是TCP4字节组的规范形式(对IPv4或IPv6来说)。对于会话标识符2302(I)和应用/会话类型2302(T)的字段可以有选择地使用其它值。
[0259] 图23B是在图22中所展示的示例的分布式原子管理器(DAM)表(DAMT)2206。DAM表2206包括“w”个条目2304(1),2304(2)...2304(w)。根据从会话跟踪基础结构2002接收的会话开启消息2008(U)由DAM2202创建每个会话信息条目2304。根据从会话跟踪基础结构2002接收的会话关闭消息2008(D)破坏每个会话信息条目2304。正如在下面进一步所描述的,DAM表2206的会话信息条目2304实际上是可以由DAM2202用函数调用2204来操作的。
[0260] 如上所述,会话开启消息2008(U)包括会话标识符,主机标识符,并可选地包括其它信息。在DAM表2206中的每个会话信息条目2304(1),2304(2)...2304(w)包括各自的字段(i)密钥2304(1K),2304(2K)...2304(wK),(ii)数据2304(1D),2304(2D)...2304(wD),和(iii)元数据2304(1M),2304(2M)...2304(wM)。例如,密钥2304(K)的值可以是包括文字与数字的字符串,而数据2304(D)的值可以是二进制位。密钥2304(K)的值也可以是二进制位。
[0261] 密钥2304(K)可以对应于会话标识符2302(I)。数据2304(D)可以对应于主机标识符,例如存在会话环境的主机108的网络地址。元数据2304(M)可以对应于其它可选的信息。这种元数据2304(M)的例子包括被DAM2202在内部使用来解决原子冲突和跟踪原子的活动性(例如,通过暂停机制)的数据。(这种原子的条目2304的特征将在下面段落中更全面地进行描述)。更具体来说,元数据2304(M)还包括将会话信息条目2304添加到DAM表2206的实体(例如,业务量路由传送功能2012的情况)的标识。
[0262] 在描述的实现中,每个会话信息条目2304是原子的,在这种情况下,DAM2202可以对这些条目2304整个地添加、删除、复制等等,但是DAM2202一般不能修改任何整体条目2304的一部分。这样,为了实现对会话联系保存实现的有效性和可扩展性,在DAM表2206上由DAM2202对原子条目2304添加,删除,复制,操作等。
[0263] 函数调用2204(图22)可由DAM2202用于操作DAM表2206的原子条目2304。可将函数调用2204以点到点的或组播的方式组播从负载平衡单元106传输到一个或多个其它的负载平衡单元106。这些函数调用包括添加原子2204(A),删除原子2204(D),查询原子2204(Q),和返回原子2204(R)。
[0264] 添加原子2204(A)采用AddAtom(key(密钥),data(数据))的形式并用于将原子条目2304添加到一个或多个DAM表2206。因此,添加原子2204(A)的函数调用可以格式化为AddAtom(,主机IP地址)。删除原子2204(A)采用DeleteAtom(key(密钥))的形式并用于在一个或多个DAM表2206中删除原子条目2304。删除原子2204(D)的函数调用可以被指向DAM表2206,这些DAM表已知拥有由密钥
2304(K)标识的或可以被组播到所有DAM表2206的会话副本,以确保删除了所有副本。
[0265] 查询原子2204(Q)采用QueryAtom(key(密钥))的形式并且当由呼入连接请求所参考的会话标识符不在特定DAM部分2202的特定本地DAM表2206时,由该特定DAM部分2202来使用。查询原子2204(Q)函数调用被发送到一个或多个(包括所有可能的)其它DAM部分2202。相应地,每个其它DAM部分2202检查其本地DAM表2206中的密钥/会话标识符。如果该密钥由另一个DAM部分2202定位,那么该其它DAM部分2202就用返回原子2204(R)进行回复。
[0266] 返回原子2204(R)采用ReturnAtom(key(密钥),data(数据))的形式并用于回复查询原子2204(Q)函数调用。当DAM部分2202在其本地DAM表2206中有所请求的原子条目2304时使用返回原子2204(R)函数调用,其中表2206由在查询原子2204(Q)函数调用中规定的密钥2304(K)来标识的。返回原子2204(R)函数调用可以被指回到发布该查询原子2204(Q)函数调用的DAM2202部分。
[0267] 添加原子2204(A)函数调用被用来响应会话开启消息2008(U)和/或复制原子条目到一个或多个其它DAM表2206。这种复制是为了冗余和/或扩展性。
[0268] 删除原子2204(D)函数调用被用来响应会话关闭消息2008(U)并也可以被发送到一个或多个其它的DAM表2206。在删除原子条目2304之后,该原子条目2304可以进入“僵尸”状态,使得它保留在DAM2202中,并且可选地使得它实际上还以在该原子条目2304的元数据2304(M)字段中的僵尸指示存储在DAM表2206中。
[0269] 这样,一旦原子条目2304被删除,它就可以仍然停留在DAM2202中并以僵尸状态存储在DAM表2206中,以使得将该会话(现在结束并关闭)的分组传送到会话环境的主机108,以进行合适的特定于协议的处理。例如,将卸除TCP连接之后接收的TCP分组传送到终止该连接的主机108。该主机108可以作出适当的响应——可能通过发送RST或重新发送FIN-ACK。原子条目2304在僵尸状态的所花费时间匹配于(尽可能合理的接近于)所使用的可靠通信协议的特定于协议的结束时间。
[0270] 当第一负载平衡单元106接收呼入连接请求时,查询原子2204(Q)函数调用用于获得原子条目2304,该呼入连接请求参考并没有存储在第一负载平衡单元106的DAM2202的本地DAM表2206中的会话来。应该注意:可以在广播查询原子2204(Q)函数调用中同时查询或者顺序查询其它的DAM部分2202直到接收到明确的返回原子2204(R)函数调用。
[0271] 由第二负载平衡单元106的DAM部分2202使用返回原子2204(R)函数调用以将原子条目2304提供到第一负载平衡单元106的DAM部分2202,其中原子条目2304具有在查询原子2204(Q)函数调用中由密钥/会话标识符规定的密钥,而查询原子2204(Q)函数调用是由第一负载平衡单元106的DAM部分2202先前发出的。应该注意,其它的部件,例如业务量路由传送功能2012,也可以根据API或相似的方式调用函数2204,尤其是查询原子2204(Q)函数调用。
[0272] 可以各种方式组织和管理DAM部分2202和DAM表2206。示例的方式包括复制/冗余,获取之后的本地高速缓存,定位选择的散列法,等等。可以使用零、一、二,或更高级别的复制,直到完全复制。使用零级别的复制,每个原子条目2304被存储在DAM2202中,其接收对于该条目的会话开启消息2008(U)而无需复制到其它的DAM部分2202来。
[0273] 使用第一级别的复制,每个原子条目2304被存储DAM2202中,其接收对于该条目的会话开启消息2008(U),并且还使用添加原子2204(A)函数调用将该条目添加(复制)到一个其它DAM部分2202。这处理负载平衡单元106的一个级别的故障。相似地,使用第二级别的复制,每个原子条目2304被存储DAM2202中,其接收对于该条目的会话开启消息2208(U),并且还将该条目也添加到两个其它的DAM部分2202中。通常,预先确定或随机选定给定DAM部分2202将原子条目2304复制到其它DAM部分2202的数量:一个,两个,等等。也可以使用第三,第四,等等级别的复制。
[0274] 进一步来说,可以使用完全复制,使每个原子条目2304存储DAM2202中,其接收对于该条目的会话开启消息2008(U),并因此还将该条目添加到每一个其它的DAM部分2202。有几个因素受到所选择的复制级别的影响:随着复制级别的增加,可靠性增加而延迟降低。
另一方面,网络业务量和存储器使用率都随着复制级别的增加而增加。
[0275] 当不使用完全复制时,可以在获取之后进行本地高速缓存。例如,当DAM部分2202没有将所参考的会话标识符定位在其DAM表2206部分时,DAM部分2202就发出查询原子2204(Q)函数调用以通过返回原子2204(R)函数调用获得与参考的会话标识符相关的原子条目2304。在使用所获得的原子条目2304之后,不是将其丢弃,而是由所述DAM部分2202在其部分DAM表2206高速缓存所获取的原子条目2304。这种选择提供以上所列举的因素之间的折中。
[0276] 作为不使用完全复制时的另一个选择,可以使用定位选择的散列法。会话的第一原子条目2304被存储在接收该会话开启消息2008(U)的DAM部分2202。通过添加原子2204(A)函数调用将所复制的副本发送到使用散列函数的特定DAM2202部分。在所有可能的散列值中,每个DAM部分2202被赋予其中一个子集。用一些散列函数散列每个会话标识符以得出散列值。将该散列值映射到所赋予的DAM部分2202。然后首先添加原子条目2304的DAM部分2202将原子条目2304复制到所赋予的DAM部分2202。
[0277] 通过定位选择的散列法,从会话标识符就可知晓至少一个具有在其DAM表2206中本地高速缓存的所需原子条目2304的DAM部分2202。因此将查询原子2204(Q)函数调用指向已知的DAM部分2202。这通常降低了网络业务量和/或延迟。
[0278] 这种定位选择的散列法可以与一级、二级、三级、或更高级别的复制一起使用,其具有映射到一个、二个、三个等不同DAM部分2202的各自的散列值。此外,可以将定位选择的散列法与获取之后进行本地高速缓存的方法结合使用、
[0279] 图24展示了在多个负载平衡单元用于管理会话信息的示例方法的流程图2400。流程图2400包括八个框2402-2416。尽管所述流程图2400的操作可以在其它环境下用多种软件方法来执行,但是特定于用图1-3,19,20,22,和23B来展示该方法的某些方面和例子。
[0280] 在框2402,分析带有会话参考的呼入连接请求。例如,业务量路由传送功能2012接收参考特定类型的先前开启/创建的会话的呼入连接请求。在框2404,用会话参考搜索本地DAM表。例如,对于给定负载平衡单元106和业务量路由传送功能2012来说,其DAM部分2202可以搜索其相应的DAM表2206来查找该会话参考。
[0281] 在框2406,确定会话参考是否匹配本地DAM表的密钥。例如,DAM部分2202可以搜索DAM表2206的多个条目2304的密钥字段2304(K)来确定会话参考是否匹配密钥字段2304(K)的任意值。如果是,流程图2400继续进行到框2412。
[0282] 另一方面,如果会话参考不匹配任何密钥,那么流程图2400进行到框2408。在框2408,进行查询原子函数调用。例如,DAM部分2202可以进行包括以会话参考/标识符作为密钥的查询原子2204(Q)函数调用。可将查询原子2204(Q)函数调用发送到至少一个其它DAM部分2202。查询原子2204(Q)可能的目的DAM部分2202的数量、选择和顺序依据由DAM2202所使用的选择(例如,复制级别,定位选择的散列法,获取之后进行本地高速缓存,点到点对组播,等等)。
[0283] 在框2410,接收返回的原子。例如,接收来自于由另一个DAM部分2202发出的返回原子2204(R)函数调用中的信息。其它DAM部分2202成功地将原子条目2304定位于其相应的DAM表2206中,其中所定位的原子条目2304具有与会话参考匹配的密钥。来自于返回原子2204(R)函数调用的信息包括所定位的原子条目2304的密钥字段2304(K)和数据字段2304(D)的值。这些值对应于会话的会话标识符和与该会话相联系的主机108的网络地址。
[0284] 在框2412,提取原子条目。如果在本地(在框2404和2406)发现了个匹配就从本地DAM表中提取原子条目,或者如果在其它地方发现匹配(在框2408和2410),就从返回的原子中提取该原子条目。例如,从DAM部分2202的DAM表2206中或者从由返回原子2204(R)函数调用接收到的信息中提取原子条目2304。如果是作为返回原子2204(R)函数调用的结果而接收的,将所提取的原子条目2304在本地DAM表2206高速缓存。
[0285] 在框2414,从原子条目确定与参考会话有会话联系的主机。例如,确定所提取的原子条目2304的数据字段值,以确定联系的主机108的网络地址。在框2416,将呼入连接请求路由传送到确定的主机。例如,业务量路由传送功能2012和/或转发功能可以将具有会话参考的呼入连接请求路由传送到所确定的和联系的主机108。示例的分类、请求路由传送和转发功能将在下面的部分中进行描述。
[0286] 示例分类、转发和请求路由传送
[0287] 本部分描述了业务量路由传送是如何被实施来进行网络负载平衡的,包括有关此业务量路由传送功能的高可靠性。业务量路由传送包括分类和/或请求路由传送功能,尤其是和转发功能结合在一起的。本部分主要参考图25-31。它阐明了请求路由器306(图3中的)的功能,在路由传送业务量时跟踪会话和使用健康和负载信息之间的内部关系,业务量路由传送与会话信息和/或健康和负载信息的交互的操作实现,用于网络负载平衡基础结构高可靠性的故障排除过程(包括处理分类、转发故障和/或请求路由传送部件的故障),附加的网络负载平衡基础结构配置,等等。
[0288] 图25展示了具有由请求路由器306(H/S)实现的请求路由传送功能的示例网络负载平衡基础结构。如在上面参考业务量路由传送功能2012所描述的,业务量路由传送涉及分类(例如,用转发)和/或请求路由传送。在上面尤其参考了图4来结合转发来描述了分组级的分类。请求路由传送将特定于参考图25来在此进行描述。
[0289] 请求级的路由传送比分组级的路由传送发生在更高级别上。通常,请求路由器306用作在主机108上运行的应用316的代理。请求路由器306终止TCP连接,对每一个来自客户端102的请求进行(或部分地)语法分析,并重新提交每一个请求到主机108。请求路由器306可以在连接上执行预处理,例如SSL解密。请求路由器306可以选择接受某些请求(例如,请求路由器可以保持一个高速缓冲存储器容量的响应),并且它可以在将请求转发到主机108之前“任意地”地修改请求。
[0290] 请求路由器306通常是特定于应用的,并且它们的功能是可以扩展的。仅仅作为例子,在下面的描述中提出了单一类别的请求路由器306-HTTP/SSL请求路由器306(H/S)。如所示,拥有网络地址CI的客户端102正通过网络104与分别具有网络地址H1和H2的主机108(1)和108(2)进行通信。通信是通过包括HTTP/SSL请求路由器306(H/S)的负载平衡基础结构来完成的。
[0291] HTTP/SSL请求路由器306(H/S)终止HTTP和SSL业务、解密SSL业务、检查来自于客户端102的每个HTTP请求、应用特定于应用的规则来对每一个请求进行分类并在考虑应用端点的健康和负载信息的同时为每个请求确定“最好”的端点,并提交请求到端点。将请求提交到端点使用单独的TCP连接而不是由客户端102所起始的连接(后者在HTTP/SSL请求路由器306(H/S)中终止)。这些操作逻辑上可以被认为与由分类器304所执行的操作是相同的,但是在HTTP/SSL请求路由器306(H/S)中的这些操作中所呈现的不同出现于TCP连接内每个请求的的逻辑请求级别。HTTP/SSL请求路由器306(H/S),和请求路由器306通常可以用相同的应用健康和负载和相同的由分类器304使用的会话跟踪基础结构。
[0292] HTTP/SSL请求路由器306(H/S)用作客户端102和两个主机108(1)和108(2)之间的仲裁。它通过单一的TCP连接来处理来自于客户端102的两个请求。在描述的实现中,最终的请求路由传送包括多个操作。第一,客户端102创建到HTTP/SSL请求路由器306(H/S)的http连接[1]并发送请求#1 2502(1)。
[0293] 第二,HTTP/SSL请求路由器306(H/S)终止SSL会话(如果该业务是SSL加密的),对请求#12502(1)进行语法分析,并检查请求#12502(1)的内容。在本例中,通过考虑应用的健康和负载信息以及会话信息,HTTP/SSL请求路由器306(H/S)为特定请求#12502(1)确定主机108(1)是“最好”的主机。
[0294] 第三,HTTP/SSL请求路由器306(H/S)创建到主机108(1)的辅助TCP连接[2]。辅助TCP连接并不是源自网络104上的VIP地址;而是,它源自一个专用于请求路由器306(H/S)的地址(在图25中没有示出)以保证来自于主机108的响应2504到达正确的请求路由器306。(尽管为了清楚在图25中只示出了一个请求路由器306(H/S)但是可以有多个活动的请求路由器306)。可选地它可以使用现有的到主机108(1)的连接[2]。然后HTTP/SSL请求路由器306(H/S)发送诸如未加密形式的请求#12502(1)到主机108(1)。第四,主机108(1)用响应#12504(1)来回复。第五,HTTP/SSL请求路由器306(H/S)加密响应#12504(1)并在TCP连接[1]上将它发送回客户端102。
[0295] 第六,客户端102发送另一个请求,请求#22502(2)。请求#22502(2)的处理类似于请求#1 2502(1)的处理,除非HTTP/SSL请求路由器306(H/S)选择主机108(2)。进行不同的选择可能是因为主机108(1)正处于故障中或承担了更多负载,因为请求#22502(2)被指向了一个与请求#12502(1)不同的URL,等等。不管怎样,HTTP/SSL请求路由器306(H/S)创建另一个辅助TCP连接,但是辅助连接[3]是到主机108(2)的。将未加密的请求#22502(2)路由传送到主机108(2),并且作为结果从其接收响应#22502(2)。接着将加密形式的响应#22502(2)从HTTP/SSL请求路由器306(H/S)发送到客户端102。
[0296] 第七,客户端102关闭与HTTP/SSL请求路由器306(H/S)的TCP连接[1]。HTTP/SSL请求路由器306(H/S)(在将来的某个时候)代表客户端102关闭分别连接到主机108(1)和108(2)的连接[2]和[3]。TCP连接[2]可以有选择地在HTTP/SSL请求路由器306(H/S)决定为请求#22502(2)打开/使用TCP连接[3]之后被关闭。
[0297] 由于HTTP/SSL请求路由器306(H/S)终止了http连接,HTTP/SSL请求路由器306(H/S)可以进行路由请求以外的操作。例如,HTTP/SSL请求路由器306(H/S)潜在地保持其自己的高速缓冲存储器容量的响应(例如,具有使高速缓冲存储器无效的带外机制)。
如在上面所述的例子,HTTP/SSL请求路由器306(H/S)也可以根据诸如所请求的URL,潜在地将不同种类的请求路由传送到不同组的主机108。反过来,HTTP/SSL请求路由器306(H/S)可以潜在地聚集来自于许多短期的客户连接的请求,并通过一些长期的TCP连接上将它们发送到主机108。这种连接聚集可以降低主机108中TCP连接处理的额外开销。
[0298] 其它类的请求路由器对应于除HTTP之外的其它示例协议。例如,请求路由器可以是SOAP请求路由器。SOAP请求路由器的操作类似于HTTP/SSL请求路由器306(H/S)。然而,SOAP请求路由器专门用于路由传送SOAP业务。SOAP请求路由器知晓SOAP的标头并根据SOAP标头和应用的健康和负载作出路由传送的决定。
[0299] 分组级的分类和转发(或分组级的路由传送)和请求级的路由都可以提供一些形式的第7层负载平衡。第7层负载平衡将在下面的题为“用可选穿越和/或应用级负载平衡进行示例连接转移”的部分来进一步描述。分组级的路由传送提供了到客户的TCP连接数据的只读访问,而请求级的路由传送提供了对整体的数据流进行读和修改访问。
[0300] 与请求级路由传送相比,分组级路由传送通常有几个优点。这些优点包括透明性(客户分组以以下形式传送到主机,即保存源和目的IP地址和端口数),低处理开销(一般是,转发业务包括路由查找),低延迟(分组独立转发,并且一旦确定TCP连接目的分组不需要排队),和高可靠性(通常,在传送器中故障并不终止TCP连接)。另一方面,请求级的路由传送通常具有超越分组级的路由传送的下述优点:检查流向和来自于客户端的整个数据流的能力;和转换数据流的能力,和在多个主机之间分离数据流和从多个客户端聚集数据流的能力。
[0301] 图26展示了关于会话信息和健康和负载信息的用于路由传送呼入分组的示例方法的流程图2600。流程图2600包括八个框2602-2616。尽管流程图2600的操作可以在其它环境中用多种软件来执行,但是特定于使用图1-3,12,18-20,22和23B来展示该方法的某些方面和例子。
[0302] 在框2602,接收呼入分组。例如,可以在负载平衡单元106的传送器302中接收来自于客户端102的分组。在框2604,确定是否该接收的分组是用于预先存在的会话。例如,传送器302可以查询本地DAM表2206()来确定所接收到的分组已经是TCP/IP会话的组成部分。
[0303] 此外,传送器302可以查询本地DAM表2206()并确定该接收到的分组还不是TCP/IP会话的组成部分。在此情况下,传送器302将所接收的分组提供给分类器304,其用更高级别的会话联系来检测所接收的分组是否有会话参考。这些操作的例子在上面尤其参考图24进行了描述并且将进一步在下面尤其参考图27和28来进一步描述。
[0304] 如果所接收到的分组是用于预先存在的会话(如在框2604中所确定的),那么继续执行到框2606。在框2606,确定与该预先存在的会话联系的主机。例如,可以由传送器302或分类器304从本地DAM220()和/或整个分布式DAM2206来确定联系的主机108。
[0305] 在框2608,确定该联系主机是否健康。例如,分类器304查询联合健康和负载高速缓冲存储器1208来确定联系的主机108是否健康,尤其查询那些接收的构成比TCP/IP会话逻辑级别高的会话的分组。该框的操作可以与健康和负载处理器314一起来完成。
[0306] 如果该联系的主机是健康的(如在框2608中确定的),那么继续进行到框2610。在框2610,将接收到的分组路由传送到联系的主机。例如,传送器302(利用TCP/IP会话)或分类器304(用于更高级别的会话)可以将分组路由传送到联系的主机108。在可选的实现中,分类器304可以将所接收到的分组返回到传送器302以路由传送到联系的主机108,即使对于更高级别会话的接收分组也是这样。
[0307] 如果,另一方面,联系的主机不是健康的(在框2608所确定的),那么流程继续到框2612。而且,如果另一方面,所接收到的分组不是用于预先存在的会话(如在框2604中确定的),那么流程继续到框2612。在框2612,根据健康和负载信息选择主机。例如,分类器304可以从和/或者用与健康和负载有关的应用分配来(例如,从目标应用端点分配响应1804)选择主机108,该分配是从健康和负载处理器314获得的。这些操作的例子尤其参考图19和18在上面进行了描述并且将尤其参考图30在下面进一步描述。
[0308] 在框2614,将所接收的分组路由传送到所选择的主机。例如,分类器304可以将该分组路由传送(可选地通过传送器302)到所选择的主机108。在框2616,探测到所选择的主机的连接路径的路由。例如,分类器304可以将会话信息条目添加到DAM表2206,尤其是在DAM表2206(),其对于将该分组提供到分类器304的传送器来说是本地的。可以根据(例如,会话跟踪器308的)DAM2202所构建的冗余策略复制该会话信息条目。
[0309] 框2614和框2616中的操作可以依照具体描述的顺序来执行,框2616的操作可以先于框2614的操作来执行,这些操作可以以任意顺序部分或全部地交叠,等等。应该注意,上面所述的由分类器304执行的操作可以有选择地被请求路由器306执行(或更一般的业务量路由传送功能2012)。
[0310] 除了分组级和请求级路由传送外,在此所描述的业务量路由传送功能(例如,业务量路由传送功能2012、请求路由器306、传送器302/分类器304对,等等)也可以被用来实现防火墙功能。因此,业务量路由传送功能的特征可包括阻塞业务,而不是自动将业务路由传送到正确的主机108。例如,分类器304可以检测业务,并且如果该业务被认为不安全则将其扔掉。
[0311] 图27展示了在无故障情况下的示例业务量路由传送流程。如所示,一个或多个知晓负载平衡的交换机202(LBA)面向剩余的负载平衡基础结构106(没有单独示出)。转发和分类功能被分布到三个设备或节点上。第一设备包括传送器302(1)和分类器304(1)。第二设备包括分类器304(2)。第三设备包括传送器302(2)。
[0312] 分类器304(2)在第二设备上运行而传送器302(2)在第三设备上运行,这样每个设备可以具体对其各自的功能进行调节。例如,第二设备和第三设备的硬件,软件,防火墙,及其它们的组合等等,可以适配于支持所希望的功能而不会超出所规定的。这样,包括传送器302(2)的第三设备在硬件能力方面来看类似于交换机和/或路由器,而包括分类器304(2)的第二设备在硬件能力方向看更类似服务器和/或个人计算机。
[0313] 尽管示出了在四个部件上提供功能的三个设备,但是,用于转发和分类功能的可选的逻辑和/或设备级的配置也适用于在这里用图27所描述的示例业务量路由传送流程。而且,尽管路由传送目的示为主机108,但是这里描述的路由传送实现可以可选更一般地适用于分组的下一个节点目的并且不需要是分组的最终节点。
[0314] 会话跟踪器308的DAM2202实现被用来实现DAM表2206。然而,会话联系保存器1904一般也适用于图27的示例业务量路由传送。传送器302(1)包括DAM表部分2206(1),而传送器302(2)包括DAM表部分2206(2)。呼入分组被路由传送到主机108(1)或主机
108(2)。
[0315] 在描述的实现中,DAM2202是分布式的,具有会话信息的“原子”的存储表2304(例如,关键字-值对,带有可选的元数据)。DAM2202和DAM表2206在上面尤其参考图22-24进一步进行了描述。在分类器304群中的任何节点可以添加,查询,和删除原子2304。DAM2202保存高可靠的DAM表2206,该表除了更高级别的会话信息外,还包括活动(例如,TCP/IP级的)路由。高级会话的例子包括:TLS/SSL会话,PPTP会话,IPSec/L2TP会话,ISA会话,HTTP基于点心文件的会话,等等。进一步,DAM2202可以包括DAM表2206中的会话信息条目,其指向其它非TCP/IP会话的,例如,RTP,UDP,等等。
[0316] 在(1),知晓负载平衡的交换机202(LAB)将呼入分组指向传送器302(1)。在(2),传送器302(1)查询其内部的路由表,DAM表2206(1)。当传送器302(1)没有为该分组发现原子条目2304时,它转发该分组到其所分配的和/或相关的分类器,分类器304(1)。
[0317] 在(3),在本例中,分类器304(1)识别出该分组是新会话的第一个分组(例如,TCP连接的SYN分组)。分类器304(1)因此将该分组作为来自于客户端102的新TCP连接的开始进行处理。使用来自于健康和负载处理器314(没有示出)的健康和负载信息,分类器304(1)确定主机108(1)应该接收该会话。
[0318] 分类器304(1)更新用作传送器302(1)的本地路由表的DAM表2206(1),并且它还将代表该路由的原子条目插入到整个DAM2206中。这些可以是分离的操作、单一的操作(其中DAM表2206的TCP/IP级的会话置于传送器302)等。DAM2202根据其所规定的冗余策略在内部复制到分类器304群的一个或多个其它成员的路由。分类器304(1)可选地在其更新传送器302(1)的DAM表2206(1)和整个DAM2202/DAM表2206之前与主机108(1)通信来确认新会话的创建。
[0319] 在(4),传送器302(1)直接将该连接的后续分组转发到主机108(1),而不用与分类器304(1)交互。DAM2202可用于(至少部分地)屏蔽传送器302、分类器304或传送器/分类器对302/304的故障。如果知晓负载平衡的交换机202(LBA)不注意地开始将所建立连接的分组发送到不同的传送器302,DAM2202也可用于(至少部分地)来保存客户端的连接性。
[0320] 图28展示了在出现故障时的示例的业务量路由传送流程。与图27中的“没有故障”的示例业务量路由传送流程相比,在图28中的网络负载平衡基础结构106(没有具体示出)的一个部分出现了故障。具体来讲,在其上面放置并运行的传送器302(1)和分类器304(1)的第一设备,在创建了图27所展示的连接之后失效。该故障,至少部分地由DAM2202所屏蔽。
[0321] 在(1),知晓负载平衡的交换机202(LBA)检测传送器302(1)的失效并开始将该连接的分组转发到在该群中一些其它传送器302。在本例中,其它传送器302是传送器302(2)。尽管图28也展示了故障情况,即使传送器302(1)仍然有效,知晓负载平衡的交换机202(LBA)也将该业务发送到传送器302(2)。例如,因为知晓负载平衡的交换机202(LBA)没有保留该业务与传送器302(1)的联系,所以发生传送器302的非故障引起的变化。几个因素中的任何一个可以使交换机202将业务量指向(误导向)一个不同的,非联系的传送器302。例如,当源在一组代理服务器之后时,同样的较高级别会话的业务量可以从不同的源IP地址或源端口到达交换机202。符号(2)-(5)的操作不但应用于故障情况也适用于“误导业务量”的情况。
[0322] 在(2),传送器302(2)查询其路由表,DAM表2206(2)。当它没有发现该分组的路由时,它将该分组转发到其分类器304(2)。在(3),分类器304(2)识别出该分组是“中间会话“的分组,并且,分类器304(2)为该分组查询DAM2202来寻找路由。DAM2202用来自于原子条目2304的连接路由响应,该条目于该连接相关。
[0323] 在(4),分类器304(2)在传送器302(2)中探测路由。下面将进一步描述用来探测路由的示例协议。在(5),传送到传送器302(2)的连接的后续分组被直接路由传送到正确的主机(在本例中,是主机108(1)),而不用查询分类器304(2)。
[0324] 通常,分类器304和传送器302之间通信的路由探测协议包括添加和删除路由的指令。更具体地,为了探测给定连接从传送器302到目标主机109的路由,将添加路由指令从分类器发送到传送器302。作为例子,如在图28(4)中所展示的,可将添加路由指令从分类器304(2)提供给传送器302(2)。将路由(例如,密钥和相应的值)添加到DAM表中以备将来传送器302(2)能够快速访问。在本例中,分类器304(2)是与传送器302(2)分离的设备,因此路由探测协议是设备间协议。然而,路由探测协议也可以用于设备内通信。
[0325] 在描述的实现中,分类器304(2)包括连接清单2802。利用连接清单2802,分类器304(2)跟踪其进行路由探测的任何传送器302(例如传送器302(2))的会话。为了使分类器304(2)能跟踪会话(包括会话的停止),传送器302(2)会话的最后分组(例如TCP FIN分组)转发到分类器304(2)。接着,分类器304(2)删除在连接清单2802中的对应于会话的条目,并发送删除路由指令到传送器302(2)。一旦接收到删除路由指令,传送器302(2)就从DAM表2206(2)中移除相应的路由。
[0326] 这样,与会话跟踪功能结合在一起的分类功能可控制由转发功能所使用的路由表及其。从而,被分离到不同设备的转发功能可以用高速但相对简单的硬件来实现。可选地,分类器304依赖于与/来自于主机108的通信,而不是(或另外)截取的会话起始分组(例如TCP SYN)和终止分组(例如TCP FIN),以确定会话的生命周期。换句话说,如在上面在题为“示例会话跟踪”部分所描述的那样,分类器304可选地或附加地接收和利用会话(开启/关闭)消息2008(U/D)。
[0327] 图29展示了用于网络负载平衡基础结构106高可靠性的附加的示例故障排除过程。描述了两个不同故障的故障排除过程,故障2902和故障2906。如所示,网络负载平衡基础结构106(没有单独示出)包括五个部件:传送器302(1),传送器302(2),传送器302(3),分类器304(1),和分类器304(2)。
[0328] 在描述的实现中,这五个部件302(1),302(2),302(3),304(1)和304(2)中的每一个都对应于单独的设备。然而,类似故障排除程序可应用于不同负载平衡部件共享设备的环境。而且,相似的或类似的故障排除过程可以应用于具有其它数量、组合、比例变换等的部件。
[0329] 开始,在[1],路由器/交换机202将为新连接产生的呼入分组引导到传送器302(1)。由于传送器302(1)在其本地路由表中没有针对该连接的路由,因此它将该分组发送到分类器304(1),如在(1)中由虚线双箭头所表示。分类器304(1)首先参考会话跟踪
308检查会话信息以获得可能的高级会话联系。在本例中,该分组并不与现有的会话相联系,因此,分类器304(1)针对有关健康和负载处理314的健康和负载信息来选择主机108。
[0330] 具体地,在本例中,分类器304(1)选择主机108(1)。假定该分组是用于TCP/IP连接的,那么连接到主机108(1)的TCP/IP会话就被分类器304(1)用添加原子2204(A)函数调用添加到DAM2202中。由分类器304(1)或传送器302(1)将初始分组转发到主机108(1)。分类器304(1)也在传送器302(1)的本地路由表中探测路由。由传送器302(1)将后续分组转发到主机108(1),而不用再和分类器304(1)进一步交互。
[0331] 在连接[1]期间的某些时候,在传送器302(1)出现了故障2902。知晓负载平衡的路由器/交换机202(LBA),就可以检测到故障2902。因此,在点2904,路由器/交换机202将已经沿着连接[1]发送到传送器302(1)的之后分组引导到另一传送器302,在本例中是传送器302(2)。
[0332] 从而传送器302(2)沿着连接[2]接收以后的分组。由于传送器302(2)在其本地路由表中没有有关先前传送到传送器302(1)的分组的条目,因此它必须将连接[2]第一接收分组发送到它被分配的/与它相关的分类器。在本例中,将传送器302(2)分配到分类器304(2),如在(2)中由虚线双箭头所表示的。
[0333] 分类器304(2)用查询原子2204(Q)函数调用来从与现有TCP/IP连接相关的DAM2202中获得所述的原子条目2304(没有明确示出)。经由返回原子2204(R)提供原子条目2304通过会话跟踪308的DAM2202。分类器304(2)从返回的原子条目2304提取与TCP/IP连接相联系的主机108(1)。分类器304(2)将连接[2]的第一接收分组转发到主机108(1),并在传送器302(2)的本地路由表中探测路由。由传送器302(2)将后续的分组转发到主机108(1),而不再与分类器304(2)进一步交互。
[0334] 上面的描述主要集中在单个传送器302部件的故障。然而,分类器304部件也会出现故障。例如,在某一点上,在分类器304(2)上出现故障2906。传送器302(2)在试图使用分类服务或发现缺少一些活动指示(例如心跳型指示符)检测故障2906。为了处理故障2906,传送器302(2)被重新指配或重新相关到不同的分类器304,在本例中是分类器304(1)。以后的分类功能被分类器304(1)提供给传送器302(2),如在(3)中的虚线双箭头所表示的。
[0335] 图30展示了与健康和负载信息进行业务量路由传送交互的示例操作实现。传送器302和分类器304为了将分组路由传送到主机108(1),108(2)...108(n)而和健康和负载处理器314进行交互。尽管展示的是传送器302和分类器304,但是该示例操作实现也适用于请求路由器306(或通常的业务量路由传送功能2012)。
[0336] 如所示,主机108(1)包括应用#1、应用#1、应用#2各自的应用端点IP1,IP3,和IP4。主机108(2)包括应用#1和应用#2各自的应用端点IP2和IP6。主机108(n)包括应用#2的应用端点IP5。由健康和负载处理器314监控主机108(1),108(2)...108(n)和应用端点IP1,IP2,IP3,IP4,IP5,和IP6(例如,用健康和负载基础结构1202,联合健康和负载高速缓冲存储器1208,等等)。
[0337] 在描述的实现中,在(1),分类器304在使用令牌分配方法1806的环境中请求一个或多个应用端点分配(例如,通过至少一个目标应用端点分配请求1802)。在本例中,健康和负载处理器314通过提供令牌分配3002来进行响应(例如,通过至少一个目标应用端点分配响应1804)。
[0338] 具体说来,对应用#13002(1)的令牌分配和对应用#23002(2)的令牌分配可用于分类器304。对应用#13002(1)的令牌分配起初为IP1提供40个令牌,为IP2提供35个令牌,为IP3提供25个令牌。对应用#23002(2)的令牌分配为IP4提供10个令牌,为IP5提供72个令牌,为IP6提供18个令牌。对于每个由分类器304分配到应用端点路由的新连接,由分类器304消耗一个令牌。
[0339] 在(2),传送器302接收新连接的初始呼入分组。由于在传送器302的本地DAM表部分2206中没有该新连接的路由,因此在(3),传送器302将该初始分组转发到分类器304。
[0340] 在(4),分类器304(例如,在确定初始分组不包括高级会话的会话参考之后)根据健康和负载信息选择应用端点(以及主机108)。具体说来,对于由应用#1服务的新连接,如果各自端点的令牌还存在,那么分类器304就选择IP1,IP2,和IP3中的任何一个。
[0341] 分类器304能够以任何可能的方式来消耗令牌。例如,分类器304可以用循环方法,而不用关心每个端点的令牌数。可选地,分类器304在以线性方式移动到下一端点之前,在消耗每个端点的所有令牌的同时,仅仅从IP1开始并进行到IP3。而且,分类器304可以消耗来自于端点限定的令牌集中的令牌,该令牌当前在任一时刻具有最大的令牌数。使用后面的方法,分类器304选择IP1。当然也可以使用其它的方法。
[0342] 如所示,分类器304消耗应用端点IP2的令牌。从而,由于消耗了一个令牌,IP2的令牌集由35个降低到34个。而且,新连接的初始分组将被路由传送到应用端点IP2。
[0343] 在(5A),将初始分组从分类器304转发到主机108(2)的应用端点IP2。在该转发操作之前,之中,或之后,在(5B)分类器304在本地DAM表部分2206中为探测连接的路由。出于分布和复制的目的,分类器304也可以将该会话的原子条目304添加到DAM表2206中。
在(6),使用传送器302的本地路由表,将该连接/会话的后续分组从传送器302转发到主机108(2)的应用端点IP2,如在图30中由本地DAM表部分2206所实现的。
[0344] 图31展示了网络负载平衡基础结构106的示例高可靠性机制。具体来说,展示了示例故障检测3104,示例故障处理3106,和示例故障恢复3108。这些示例高可靠性机制将结合不同的网络负载平衡基础结构106的部件来描述。网络负载平衡部件106包括传送器302,分类器304,请求路由器306,会话跟踪器308,和健康和负载处理器314。
[0345] 在3102(A),传送器302遭受本地故障。在3104(A),至少一个知晓负载平衡的交换机检测到该故障。为了处理该本地故障3102(A),在3106(A),由所述的知晓负载平衡的交换机将分组重新指向其它的一个或多个传送器。为了从传送器302的故障中恢复出来,在3108(A),在使用分布式会话跟踪管理器及其表(例如DAM及其DAM表)将分组重新指向的传送器中重建传送器302本地存储的路由,其中。因此,分布式会话跟踪管理器可以包括一个或多个级别的数据冗余。
[0346] 在3102(B),分类器304遭受本地故障。在3104(B),至少一个传送器检测到该故障。为了处理本地故障3102(B),在3106(B),由检测该故障的传送器将分组重新指向其它分类器。为了从分类器304的故障中恢复出来,在3108(B),在使用DAM将分组重新指向的分类器重建在分类器304本地存储的的会话信息,。例如,会话信息可以是比基线TCP/IP连接级别更高的会话信息。而且,这些会话信息可以被认为是与分类器304处于相同设备的会话跟踪基础结构的一部分。
[0347] 在3102(C),请求路由306遭受本地故障。在3104(C)至少一个传送器和/或知晓负载平衡的交换机检测到该故障。为了处理本地故障3102(C),在3106(C),由传送器和/或知晓负载平衡的交换机将分组重新指向其它的请求路由器。请求路由器306在遇到本地故障3102(C)时所操作的单个当前逻辑请求可能丢失,除非每个这样的单独逻辑请求在服务该请求期间被复制。为了从请求路由器306中的故障中恢复出来,在3108(C),在将分组(以及新逻辑请求)重新指向的请求路由器重建在请求路由器306本地存储的会话信息和/或路由。使用DAM实现会话信息的重建。而且,这种会话信息可以被认为是与请求路由器306处于相同设备的会话跟踪基础结构的一部分。
[0348] 在3102(D),会话跟踪器308遭受本地故障。在3104(D),至少一个传送器和/或分类器检测到该故障。例如,如果会话跟踪器308位于和分类器相同的设备上,那么传送器或另一分类器就可以检测到该故障。如果会话跟踪器308位于一个分离的设备上,那么,分类器就可以检测到该故障。为了处理本地故障3102(D),在3106(D)为所跟踪的会话信息构建一个或多个级别的数据冗余以及多个设备上的分布。应该注意,冗余和分布是在出现故障3102(D)之前进行构建的。为了从会话跟踪器308的故障中恢复出来,在3108(D),为了处理第二级别的故障,通过至少两个设备上重新分布和重新复制来自于DAM表的会话信息(如果还没有如此分布并足够复制)。
[0349] 在3102(E),健康和负载处理器314遭受本地故障。在3104(E),至少一个分类器和/或请求路由器检测到该故障。例如,如果健康和负载处理器314变得没有响应,尤其是如果健康和负载处理器与查询部件位于不同的设备上,那么从健康和负载处理器314接收健康和负载信息的部件可以检测到故障。为了处理本地故障3102(E),在3106(E),对于健康和负载信息,使用缓冲存储的健康和负载数据冗余和固有的故障处理。
[0350] 例如,每个健康和负载处理器314包括联合健康和负载信息高速缓冲存储器1208,其在多个主机108的健康和负载表1204中备份信息。而且,给定健康和负载处理器
314的健康和负载信息1206的使用者可以位于与健康和负载处理器314相同的设备上,以使得健康和负载处理器314的故障是固有可接受的。同样,健康和负载信息1206的各自部分的权威形式位于各自的主机108,以使得主机108的故障引起可接受的健康和负载信息的各自部分的丢失。
[0351] 为了从健康和负载处理器314的故障中恢复出来,使用健康和负载信息的给定网络负载平衡部件查询不同的健康和负载处理器,因为每个这样的健康和负载处理器包括健康和负载处理器信息的联合高速缓冲存储器。而且,当健康和负载处理器314再次可访问时,在3108(E),使用消息协议1500重建其健康和负载信息的联合高速缓冲存储器。使用这种示例高可靠性的机制检测、处理网络负载平衡基础结构106部件的故障并从中恢复,以对于客户端102屏蔽这样的故障。
[0352] 用可选穿越和/或应用级负载平衡的示例连接转移
[0353] 本部分描述了在网络负载平衡中如何利用连接操作,例如连接转移。本部分主要参考图32-39并阐明连接转移功能,例如由连接转移器310(图3中)所提供的。正如在上面参考图3和4所描述的,在负载平衡基础结构106的每个呼入连接可以被在此终止。此后,将该连接转移到主机108,以使得在主机108终止该连接。连接转移器310能够执行该连接转移并部分地位于主机108以实现转移。这种连接转移可以由分类器304和/或使用通过穿越器312的穿越操作结合应用级负载平衡来执行。
[0354] 图32示出了用连接转移来实现应用级网络负载平衡的示例方法。应用级或第7层负载平衡涉及对处理连接的应用作出负载平衡决定。为了执行应用级负载平衡,负载平衡基础结构106通常考虑连接的数据部分。除非使用请求路由传送被,分类器304示例地窥视该连接的开始部分并接着与连接转移器310一起将该连接转移到选择的主机108。
[0355] 对于在通常的基于TCP的环境中的应用级负载平衡来说,在决定将客户TCP连接转发到的位置时,分类器304窥测客户TCP数据的开始部分。这样,应用级逻辑检查该客户数据并基于数据来作出负载平衡决定。例如,如果连接是(未加密的)HTTP连接,那么分类器304可以窥视在该连接中第一个HTTP请求的HTTP标头,并基于该标头内容的某些部分(例如,URL,点心文件等)的来作出路由决定。尽管应用级负载平衡、连接转移和穿越适用于其它协议,但是在这里的例子中主要使用了TCP/IP。
[0356] 如所示,负载平衡基础结构106(没有具体示出)包括传送器302,分类器304,穿越器312,和连接转移器310(和可能的,例如,知晓负载平衡的路由器/交换机202(LBA))。传送器302对应于虚拟IP地址并根据由分类器304作出的主机选择将分组转发到主机
108。尽管为了清楚起见,在图32中没有具体展示,但是主机108也包括连接转移器310的功能和穿越器312的功能。
[0357] 在描述的实现中,传送器302,分类器304,和连接转移器310(在分类器304和主机108上),和在分类器304和主机108上的TCP协议软件协同工作来提供连接转移。在图32中所展示的连接转移用于在分类器304初始终止的来自于客户端102(1)的连接。在连接转移之后,来自于客户端102(1)的连接在主机108(1)终止。一旦在主机108(1)终止该连接,就用穿越器312(在传送器302和主机108(1))对该连接的分组进行穿越。
[0358] 在(1),客户端102(1)发送SYN分组到传送器302来标示新TCP连接的开始。在(2),传送器302转发该分组到分类器304。在(3),分类器304代表主机108(因为实际的目标主机108()还没有被选择,因此还不知道主机108的身份)接受该TCP连接。在TCP协议期间,分类器304发送SYN-ACK分组到客户端102(1)。
[0359] 在(4),客户端102(1)开始发送数据。(初始SYN分组也包括数据。)该数据被分类器304处理,分类器可以查询特定于应用的逻辑。特定于应用的逻辑涉及哪一个主机108能够处理或能最佳处理何种类型的请求或连接。因此,分类器304使用该数据以及来自于健康和负载处理器314的应用健康和负载信息,以及可选地来自于会话跟踪器308的应用会话信息,来确定较适合或最适合处理来自于客户端102(1)连接的主机108。在本例中,选择主机108(1)。
[0360] 在(5),分类器304发送代表到主机108(1)的TCP连接状态的“二进制块”。由连接转移器310将该连接状态与来自于分类器304上的TCP协议堆栈的协同进行聚集。二进制块包含来自于已被分类器304确认的客户端102(1)的数据和TCP参数,例如TCP/IP 4字节组,初始序列号,等等。
[0361] 在(6),在主机108(1)(没有示出)上的连接转移器310部件通过使用来自于从分类器304接收的二进制块的TCP连接状态,将该连接“注入”到在主机108(1)上的TCP协议堆栈。该连接状态的注入是协同在主机108(1)上的TCP协议堆栈进行的,这使得对于主机108(1)上的应用316来说很明显该连接起初是被主机108(1)自己所接受的。客户端102(1)以及在主机108(1)上的应用316并不知晓该连接转移。
[0362] 在(7),分类器304协同在分类器304上的TCP协议堆栈清除为该连接所保留的内部状态。在分类器304静默执行内部状态清除,从而不通知客户端102(1)连接状态正被卸除。分类器304还在传送器302的本地路由表中添加路由,来将主机108(1)示为该连接分组的目的。
[0363] 在(8),由传送器302该连接的后续分组路由传送到主机108(1),而无需转移到或通过分类器304。由传送器302对这些分组与那些没有使用连接转移而被分类和路由传送的连接分组进行同样的处理。可选地,使用穿越器312将这些分组从传送器302穿越到主机108(1)。穿越器312在分类器304的连接转移器310中进行了展示(用虚线),因为穿越器312所使用的某些参数可以在连接转移期间和/或与转移的连接相关地确定。对于示例的实现将在下面尤其参考图38和39进一步描述。
[0364] 图33是展示从第一设备到第二设备转移连接的示例方法的流程图3300。流程图3300包括七个框3302-3314。尽管图32和34-37主要集中在网络负载平衡环境中的连接转移,但是,这里所描述的连接转移可以在每一个包括连接转移功能(例如连接转移器310的功能)的两个一般设备之间实现。
[0365] 在框3302,在第一设备中接受连接。例如,第一设备可以根据网络堆栈的协议堆栈部分的一个或多个协议来终止呼入连接。在框3304,在第一设备接收该连接的数据。例如,在请求连接的初始分组中或在接受连接后接收的一个或多个分组中接收数据。
[0366] 在框3306,从第一设备的协议堆栈(或更一般地从网络堆栈)聚集所接受连接的连接状态。例如,可用任何已确认的接收数据对协议堆栈的一个或多个协议的协议状态进行编译和聚集。在框3308,将连接状态从第一设备第二设备。例如,使用可靠协议将连接状态的聚集信息发送到第二设备。
[0367] 在框3310,在第二设备从第一设备接收正转移连接的连接状态。在框3312,将连接状态注入到第二设备的协议堆栈(或更一般地注入到网络堆栈)。例如,可以使用第二设备协议堆栈的协议对连接进行再混合(rehydrate),以使得在该协议堆栈级别之上的应用不会知晓该连接是转移的连接。更具体来说,可以将协议状态输入到协议堆栈中。还在第二设备结合连接状态的聚集数据。在框3314,在第二设备继续该连接。例如,在第二设备继续该连接就像先前在任何地方都没有终止该连接。
[0368] 图34以起始设备3400的角度展示连接转移的示例方法。至少部分由连接转移器310实现起始设备3400中的连接转移。在描述的实现中,起始设备3400是网络负载平衡基础结构106构成部分的设备。例如,起始设备3400可以包括分类器304,可能地还有传送器
302,请求路由器306,等等。
[0369] 如所示,起始设备3400包括作为其网络堆栈部分的物理网络接口(PNI)3410,PNI小端口3408,硬件协议接口3406,协议堆栈3404,和套接字层3402。起始设备3400还包括负载平衡功能106,例如在应用级的分类器304和连接转移器310。具体来说,连接转移器310包括转移器中间驱动器3414和转移器衬垫3412。连接转移器310能够从起始设备3400上卸载连接。
[0370] 在描述的实现中,物理网络接口3410可以是网络接口卡(NIC)(例如,以太网NIC),无线接口,等等。尽管只示出了物理网络接口3410,但是给定的设备实际上可以具有多个这样的物理网络接口3410(即,起始设备3400可以是多宿主的)。每个物理网络接口3410通常对应于一个或多个物理网络地址。
[0371] PNI小端口3408是软件模块,它知晓物理网络接口3410的特定硬件实现并与其对接。硬件协议接口3406是包括在一个或多个协议和PNI小端口3408之间的一个或多个接口的层。
[0372] 协议堆栈3404包括一个或多个各自指向一个或多个协议的模块。这种协议的例子将在下面参考图36和37进一步描述。在瞬时环境中,协议堆栈3404包括存在于起始设备3400上的每个连接的协议状态3420。套接字层3402位于诸如负载平衡功能106的程序和协议堆栈3404之间。套接字层3402在负载平衡功能106和协议堆栈3404之间提供API,其中它使程序能够注册连接。
[0373] 转移器中间驱动器3414,或更一般的转移器驱动器3414位于硬件协议接口层3406。转移器衬垫3412透明地位于协议堆栈33404和套接字层3402之间。
[0374] 当在起始设备3400出现请求新连接的初始分组(没有示出)时,将指示分组从物理网络接口3410向上到PNI小端口,经由硬件协议接口3406到达协议堆栈3404。当分组穿过协议堆栈3404的一个或多个协议时,在此创建协议状态3420。而且,作为初始分组的结果或作为负载平衡功能106接收连接以窥测请求的结果,数据3416到达起始设备3400。
[0375] 在操作中,转移器中间驱动器3414将数据3416的副本转移到连接转移器310的逻辑。当负载平衡功能106发出转移连接函数调用时,将转移函数调用传递到协议堆栈3404的最高层以开始连接状态的聚集3418。从协议堆栈3404的一个或多个协议中编译协议状态3420。在TCP/IP实现中,协议状态3420可以包括(i)目的和源TCP端口和IP地址(例如,TCP/IP 4字节组),(ii)TCP窗口状态,(iii)初始序列号,(iv)暂停信息,(v)IP片断ID,(vi)路由传送信息等。
[0376] 连接状态聚集3418还聚集转换到连接转移器310的数据以及已由起始设备3400(例如,由负载平衡功能106)确认的数据3416。聚集的连接状态3418包括协议状态
3420和数据3416(并可选地包括其它相关连接信息)。随后将聚集的连接状态3418作为二进制块3422从起始设备3400发送到目标设备。
[0377] 使用可靠协议将二进制块3422从起始设备3400发向目标设备。“可靠”意味着,例如,即使构成二进制块3422的单个分组丢失或被破坏,也可以在目标设备完整接收二进制块3422。如果随后用穿越器312对连接进行穿越,那么二进制块3422也可与流标识符绑定。使用穿越的流标识符将在下面尤其参考图38和39来进一步描述。
[0378] 图35以目标设备3500的角度展示连接转移的示例方法。目标设备3500在所展示的各种层/模块上相似于起始设备3400,包括连接转移器310。然而如所示,在应用级的至少一个应用316与套接字层3402对接。目标设备3500因此可包括主机108。而且,连接转移器310能够从起始设备3400上加载连接。
[0379] 在描述的实现中,应用316是在起始设备3400接收的连接初始分组的目的。目标设备3500从起始设备3400接收二进制块3422。二进制块3422包括与转移到目标设备3500的连接相关的连接状态并可选地包括流标识符。该连接状态包括协议状态3420和所确认数据3416(并可能包括其它与连接相关的信息)。
[0380] 在操作中,当二进制块3422到达硬件协议接口层3406时,转移器中间驱动器3414将其识别为连接转移的块并将其进行转移。在3502,注入连接状态以向应用316显示该连接在目标设备3500起初是被终止的。
[0381] 具体来说,将所注入的连接状态3502的协议状态3420输入到协议堆栈3404中。在描述的实现中,首先在协议堆栈3404的较高级别协议输入协议状态3420输入然后在较低级别协议输入协议状态3420。在协议状态3420输入到协议堆栈3404之后,指示数据向上到应用316。将数据3416提供到应用316,好像它是作为新地、本地终止连接的一部分。
[0382] 在连接状态注入3502完成之后,成功地将由在起始设备3400接收的分组开始的连接从起始设备转移到目标设备3500。可将该连接的后续分组直接转发到目标设备3500,而无需通过起始设备,或至少具有简单的路由传送且没有应用于该路由传送的应用级分析。可选地,穿越这些分组,使得转移器中间驱动器3414有效地用作束缚于虚拟IP地址的基于软件的虚拟NIC。换句话说,转移器中间驱动器3414(图35中)可以包括虚拟网络适配器,其束缚于未封装分组的目的地址。
[0383] 图36示出连接转移的卸载过程3600的示例方法。转移卸载过程3600展示了由起始设备3400所进行的连接转移附加的示例细节。如所示,一般的协议堆栈3404包括TCP协议堆栈3404(T),IP协议堆栈3404(I),和地址解析协议(ARP)堆栈3404(A)。然而,可选地可以使用其它的专用协议堆栈3404()。
[0384] 作为例子,硬件协议接口层3406可以作为在Microsoft Windows 操作系统(0S)环境中的基于网络驱动器接口规范(NDIS)的层来实现。而且,套接字层3402可以作TM为在Microsoft Windows OS环境中的Winsock 层来实现。
[0385] 在描述的实现中,转移器中间驱动器3414包括在与ARP堆栈3404(A)结合处和与PNI小端口3408结合处的硬件协议接口3406。转移器中间驱动器3414在转移卸载过程3600中用作卸载目标。卸载目标是硬件协议接口3406的小端口,如本例中所示。在转移加载过程3700中(如在图37),转移器中间驱动器3414用作加载转换器。
[0386] 更具体来说,转移器中间驱动器3414束缚于每一个物理网络接口3410,通过这些接口转移TCP连接。转移器中间驱动器3414通常用作通过将分组在网络堆栈中向上或向下传递而不与分组进行另外交互的通过驱动器。然而,转移器中间驱动器3414确实与涉及连接转移的分组进行交互(可选地包括随后的穿越的分组)。
[0387] 转移器中间驱动器3414的责任包括:(i)接受转移卸载请求;(ii)聚集协议状态信息以及确认的数据以产生连接状态信息,该协议状态信息与正转移的TCP连接有关并从特定协议堆栈3404()编译的;和(iii)将聚集的连接状态发送到目标设备3500以进行转移加载过程3700。用于该传输的可靠有线协议可与会话跟踪部件2002和2010发送和接收会话信息消息2008所使用的协议共享(例如,参考图20在上面所描述的)。
[0388] 转移器中间驱动器3414(例如,在转移加载过程3700中)的另一个责任是开始其从其它设备接收的转移连接的加载以及在加载过程的同时将与转移连接有关的任何呼入分组进行缓冲。为了加载该连接,转移器中间驱动器3414发送加载请求到转移器衬垫3412。转移器衬垫3412发出注入命令向下到TCP堆栈3404(A)的协议堆栈3404中来例示在网络堆栈的协议堆栈3404部分中的连接。
[0389] 转移器衬垫3412向TCP堆栈3404(T)提供传输层客户接口,并向套接字层3402提供传输层提供者接口。转移器3412有两个作用:(i)开始起始设备3400上的连接转移卸载过程3600和随后目标设备3500上的转移加载过程3700和(ii)仲裁在主机应用316程序,负载平衡分类器304程序和套接字层3402之间的分类过程。转移器衬垫3412和转移器中间驱动器3414都将在下面参考图36和37来进一步描述。
[0390] 对于示例转移卸载过程3600,TCP连接的转移是在分类器304用呼入TCP连接的一个,两个或多个分组来对呼入TCP连接分类之后执行的。在点<1>到<7>对转移卸载过程3600进行描述。
[0391] 在<1>,在分类操作之前进行初始化。协议堆栈3404在硬件协议接口层3406进行查询来确定(如果有)何种卸载性能可用。转移器中间驱动器3414指示可以进行连接转移卸载并将该查询向下传播到PNI小端口3408。如果物理网络接口3410提供TCP烟囱(chimney)卸载能力,那么PNI小端口3408也是如此。TCP烟囱卸载能力使一些TCP/IP处理能被卸载到物理网络接口3410的硬件并包括对协议状态3420的一些编译。从而,在两个卸载机制之间就可以共享一些编译和聚集逻辑。
[0392] 在<2>一旦已对TCP连接进行分类,分类器304就开始到所选主机108的TCP连接转移。具体来说,通过套接字层3402向转移器衬垫3412发出指示目标设备3500的转移命令。
[0393] 在<3>,转移器衬垫3412开始TCP连接转移以编译TCP协议状态。具体来说,转移器衬垫3412调用TCP开始转移卸载API(或者更一般地转移连接函数调用或转移连接命令)。该例程编译了该特定TCP连接的相关状态,该连接用于恢复目标设备3500上的连接。编译的协议状态3420包括来自于所述中间堆栈层的状态,包括TCP堆栈3404(T),IP堆栈
3404(I),和APR堆栈3404(A)。
[0394] 在<4>,一旦协议堆栈3404已编译正转移TCP连接的协议状态3420,它就在其所束缚的小端口上调用开始转移卸载API;在本例中,该小端口是转移器中间驱动器3414。然而,实际上,可在协议堆栈3404和转移器中间驱动器3414之间插入其它中间驱动器,例如IP Qos。如果是这样,那些IM驱动器可以(如果有关)通过将其状态编译/聚集为正转移连接的连接状态信息来参与到该转移过程。中间驱动器继续沿着网络堆栈向下传播开始转移卸载命令,其最终将导致在转移器中间驱动器3414中的转移卸载处理器的执行。在这一点上,转移器中间驱动器3414还将任何确认的数据与从TCP连接到目标设备3500的传输的剩余连接状态进行聚集。
[0395] 在<5>,在为正转移TCP连接存储/复制连接状态信息之后,转移器中间驱动器3414通过调用开始转移卸载完成API通知网络堆栈该转移处于最后阶段。该开始转移卸载完成API沿着网络堆栈的反向路径向下,通过相同的中间驱动器,并最终到达协议堆栈
3404。在每一层处理该命令的同时,释放与所转移的连接相关的状态信息。直到对该命令的处理完成,每一层才沿着网络堆栈向下发送更新通知来更新连接状态中由于开始转移而变化的任何部分。
[0396] 在<6>,当所述的开始转移卸载完成例程到达TCP堆栈3404(T)时,TCP静默地(即,没有将复位发送到客户端108)关闭连接,清除所有与转移连接相关的状态,并将开始转移卸载完成调传播到转移器衬垫3412。在这一点上,网络堆栈无需有转移连接的任何残留信息。
[0397] 在<7>,当所述的开始转移卸载完成调用返回到转移器中间驱动器3414时(通过连接转移器310的转移器衬垫3412部分),从起始设备3400到目标设备3500的TCP连接转移从其连接状态的传输开始。可异步并可靠地传输连接状态。
[0398] 一旦开始转移,起始设备3400还负责确保来自于客户端108的后续数据被转发到目标设备3500。从而,即使在该连接被成功地转移到目标之后,该起始方为了适合地路由传送后续分组到目标而仍然保留该连接的一些状态(例如,路由表条目)。当连接终止时,目标通知起始方,使其能够清除任何转移的连接的剩余状态。
[0399] 进一步,作为连接转移的异步特点的结果,由起始设备3400(或如果是分离的设备而指定的传送器)转发的转移连接的数据分组在目标设备3500接收转移连接状态之前开始到达目标设备3500。在目标设备3500的转移器中间驱动器3414负责缓存这些分组直到在目标设备3500上建立相关的转移连接。
[0400] 图37展示了用于连接转移的加载过程3700的示例方法。转移加载过程3700展示了由目标设备3500进行的连接转移的附加示例细节。
[0401] 当转移连接到达目标设备3500时,它被中继到转移器中间驱动器3414来进行处理。在合并和吸收转移连接状态之后,转移器中间驱动器3414结合转移器衬垫3412一起将转移连接以对于应用316透明的方式注入到本地网络堆栈中。对于示例的转移加载过程3700,将描述在点<1>到<8>的TCP连接转移。
[0402] 在<1>,如在上面参考转移卸载过程3600所描述的,在应用宿主操作之前进行初始化。具体来说,协议堆栈3404进行关于何种卸载性能可用的的查询(如果有的话)。转移器中间驱动器3414代替该TCP连接转移支持查询来指示连接转移加载可用并为可能的TCP烟囱卸载能力将该查询向下传播到PNI小端口。
[0403] 在<2>,当连接转移数据到达目标设备3500时,就将连接转移信息(例如,附带的二进制块3422)送往转移器中间驱动器3414。转移器中间驱动器3414重新组合该连接状态,将其与在该转移期间已到达的任何相关数据匹配,并准备到网络堆栈上的加载。任何来自于客户端102的、在加载该转移连接的期间到达的数据被转移器中间驱动器3414所缓存。一旦成功完成该转移,数据将被送往应用316。
[0404] 在<3>,为了开始将转移连接加载到本地网络堆栈中,转移器中间驱动器3414通知转移器衬垫3412转移连接请求已经到达。转移器中间驱动器3414也将连接状态(或至少协议状态3420)送往转移器衬垫3412。
[0405] 在<4>,转移器衬垫3412通过调用TCP开始注入例程(或更一般的输入协议状态例程)并通过将转移协议状态3420提供到TCP堆栈3404(T)来开始转移连接的加载。在<5>,TCP/IP使用提供的协议状态3420来重新创建贯穿协议堆栈3404的转移连接。协议状态3420包括一个或多个传输状态(TCP),路径状态(IP),相邻的和下一跳的状态(ARP),等等。
[0406] 在<6>,如果在目标设备3500成功地重新建立了转移连接,TCP启动到转移器衬垫3412的客户部分的连接事件来指示新的连接已经被建立。有多种可能的故障原因,但是一般的原因包括是缺少相应的监听器,路由故障等等。在网络堆栈不能重新建立所转移的连接情况下,不指示连接事件并且在开始注入完成调用中指定故障状态。连接转移器310负责清除该转移并发送回复位通知到客户端102来放弃该连接。
[0407] 在<7>,转移器衬垫3412用作提供者来传播连接事件到套接字层3402以便指示正在监听的应用316:新连接已经被建立。如果应用316接受该连接,它就处理请求并通过正常的读和写套接字操作进行响应;应用316不会知晓该连接是转移的。如果连接不被应用316接受,那么TCP终止该连接但不发送回复位通知给客户端102。而且,在开始注入完成调用中指定故障状态,并且连接转移器310负责清除该转移并发送回复位通知到客户端102来放弃该连接。
[0408] 当应用316和分类器304共同置于相同的设备时,会出现一个特殊的情况:转移器衬垫3412可以在它们之间进行裁决。当两类程序位于相同的主机108时,它们都监听相同的一个或多个IP地址和端口。然而,TCP通常在每个唯一的IP地址和端口上具有一个监听器。从而,转移器衬垫3412能够通过将两个套接字复用成在TCP层的单一监听器来遮挡其中两个程序正在监听在相同IP地址和端口的配置。
[0409] 在这样的情况下,当连接事件到达转移器衬垫3412的客户部分时,作为提供者的转移器衬垫3412确定在哪一个监听套接字上传送在套接字层3402的连接通知。如果只有一个套接字监听相应的IP地址和端口,那么就用该套接字接收连接事件。如果有多于一个的套接字在监听,那么该接收依赖于指示连接事件所处的环境。如果该连接事件是虚拟IP地址的崭新连接,那么连接事件被送往分类器304;如果连接事件用于专用IP地址(非负载平衡IP地址)或用于加载转移连接的结果,那么该连接事件被送往目标应用316。
[0410] 在<8>,一旦完成了对该转移连接的注入,TCP通过调用所提供的开始注入完成处理器来通知转移器衬垫3412。无论该连接是否被成功加载都提供状态码来通知转移器衬垫3412。如果所转移的连接加载失败,连接转移器310负责清除该转移并通过将复位发送给客户端102来通知客户端102该连接已经被放弃。如果所转移的连接被成功注入到本地网络堆栈,转移器中间驱动器3414可以通过将所接收的分组通过硬件协议接口3406的分组接收路径向上传递来开始传送来自于客户端102的任何缓存数据。
[0411] 当一个转移的连接被终止(由于加载失败,由于所转移的连接被随后通过正常手段关闭,等等)时,目标设备3500通知起始设备3400。起始设备3400用这些通知更加有效地和可靠地清除所转移连接的遗留状态,包括路由表条目。因此,为了考虑在将来会任意地终止成功转移的连接,转移器3412监视它们的活动,并当该连接的套接字关闭的时候,通知转移器中间驱动器3414。
[0412] 图38展示在传送器302和主机108之间进行分组穿越的示例方法。封装的分组3808可以从传送器302穿越到主机108,而不会导致每个传输分组的开销。如下面进一步描述,分别使用传送器302和主机108各自的穿越器312(F)和312(H)的流标识符3814和封装映射表3806和3810实现穿越。将流标识符3814插入到封装分组3808中。
[0413] 如上面参考图32所示的,在连接转移之后到达的连接的分组可以由传送器302使用借助穿越器312的穿越路由传送到主机108(1)。在(8)(图32中),传送器302将这样的后续分组从具有网络地址“F”的传送器302传送到具有网络地址”H1”的主机108(1)。正如在上面参考图4所描述的,传送器302为了将所呼入的分组路由传送到主机108(1)而进行NAT,半NAT,穿越,等等。
[0414] 这种呼入分组包括虚拟IP(“VIP”)地址的目的IP地址和从客户端102(1)到达的分组的源IP地址“C1”。路由传送到主机108(1)的分组具有目的IP地址H1和源地址C1(对于半-NAT来说)或“F”(对于全NAT来说)。这种地址的修改会妨碍那些期望客户端102(1)和主机108(1)对源和目的地址具有同样认识的一些协议。
[0415] 进一步,至少对于全NAT,由于主机108(1)不知道客户端102(1)的地址,从主机108(1)到客户端102(1)的不穿过传送器302的返回路径是禁止的。在从主机108(1)到客户端102(1)的业务量尤其高和/或比在相反方向上的业务量明显高的情况下(例如,当主机108(1)提供流媒体到客户端102(1)时),从主机108(1)到客户端102(1)的直接路径是所希望的。
[0416] 这里所述的由穿越器312所进行的穿越对于客户端102的源和目的地址(和端口)以及主机108上的和应用316提供相同的认识。作为例子并参考图34和35,在每个传送器302和主机108中的穿越器312可以用作连接转移器310的转移器中间驱动器3414的一部分或与其结合。
[0417] 在用图38描述的实现中,连接转移器310提供在流标识符3814和TCP/IP4字节组3804之间的封装映射3812。连接转移器310可以与分类器304相关,并且连接转移器310(可选地和分类器304)作为传送器302置于相同的设备上。可选地,连接转移器310(以及分类器304)可以位于与传送器302不同的设备上。封装映射3812可选地由穿越器312功能来提供或结合它提供,该穿越器的功能诸如位于分类器304和/或与其相关。
[0418] 通过被映射到封装映射3812中的TCP/IP 4字节组3804,流标识符3814用来标识特定连接的封装分组3808的流。TCP/IP 4字节组3804包括根据TCP/IP协议或任何相似的或可比的协议的特定连接的源和目的网络地址(和端口,等等)。流标识符3814在描述的实现中是32位,因为这允许流标识符可以在所穿越的分组中的TCP段标头的源和目的端口字段进行编码,这能够使穿越的分组可以无需任何穿越的空间开销而进行传输。在目的处,通过查询链接到从源和目的端口字段提取的流标识符的TCP/IP 4字节组,确定TCP/IP4字节组。然而,可选地可以使用其它长度的流标识符3814,尤其对于其它协议,如因特网RTP等。
[0419] 每个流标识符3814可以标识来自于发起穿越的设备(在本例中,是传送器302)的唯一连接。流标识符3814可以用任何合适的方法来产生,例如递增连接指针。可选地,由连接转移器产生的TCP/IP接收机初始序列号(ISN)可以作为流标识符3814。进一步,TCP/IP 4字节组3804更一般地是源/目的对。各个源/目的对的每个源值和目的值分别包括在特定连接上传输的给定分组的源和目的的网络节点标识符。
[0420] 连接转移器310提供封装映射3812到主机108。在主机108的穿越器312(H)将封装映射3812作为封装映射条目3810存储在封装映射表3819中。穿越器312(H)此后可以用流标识符3814来映射到并标识对应于TCP/IP 4字节组3804的特定连接。可选地提供封装映射3812到主机108作为连接转移操作中绑定的的二进制块3422的一部分。
[0421] 传送器302还包括带有封装映射表3806的穿越器312(F)部件。封装映射表3806存储将特定连接的TCP/IP 4字节组3804连接/映射到流标识符3814的封装映射条目3806(1)。穿越器312(F)还接收来自于连接转移器310的封装映射条目3806(1)的映射信息(例如,作为封装映射3812)。
[0422] 尽管只示出了一个封装映射条目3806(1)和3810(1),但是每个封装映射表3896和封装映射表3810可以拥有多个这样的条目。这些封装映射表3806和3810与其它信息组合在一起,例如会话跟踪器308的会话信息表。
[0423] 当封装分组3808的发送设备(例如传送器302)和接收设备(例如主机108)仅仅在相互之间进行穿越时,其封装映射表可能拥有相同的封装映射条目。另外,封装映射表3807和封装映射表3810可能分别拥有不同的封装映射条目3806()和封装映射条目3810()的总集合。
[0424] 在操作中,在传送器302接收特定连接的呼入分组3802。该特定连接与TCP/IP 4字节组3804相关。呼入分组3802包括具有源IP地址(客户端102的),目的IP地址(虚拟IP),源TCP端口(客户端102的)和目的TCP端口的TCP/IP 4字节组3804。
[0425] 穿越器312(F)接受呼入分组3802以将其穿越到到主机108。通过使用TCP/IP 4字节组3804,穿越器312(F)访问封装映射表3806以定位封装映射条目3806(1)。从链接到/映射到TCP/IP 4字节组3804的封装映射条目3806(1)中提取流标识符3814。
[0426] 为了创建封装分组3808,穿越器312(F)将流标识符3814插入到TCP/IP4字节组标头的源和目的端口部分。这两个TCP部分的每一个都是16位,其允许插入32位的流标识符3814。而且,对于TCP/IP 4字节组标头的源IP地址部分,穿越器312(F)插入传送器302的IP地址“F”。对于TCP/IP 4字节组标头的目的IP地址部分,穿越器312(F)插入主机108的IP地址“H”。
[0427] 传送器302将封装分组3808路由传送/发送到主机108,然后主机108从传送器302接收封装的分组。在主机108的穿越器312(H)部件检测到封装分组3808是待解封装的穿越的分组。
[0428] 从封装分组3808提取流标识符3814,并用于在封装映射表3810的封装映射条目3810(1)中查找链接到该条目的相应TCP/IP 4字节组3804。由穿越器312(H)使用TCP/IP 4字节组3804在传送器302重新创建与原来在呼入分组3802中接收到一样的TCP/IP
4字节组3804标头。
[0429] 具体来说,用源IP地址替换传送器302的IP地址F,而用目的IP地址替换主机108的IP地址H。进一步,由源TCP端口和目的TCP端口替换流标识符3815。随后指示解封装分组沿着主机108的网络堆栈向上到目标应用316。
[0430] 更一般地,对于给定分组,使用包括源/目的对的分组标头部分(它无需用于传输给定的分组)携带流标识符3814。通过在主机108预先提供至少部分源/目的对,可以使用流标识符3814穿越(例如,封装和/或解封装)分组而无需在每一个分组上承受封装开销。进一步,对于给定的协议中的全尺寸分组可以进行穿越而无需分割。
[0431] 图39展示了在第一设备和一个第二设备之间对分组进行穿越的示例方法的流程图3900。例如,第一设备和第二设备可以分别对应于负载平衡基础结构106和一簇主机108各自的起始设备3400和目标设备3500。不过,可在非负载平衡实现中使用穿越。
[0432] 流程图3900包括十二个框3902-3924。尽管流程图3900的操作可以被在其它环境中用多种软件方法来执行,但是特定于使用图1-3,32,34,35来描述所述方法的某些方面和例子。
[0433] 在框3902,将流标识符到TCP/IP 4字节组的映射从起始设备发送到目标设备。例如,起始设备3400可以发送将流标识符3814链接到TCP/IP4字节组3804的的封装映射3812。在框3914,在目标设备从起始设备接收流标识符到TCP/IP 4字节组的映射。例如,目标设备3500从起始设备3400接收将流标识符3814链接到TCP/IP4字节组3804的的封装映射3812。
[0434] 可选地,目标设备3500可以接收来自于另一设备的封装映射3812。如由虚箭头3962和3928所示,框3904-3912和框3916-3924的操作可能分别在框3902和3914的操作之后的某个时间发生。
[0435] 在框3904,在起始设备中从客户端接收呼入分组。例如,在起始设备3400从客户端102接收带有TCP/IP 4字节组3804的标头的呼入分组3802。在框3906,用呼入分组的TCP/IP 4字节组来为对应于客户端的分组的连接查找流标识符。例如,使用映射到流标识符的TCP/IP 4字节组3804,来为与客户端102的连接的在封装映射表3806的封装映射条目3806(1)中查找流标识符3814。
[0436] 在框3908,分别用起始设备的起始IP地址和目标设备的目标IP地址替换呼入分组的源IP和目的IP。例如,起始设备3400可以用起始设备3400和目标设备3500的IP地址替换呼入分组3802的标头的TCP/IP 4字节组3804部分的IP地址部分。
[0437] 在框3910,用流标识符替换呼入分组的源端口和目的端口。例如,起始设备3400可以用流标识符3814体欢呼入分组3802标的TCP/IP4字节组3804部分的源和目的TCP端口。在框3912,将封装的分组从起始设备发送到目标设备。例如,起始设备3400可以将封装分组3808发送到目标设备3500。
[0438] 在框3916,在目标设备从起始设备接收封装分组。例如,目标设备3500从起始设备3400接收封装分组3808。在框3918,用流标识符来为对应于从客户接收的连接查找TCP/IP 4字节组。例如,目标设备3500可以在将流标识符3824映射到TCP/IP4字节组3804的封装映射条目3810(1)访问封装映射表3810。
[0439] 在框3920,通过使用查找到的TCP/I P4字节组,分别用源IP和目的IP替换起始IP地址和目标IP地址。例如,目标设备3500可以用来自于从封装映射表3810中得到的TCP/IP 4字节组3804的源IP地址和目的IP地址替换在封装分组3808中的起始设备3400和目标设备3500的IP地址。
[0440] 在框3922,使用查找到的TCP/IP 4字节组,来用呼入分组的源端口和目的端口替换流标识符。例如,目标设备3500可以用来自于TCP/IP 4字节组3804的源TCP端口和目的TCP端口替换在封装分组3808中的流标识符3814。在框3924,指示客户端的分组向上到在目标设备的应用。例如,指示封装分组3808,或呼入分组3802的解封装形式向上到目标设备3500的应用316。
[0441] 图1-39中操作,方面,特征,部件,等等将在被划分多个框的示意图中进行描述。然而,在图1-39中的所描述的和/或所展示的顺序,内部连接关系,布局等等并不是构造作为限制,并且任何数量的框可以以实现一个或多个用来进行网络负载平衡的系统、方法、设备、过程、介质,API、装置,配置等的任何方式来被组合,重新安排,增加,省略等等。进一步,尽管在此的描述包括参考具体的实现方式(和图40中的示例操作环境),但是所展示的和/或所描述的实现可以被以任何合适的硬件、软件、防火墙,或它们的组合以及任何合适的网络组织、传输/通信协议、应用程序接口(API)、客户-服务器结构等等来实现。
[0442] 用计算机或其它设备的示例操作环境
[0443] 图40展示了能够(全部或部分地)实现至少一个在此所描述进行网络负载平衡的系统、设备、装置、部件、装置、协议、方案、方法、过程、介质、API、它们的一些组合等等的示例计算(或一般设备)操作环境4000。操作环境4000可以被用在在下面所描述的计算机和网络结构中或一个孤立的情形下。
[0444] 示例操作环境4000仅仅是一个环境的例子而已,并不暗示对应用设备(包括计算机,网络节点,娱乐设备,移动装置,通用电器,等等)结构的功能和使用范围的任何限制。不可以将操作环境4000(或其设备)解释为对与在图40中所展示的任何一个部件或任何部件的组合相关的依靠和需求。
[0445] 此外,网络负载平衡可以用多种其它的通用或专用设备(包括计算系统)环境或配置来实现。适用的所熟知的设备,系统,环境,和/或配置的例子包括个人计算机,服务器计算机,瘦客户机,厚客户机,个人数字助理(PDA)或移动电话,手表,手持或膝上型设备,多处理器系统,基于微处理器的系统,机顶盒,可编程家用电器,视频游戏机,游戏控制台,便携式或手持式游戏单元,网络PC,小型计算机,大型计算机,网络节点,包括上述系统或设备或它们的组合的分布式或多处理计算环境等等,但并不局限于此。
[0446] 在处理器可执行指令的一般环境中描述用来进行网络负载平衡的实现。通常,处理器可执行指令包括执行和/或启动特定任务和/或实现特定抽象数据类型的例程,程序,协议,对象,接口,部件,数据结构,等等。网络负载平衡,如在这里所描述的某一实现方式,也可以应用在分布式处理环境中,在该环境中,任务可以由通过通信链路和/或网络远程连接的处理设备来执行。尤其是在一个分布式计算环境中,处理器可执行的指令可以驻留于分离的存储介质中,并由不同的处理器来执行,和/或在传输介质上传播。
[0447] 示例的操作环境4000包括以计算机4002的形式的通用计算设备,其包括任何(例如,电子的)具有计算/处理能力的设备。计算机4002的部件包括一个或多个处理器或处理单元4004,系统存储器4006,和将包括处理器4004的各种系统部件耦合到系统存储器4006的系统总线4008,但并不局限于此。
[0448] 处理器4004不受构成它们的材料或在其中所使用的处理机制的限制。例如,处理器4004可以包括半导体和/或晶体管(例如,电子集成电路(IC))。在这样的环境中,处理器可执行指令可以是电子可执行指令。可选地,处理器4004的机制或用于处理器4004的机制以及计算机4002的或用于计算机4002的机制包括量子计算,光计算,机械计算(例如,用纳米技术)等等,但并不局限于此。
[0449] 系统总线4008代表了多种类型的有线或无线总线结构中的任何一种或多种,这些总线结构包括系统总线或存储器控制器,点到点的连接,交换结构,外围总线,加速图形端口,和使用多种总线结构的任何一种的处理器或本地总线,但不局限于此。作为例子,这种结构包括工业标准体系结构(ISA)总线,微通道体系结构(MCA)总线,增强型ISA(EISA)总线,视频电子标准协会(VESA)本地总线,也被称作Mezzanine总线的外围部件互连(PCI)总线,及其它们的一些组合,等等。
[0450] 计算机4002通常包括多种处理器可存取的介质。这些介质可以是能够被计算机4002或另外的设备(例如,电子的)存取的任何可用介质,并且它包括易失性的和非易失性的介质,可移动和非可移动的介质,和存储及传输介质。
[0451] 系统存储器4006包括以易失性存储器形式的处理器可存取存储介质,例如随机存取存储器(RAM)4040,和/或非易失性存储器,例如只读存储器(ROM)4012。包含帮助用来在计算机4002内部的部件之间传输信息的基本例程的基本输入/输出系统(BIOS)4014通常诸如在启动期间被存储在ROM4012中。RAM4010通常包含可以被处理单元4004立即存取和/或立即操作的数据和/或程序模块/指令。
[0452] 计算机4002还包括其它可移动/不可移动和/或易失性/非易失性存储介质。作为例子,图40展示了硬盘驱动器或盘驱动阵列4016,用来执行从(通常)不可移动,非易失性磁介质(没有单独示出)中读出和写入;磁盘驱动器4018,用来对可移动的,非易失性磁盘4020(例如,“软盘”)执行读出和写入操作;和光盘驱动器4022,用来对(通常)可移动,非易失性光盘4024,例如CD,DVD,或其它光介质,执行读出和写入操作。硬盘驱动器
4016,磁盘驱动器4018,和光盘驱动器4022的每一个都通过一个或多个存储介质接口4026连接到系统总线4008。可选地,硬盘驱动器4016,磁盘驱动器4018,和光盘驱动器4022可以通过一个或多个其它分离或组合的接口(没有示出)连接到系统总线4008。
[0453] 盘驱动器和其相关的处理器可存取介质提供了处理器可执行指令,例如数据结构,程序模块,和用于计算机4002的其它数据的非易失性存储。尽管示例计算机4002展示硬盘4016,可移动磁盘4020,和可移动光盘4024,但是应该可以理解其它类型的处理器可存取介质也可以用来存储被设备存取的指令,例如磁带或其它磁存储设备,按块擦除存储器,激光盘(CD),数字通用盘(DVD)或其它光存储器,RAM,ROM,电可擦除可编程只读存储器(EEPROM),等等。这种介质也可以包括所谓的专用或硬连线IC芯片。换句话说,可以用任何处理器可存取的介质来实现该示例操作环境4000的存储介质。
[0454] 任何数量的程序模块(或其它指令/代码的单元或集合)可以被存储在硬盘4016,磁盘4020,光盘4024,ROM4012,和/或RAM4040上,包括作为一般例子的操作系统
4028,一个或多个应用4030,其它的程序模块4032,和程序数据4034。
[0455] 用户可以通过输入设备输入命令和/或信息到计算机4002中,例如键盘4036和定位设备4038(例如鼠标)。其它的输入设备4040(没有具体示出)可以包括话筒,游戏杆,游戏垫,卫星碟式盘,串行端口,扫描器等。这些和其它输入设备通过耦合到系统总线4008的输入/输出接口4042连接到处理单元4004。然而,输入设备和/或输出设备可以改为通过其它接口和总线结构来被连接,例如并行端口,游戏端口,通用串行总线(USB)端口,红外端口,IEEE 1394(“火线”)接口,IEEE 802.11无线接口,Bluetooth 无线接口,等等。
[0456] 监视器/可视显示屏4044或其它类型的显示设备也可以通过一接口连接到系统总线4008,例如视频适配器4046。视频适配器4046(或另一个部件)可以是或包括用来处理图形加强计算和处理显示需求的图形卡。通常,图形卡包括图形处理单元(GPU),视频RAM(VRAM),等等,以有助于快速显示图形和图象操作的演示。除了监视器4044,其它输出外围设备包括诸如扬声器(没有示出)和打印机4048那样的部件,其可以通过输入/输出接口4042连接到计算机4002。
[0457] 计算机4002可以运行在用逻辑连接到一个或多个远程计算机(例如远程计算设备)的网络化的环境中。作为例子,远程计算设备4050可以是个人计算机,便携式计算机(例如,膝上型计算机,桌上型计算机,PDA,移动台,等等),掌上或口袋大小的计算机,手表,游戏设备,服务器,路由器,网络计算机,同等设备,另一网络节点,或另外的如上面所列的设备类型,等等。然而,远程计算设备4050作为便携式计算机来展示,其包括在此所描述的关于计算机4002的许多或所有的元素和特点。
[0458] 在计算机4002和远程计算机4050之间的逻辑连接被描述为本地局域网(LAN)4052和通用广域网(WAN)4054。这些网络环境在办公室,企业范围的计算机网络,内部因特网,因特网,固定和移动的电话网,特别的和基础结构的无线网络,其它无线网络,游戏网络,一些它们的组合,等等中是很平常的。这些网络和通信连接是传输介质的例子。
[0459] 当在LAN网络环境中实现时,计算机4002通常通过网络接口或适配器4056连接到LAN4052。当在WAN网络环境中实现时,计算机4002通常包括调制解调器4058或其它用来在WAN4054上建立通信的装置。位于计算机4002的内部或外部的调制解调器4058可以通过输入/输出接口4042或任何其它合适的方法连接到系统总线4008。应该理解所展示的网络连接是示例的并且可以使用其它装置来在计算机4002和4050之间建立通信链路。
[0460] 进一步,可以使用其它专门为服务器设计的硬件。例如,可以使用SSL加速卡来卸载SSL计算。此外,尤其在进行网络负载平衡操作的环境中,在网络接口或适配器4056上的TCP卸载硬件和/或分组分类器可以在服务器设备中安装和应用。
[0461] 在网络化的环境中,例如用操作环境4000来展示的环境中,程序模块或其它描述关于计算机4002的指令,或它们的部分所可以被全部地或部分地存储在远程介质存储器设备中。作为例子,远程应用4060置于远程计算机4050的存储器部件上,但可以通过计算机4002使用或存取。而且,为了展示的目的,应用程序4030和其它处理器可执行指令,例如操作系统4028,在此被作为离散的框来展示,但是应该认识到,这些程序,部件,和其它指令在各种时间置于计算设备4002的不同的存储部件中(和/或远程计算设备4050)并被计算机4002的处理器4004所执行(和/或那些远程计算设备4050)。
[0462] 尽管用特定于结构,逻辑,算法,和功能特征和/或示意图的语言来描述了系统,介质,设备,方法,程序,装置,技术,方案,过程,配置,和其它实现方式,但是应该明白在所附的权利要求书中所限定的本发明并不一定要限定到所描述的具体特征或示意图。而是,仅仅是作为实现所要求保护的发明的示例形式来公开具体的特征和示意图。