利用主机状态信息进行网络负载平衡转让专利

申请号 : CN200410063258.2

文献号 : CN1578320B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : C·L·达林J·M·周S·施瑞瓦斯塔瓦C·萨巴拉曼

申请人 : 微软公司

摘要 :

在第一示例性介质实现方式中,一个或多个处理器可存取访问介质,包括处理器可执行指令,当所述指令被执行时,可以指导系统进行操作,包括:在多个主机中累积主机状态信息;和从所述的多个主机发送所述累积的主机状态信息。在第二示例性介质实现方式中,一个或多个处理器可存取访问介质,包括处理器可执行指令,当所述指令被执行时,可以指导系统进行操作,包括:接收来自多个主机的主机状态信息;和根据所接收到的主机状态信息作出进行负载平衡的决定。在第三示例性介质实现方式中,一个或多个处理器可存取访问介质,包括处理器可执行指令,当所述指令被执行时,可以指导系统执行操作,包括:在每一个应用程序基础上确定健康状态和负载信息;和根据所述的健康状态和负载信息来从多个应用程序中选择一个应用程序。

权利要求 :

1.一种网络负载平衡方法,包括:

接收来自多个主机的特定应用的健康状态和负载信息,所述特定应用的健康状态和负载信息包括指示应用程序的状态是否良好、故障或未知的应用程序健康状态;和根据所接收到的特定应用的健康状态和负载信息作出负载平衡判决。

2.如权利要求1中所述的方法,其特征在于,还包括:

接收来自客户端的用于一新连接的请求;

其中所述作出负载平衡判决包括:

根据所接收到的应用特定的健康状态和负载信息为该新连接选择一个目的目标。

3.如权利要求1中所述的方法,其特征在于,所述的接收来自多个主机的特定应用的健康状态和负载信息包括下述至少一个操作:直接从所述多个主机中的一个或多个主机接收所述特定应用的健康状态和负载信息;

不直接从所述多个主机中的一个或多个主机接收所述特定应用的健康状态和负载信息。

4.一种用于网络负载平衡的系统,包括:

接收来自多个主机的特定应用的健康状态和负载信息的装置,所述特定应用的健康状态和负载信息包括指示应用程序的状态是否良好、故障或未知的应用程序健康状态;和根据所接收到的特定应用的健康状态和负载信息作出负载平衡判决的装置。

5.如权利要求4所述的系统,其特征在于,所述的接收来自多个主机的特定应用的健康状态和负载信息的装置包括:通过至少一个代理接收来自所述多个主机的特定应用的健康状态和负载信息的装置。

6.如权利要求4所述的系统,其特征在于,所述特定应用的健康状态和负载信息包括至少一个负载平衡指示;并且其中所述的接收来自多个主机的特定应用的健康状态和负载信息的装置包括:通过至少一个代理接收来自所述多个主机的所述至少一个负载平衡指示的装置,所述的至少一个代理调用一个或多个应用程序编程接口API来进栈推入所述的至少一个负载平衡指示。

7.如权利要求4所述的系统,其特征在于,所述的系统包括一个单一设备和多个设备中的至少一种。

8.一种用于网络负载平衡的系统,其特征在于,包括:

健康状态和负载基础结构,适用于确定特定应用的健康状态和负载信息,所述特定应用的健康状态和负载信息包括指示应用程序的状态是否良好、故障或未知的应用程序健康状态;和负载平衡基础结构,适用于在分配请求到多个应用程序时利用所述特定应用的健康状态和负载信息。

9.如权利要求8所述的系统,其特征在于,所述的健康状态和负载基础结构包括存储有所述特定应用的健康状态和负载信息的至少一部分的健康状态和负载表。

10.如权利要求8所述的系统,其特征在于,所述的健康状态和负载基础结构包括存储有所述特定应用的健康状态和负载信息的至少一部分的健康状态和负载表;所述的健康状态和负载表包括多个条目,所述多个条目的每一个条目与所述多个应用程序中的一个应用程序相关联。

11.如权利要求8所述的系统,其特征在于,所述的健康状态和负载基础结构包括存储有所述特定应用的健康状态和负载信息的至少一部分的健康状态和负载表;所述的健康状态和负载表包括多个条目,所述多个条目的每一个包括:与该条目相关联的一个特定应用程序的应用程序标识符、描述所述特定应用程序的至少一个状态的特征的信息、和有关该特定应用程序的至少一个负载平衡指示。

12.如权利要求8所述的系统,其特征在于,所述的负载平衡基础结构包括存储有所述特定应用的健康状态和负载信息的联合的健康状态和负载高速缓存。

13.如权利要求8所述的系统,其特征在于,所述的负载平衡基础结构包括存储有在多个主机上执行的所述多个应用程序的特定应用的健康状态和负载信息的联合的健康状态和负载高速缓存。

14.如权利要求8所述的系统,其特征在于,所述的特定应用的健康状态和负载信息包括特定应用程序端点的健康状态和负载信息。

15.如权利要求8所述的系统,其特征在于,进一步包括:

代理设备,该代理设备包括所述健康状态和负载基础结构的至少部分,所述健康状态和负载基础结构的所述至少部分适用于通过执行外部监视操作来确定所述特定应用的健康状态和负载信息。

16.如权利要求8所述的系统,其特征在于,

所述的健康状态和负载基础结构包括存储有所述特定应用的健康状态和负载信息的多个健康状态和负载表;和所述的负载平衡基础结构包括存储有所述特定应用的健康状态和负载信息的多个联合的健康状态和负载高速缓存。

17.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:在其上分布有所述健康状态和负载基础结构的多个主机,所述多个主机的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存。

18.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:在其上分布有所述健康状态和负载基础结构的多个主机,所述多个主机的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存;

其中所述多个联合的健康状态和负载高速缓存中的每个联合的健康状态和负载高速缓存包括存储在所述的多个健康状态和负载表中的每个健康状态和负载表中的所述特定应用的健康状态和负载信息。

19.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:在其上分布有所述健康状态和负载基础结构的多个主机,所述多个主机的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存;

其中所述的多个应用程序在所述的多个主机上执行。

20.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:驻留于多个设备上的多个主机,所述的健康状态和负载基础结构分布在所述的多个主机上,所述的多个主机中的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和由至少一个设备组成的并对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元中的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存。

21.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:驻留于多个设备上的多个主机,所述的健康状态和负载基础结构分布在所述的多个主机上,所述的多个主机中的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和由至少一个设备组成的并对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元中的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存;

其中所述的健康状态和负载基础结构包括所述负载平衡基础结构的一个远端部分。

22.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:驻留于多个设备上的多个主机,所述的健康状态和负载基础结构分布在所述的多个主机上,所述的多个主机中的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和由至少一个设备组成的并对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元中的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存;

其中所述的至少一个设备是所述的多个设备中的一个。

23.如权利要求16所述的系统,其特征在于,所述的系统进一步包括:驻留于多个设备上的多个主机,所述的健康状态和负载基础结构分布在所述的多个主机上,所述的多个主机中的每个主机拥有所述多个健康状态和负载表中的一个健康状态和负载表;和由至少一个设备组成的并对应于所述负载平衡基础结构的至少一部分的多个负载平衡单元,所述多个负载平衡单元中的每个负载平衡单元拥有所述多个联合的健康状态和负载高速缓存中的一个联合的健康状态和负载高速缓存;

其中所述的至少一个设备不是所述的多个设备中的一个;和

其中所述的健康状态和负载基础结构进一步适用于从所述的多个设备将所述特定应用的健康状态和负载信息传播到所述的至少一个设备。

24.如权利要求8所述的系统,其特征在于,所述的健康状态和负载基础结构和所述的负载平衡基础结构能够使用消息协议来在它们之间进行涉及所述特定应用的健康状态和负载信息的通信。

25.如权利要求24所述的系统,其特征在于,所述的消息协议包括一个或多个下述的消息类型:心跳消息类型、再见消息类型、行变化消息类型、获得表快照消息类型、发送表快照消息类型、假定表状态消息类型、和假定错误消息类型。

26.如权利要求24所述的系统,其特征在于,所述的消息协议包括用组成员关系来进行通信的能力。

27.如权利要求8所述的系统,其特征在于,所述的负载平衡基础结构,在一个故障之后,能够经过所述的健康状态和负载基础结构使用一个消息协议来在它们之间进行通信来恢复所述特定应用的健康状态和负载信息。

28.如权利要求8所述的系统,其特征在于,所述的负载平衡基础结构进一步适用于使用一个或多个分配方案分配请求到所述的多个应用程序。

29.如权利要求28所述的系统,其特征在于,所述的一个或多个分配方案包括令牌分配方案和百分比分配方案中的至少一个。

30.如权利要求28所述的系统,其特征在于,所述的一个或多个分配方案需要使用一种定时器期满机制。

31.如权利要求28所述的系统,其特征在于,所述一个或多个分配方案可以由所述负载平衡基础结构的健康状态和负载处理器来完成。

32.如权利要求11所述的系统,其特征在于,所述应用程序标识符唯一地从所述一个或多个应用程序中识别出所述特定应用程序。

33.如权利要求11所述的系统,其特征在于,所述的应用程序标识符包括虚拟互联网协议IP地址和端口、实际IP地址和端口、与所述特定应用程序相关的协议、和专用于该协议的信息中的至少一个。

34.如权利要求11所述的系统,其特征在于,所述应用程序标识符包括至少一个全局唯一标识符GUID。

35.如权利要求11所述的系统,其特征在于,所述描述所述特定应用程序的至少一个状态的特征的信息包括应用程序健康状态、应用程序负载、和应用程序容量中的至少一个。

36.如权利要求35所述的系统,其特征在于,所述的应用程序负载指示所述的特定应用程序被占有的情况;以及所述应用程序容量指示所述特定应用程序的最大容量。

37.如权利要求36所述的系统,其特征在于,所述特定应用程序的最大容量是相对于在所述系统中执行的与所述特定应用程序属于相同类型的应用程序的总容量来表示的。

38.如权利要求36所述的系统,其特征在于,所述特定应用程序的最大容量被表示为一个没有单位的有限数字。

39.如权利要求11所述的系统,其特征在于,所述至少一个负载平衡指示可以提供给多个负载平衡单元,为进行关于所述特定应用程序相对于相同应用程序类型的其它应用程序的网络负载平衡提供指导。

40.如权利要求11所述的系统,其特征在于,所述至少一个负载平衡指示包括有效、耗尽、无效。

41.如权利要求11所述的系统,其特征在于,所述至少一个负载平衡指示包括目标负载平衡状态指示和当前负载平衡状态指示。

42.如权利要求11所述的系统,其特征在于,所述的系统进一步包括:多个设备,所述的多个设备中的每一个设备分别包括各自的健康状态和负载表。

43.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述至少一个消息包括心跳消息,所述心跳消息向所述一个或多个负载平衡单元指示所述至少一个主机正在运行。

44.如权利要求43所述的系统,其特征在于,所述心跳消息的格式包括所述至少一个主机的标识符、健康状态和/或负载信息的差错校验数据、和域名系统DNS名。

45.如权利要求43所述的系统,其特征在于,所述心跳消息的格式允许包含一块号/代标识符ID对。

46.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述至少一个消息包括再见消息,所述再见消息向所述的一个或多个负载平衡单元指示出所述至少一个主机打算关机。

47.如权利要求46所述的系统,其特征在于,所述再见消息的格式包含所述至少一个主机的标识符。

48.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述至少一个消息包含行变化消息,所述行变化消息向所述一个或多个负载平衡单元指示出所述至少一个主机的一个应用程序的健康状态和/或负载信息已经改变。

49.如权利要求48所述的系统,其特征在于,所述行变化消息的格式包括所述至少一个主机的标识符、所述应用程序的标识符、反映所述变化的操作、和用于该操作的数据。

50.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述的至少一个消息包括从所述的一个或多个负载平衡单元发送到所述至少一个主机的获得表快照消息,所述的获得表快照消息请求所述至少一个主机的当前健康状态和/或负载信息的快照。

51.如权利要求50所述的系统,其特征在于,所述获得表快照消息的格式包含所述一个或多个负载平衡单元的请求负载平衡单元的标识。

52.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述的至少一个消息包含从所述至少一个主机发送到所述一个或多个负载平衡单元的请求负载平衡单元的发送表快照消息,所述的发送表快照消息提供了所述至少一个主机的当前健康状态和/或负载信息的快照。

53.如权利要求52所述的系统,其特征在于,所述发送表快照消息的格式包含所述至少一个主机的所述当前健康状态和/或负载信息的所述快照。

54.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述至少一个消息包含从所述的至少一个主机发送到所述一个和多个负载平衡单元的假定表状态消息,所述假定表状态消息包括指示由所述至少一个主机所期望存在于至少一个负载平衡单元的当前负载平衡状态指示的负载平衡状态指示。

55.如权利要求54所述的系统,其中所述假定表状态消息的格式包含所述至少一个主机的标识符和所述当前负载平衡状态指示。

56.如权利要求24所述的系统,其特征在于,所述消息协议被实现在至少一个主机和一个或多个负载平衡单元之间,所述消息协议包含至少一个消息,所述至少一个消息包含从所述一个或多个负载平衡单元的一个负载平衡单元发送到先前发送了假定表状态消息的所述至少一个主机的假定错误消息,所述的假定错误消息指示所述的一个负载平衡单元有一个与包含在所述假定表状态消息中的一个假定的负载平衡状态指示不同的实际负载平衡状态指示。

57.一种用于网络负载平衡的方法,包括:

在每一个应用程序基础上确定健康状态和负载信息,所述健康状态和负载信息包括指示应用程序的状态是否良好、故障或未知的应用程序健康状态;和根据所述的健康状态和负载信息从多个应用程序中选择一个应用程序用于负载平衡判决。

58.如权利要求57所述的方法,其特征在于,所述的确定操作包括下述操作:确定所述的多个应用程序中的应用程序何时开始和停止。

59.如权利要求57所述的方法,其特征在于,所述的确定操作包括下述操作:确定所述的多个应用程序的一个应用程序何时是良好的和该应用程序何时出现故障或处于故障当中。

60.如权利要求57所述的方法,其特征在于,所述的确定操作包括下述操作:相对于一个特定应用程序类型的一个或多个其它的应用程序的负载来确定所述特定应用程序类型的一个给定应用程序的负载。

61.如权利要求57所述的方法,其特征在于,还包括:

在每个应用程序基础上接收关于对所述健康状态和负载信息的确定的外部输入;

其中所述的确定步骤包括下述操作:

在每个应用程序的基础上根据所述的外部输入确定所述的健康状态和负载信息。

62.如权利要求57所述的方法,其特征在于,还包括:

从至少一个主机传播所述健康状态和负载信息到一个或多个负载平衡单元。

63.如权利要求57所述的方法,其特征在于,还包括:

从至少一个主机使用消息协议传播所述的健康状态和负载信息到一个或多个负载平衡单元。

64.如权利要求57所述的方法,其特征在于,还包括:

从至少一个主机使用成员关系分组将所述的健康状态和负载信息传播到一个或多个负载平衡单元。

65.如权利要求64所述的方法,其特征在于,所述的传播操作包括下述操作:从所述至少一个主机发送一个心跳消息到一个领导主机,其中所述的心跳消息包括一个传送指示,以指导所述的领导主机,即使在成员关系分组中没有变化发生时,也将所述的心跳消息传送到所述的一个或多个负载平衡单元。

66.如权利要求57所述的方法,其特征在于,还包括:

从至少一个健康状态和负载表传播所述的健康状态和负载信息到一个或多个联合的健康状态和负载高速缓存。

67.如权利要求57所述的方法,其特征在于,还包括:

接收来自多个主机的健康状态和负载信息;和

高速缓存所述的健康状态和负载信息。

68.如权利要求57所述的方法,其特征在于,还包括:

接收来自多个主机的健康状态和负载信息;

高速缓存所述的健康状态和负载信息;

接收请求一连接开始的分组;和

为所述的连接开始查询经高速缓存的健康状态和负载信息;

其中所述的选择操作包括下述操作:

根据所述的查询在所述多个应用程序中选择所述的应用程序。

69.如权利要求68所述的方法,其特征在于,所述的连接开始属于一个特定的应用程序类型。

70.如权利要求57所述的方法,其特征在于,所述的选择操作包括下述操作:响应于所述的健康状态和负载信息,从多个应用程序端点中选择一个应用程序端点。

71.如权利要求57所述的方法,其特征在于,所述的选择操作包括下述操作:响应于所述的健康状态和负载信息,从被分布到多个主机中的多个应用程序端点中选择一个应用程序端点。

72.如权利要求57所述的方法,其特征在于,所述的选择操作包括下述操作:响应于所述的健康状态和负载信息,根据在多个应用程序端点之间或之中的相对可用容量,从所述多个应用程序端点中选择应用程序端点的分配。

73.如权利要求72所述的方法,其特征在于,所述的选择操作包括进一步的操作:使用令牌分配方案来选择所述应用程序端点的分配。

74.如权利要求72所述的方法,其特征在于,所述的选择操作包括进一步的操作:使用百分比分配方案来选择所述应用程序端点的分配。

75.如权利要求72所述的方法,其特征在于,所述的多个应用程序端点对应于单一应用程序类型的应用程序。

76.如权利要求57所述的方法,其特征在于,所述的选择操作包括下述操作:为了平衡由进入的分组所引起的网络负载,响应于所述的健康状态和负载信息从所述多个应用程序中选择所述应用程序。

77.如权利要求57所述的方法,其特征在于,所述的选择操作包括下述操作:为了平衡由进入的连接请求所引起的网络负载,响应于所述的健康状态和负载信息从所述多个应用程序中选择所述应用程序。

说明书 :

利用主机状态信息进行网络负载平衡

技术领域

[0001] 本发明一般地涉及网络负载平衡,尤其涉及仅以例子的方式给出但不作为限制的利用主机状态信息进行网络负载平衡。

背景技术

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

发明内容

[0009] 在第一示例性介质实现中,一个或多个处理器可存取访问的介质包括处理器可执行的指令,当被执行时,指示系统执行下述操作,包括:在多个主机积聚主机状态信息;以及从多个主机发送积聚的主机状态信息。在第二示例性介质实现中,一个或多个处理器可存取访问的介质,包括由处理器可执行的指令,当被执行时,指示系统执行下述操作,包括:接收来自多个主机的主机状态信息;以及响应于所接收到的主机状态信息来作出负载平衡判决。在第三示例性介质实现中,一个或多个处理器可存取访问的介质包括由处理器可执行的指令,当被执行时,指示系统执行下述操作,包括:在每一个应用程序的基础上确定健康状态和负载信息;以及响应于该健康状态和负载信息从多个应用程序中选择一个应用程序。
[0010] 在第四示例性介质实现中,一个或多个处理器可存取访问的介质包括由处理器可执行的指令,当被执行时,指示系统执行下述操作,包括:对多个应用程序端点分析健康状态和/或负载信息;以及响应于所述分析来为所述多个应用程序端点确定令牌分配。
[0011] 在第五示例性介质实现中,一个或多个处理器可存取访问的介质包括由处理器可执行的指令,当被执行时,能够使系统在至少一个主机和一个或多个负载平衡单元之间完成一个消息协议,该消息协议用来在所述至少一个主机和所述的一个或多个负载平衡单元之间传递健康状态和/或负载信息。
[0012] 在一个示例性系统实现中,系统包括:主控一个或多个应用程序的至少一个设备,所述的至少一个设备包括包含有多个条目的健康状态和负载表,所述多个条目中每一个条目与所述一个或多个应用程序的一个应用程序相关联;所述多个条目中的每个条目包括:所述一个或多个应用程序的某一应用程序的应用程序标识符;描述该应用程序的至少一个状态的特点的信息;和关于该应用程序的至少一个负载平衡指示。
[0013] 其它的方法、系统、方式、装置、应用程序编程接口(API)、设备、介质、过程、配置,等等实现方式将在此描述。

附图说明

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

具体实施方式

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