买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】低重新分发的负载均衡_微软技术许可有限责任公司_201780038200.8 

申请/专利权人:微软技术许可有限责任公司

申请日:2017-06-15

公开(公告)日:2021-11-19

公开(公告)号:CN109313579B

主分类号:G06F9/50(20060101)

分类号:G06F9/50(20060101)

优先权:["20160620 US 15/187,592"]

专利状态码:有效-授权

法律状态:2021.11.19#授权;2019.03.05#实质审查的生效;2019.02.05#公开

摘要:负载均衡计算设备接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求。负载均衡计算设备选择分布式计算系统的成员节点来处理工作负载请求。从分布式计算系统的成员节点池中选择成员节点。选择包括:确定用于工作负载的基线分配的成员节点;以及基于对工作负荷的标识符、对成员节点的基线基数以及对池中的成员节点的基数执行的数学运算的结果来选择成员节点。接着,将工作负载请求的处理指派至所选成员节点。

主权项:1.一种用于负载均衡方法,包括:由负载均衡计算设备接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求;由所述负载均衡计算设备选择分布式计算系统的成员节点来处理所述工作负载请求,使得所述成员节点从所述分布式计算系统的成员节点池中被选择,并且使得所述选择包括:使用基线函数来确定用于针对所述工作负载的基线指派的成员节点,使得为针对所述工作负载的所述基线指派所确定的所述成员节点与在所述池中的成员节点的基数等于成员节点的基线基数时所选择的所述成员节点相对应;以及基于对所述工作负载的标识符、对成员节点的所述基线基数以及对所述池中的成员节点的所述基数执行的数学运算的结果来选择所述成员节点,使得如果所述池中的成员节点的所述基数小于成员节点的所述基线基数并且所述工作负载的所述基线指派是到所述池中的所述成员节点中的一个,则被指派有到所述工作负载的所述基线指派的所述成员节点被选择,其中所述数学运算是至少部分地基于针对所述工作负载的所述基线指派;以及将所述工作负载请求的所述处理指派到所选择的所述成员节点。

全文数据:低重新分发的负载均衡背景技术在计算机网络中,多个成员节点可以用于协作操作例如,作为分布式计算系统以改进单个成员节点的可能可用性。在这种分布式计算系统中,负载均衡过程通常用于确定如何在分布式计算系统中的成员节点之间分发工作。附图说明参考以下附图描述本公开的非限制性和非穷举性实施例。在附图中,除非另有说明,否则相同的附图标记在各个附图中指代相同的部件。这些附图不一定按比例绘制。为了更好地理解本公开,将参考以下详细描述,该详细描述将结合附图阅读,在附图中:图1是示出在其中可以采用本技术的各方面的合适环境的一个示例的框图。图2是示出根据所公开技术的各方面的合适计算设备的一个示例实施例的框图;图3是示出用于负载均衡的过程的实施例的逻辑流程图;图4是示出用于负载均衡的系统的实施例的框图;图5A、5B和5C是示出图3的过程的实施例的逻辑流程图;和图6A和6B是根据本公开的方面的散列值结果表,其示出了针对图5A-5C的过程的示例实施例的示例结果。具体实施方式以下描述提供了用于彻底理解以及支持描述本技术的各种实施例的描述的具体细节。本领域技术人员将理解,可以在不具有这些细节中的多个的情况下实践本技术。在一些情况下,为了避免不必要地模糊对本技术的实施例的描述,而没有详细示出或描述公知的结构和功能。本公开中使用的术语旨在以其最广泛的合理方式来解释,即使其与本技术的某些实施例的详细描述一起使用也是如此。尽管下面可以强调某些术语,但是将在本详细描述部分中明确并且具体地定义任何旨在以任何受限的方式来解释的术语。在整个说明书和权利要求书中,除非上下文另有指示,否则以下术语至少采用本文明确相关的含义。以下确定的含义不一定限制术语,而仅仅提供术语的说明性示例。例如,“基于”和“根据”中的每一个都不是排他性的,并且等同于术语“至少部分地基于”,并且包括基于其他因素这些其他因素中的一些可能在本文中没有被描述的选项。作为另一个例子,术语“经由”不是排他性的,并且等同于术语“至少部分地经由”,并且包括经由附加因素这些附加因素中的一些可能在本文中没有被描述的选项。“之中in”的含义包括“之中in”和“之上on”。这里使用的短语“在一个实施例中”不一定指代相同的实施例,尽管它可以这样指代。使用特定的文本数字指示符并不意味着存在较低值的数字指示符。例如,描述“从包括第三个foo和第四个bar的组中选择的小部件”本身并不意味着至少有三个foo,也不意味着存在至少四个bar元素。除非明确排除负数引用,否则单数的引用仅仅是为了阅读的清楚并且可以包括多个引用。除非另有明确说明,否则术语“或”是包含性的“或”运算符。例如,短语“A或B”表示“A、B、或者A和B”。如这里所使用的,术语“组件”和“系统”旨在涵盖硬件、软件或者硬件和软件的各种组合。因此例如,系统或组件可以是过程、在计算设备上执行的过程、计算设备或其一部分。如这里所使用的,在一些示例中,“节点”可以是设备。“确定性函数”是一个函数,对于给定的一组输入,它总是返回相同的结果。介绍简而言之,负载均衡计算设备接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求。负载均衡计算设备选择分布式计算系统的成员节点来处理工作负载请求。从分布式计算系统的成员节点池中选择成员节点。选择包括:使用基线函数来确定用于针对工作负载的基线指派的成员节点,使得为针对工作负载的基线指派所确定的成员节点与在池中的成员节点的基数cardinality等于成员节点的基线基数时选择的成员节点相对应;以及基于对工作负荷的标识符、对成员节点的基线基数和对池中的成员节点的基数执行的数学运算的结果来选择成员节点,使得如果池中的成员节点的基数小于成员节点的基线基数并且工作负载的基线指派是到池中的成员节点中的一个,则选择被指派有到工作负载的基线指派的成员节点。数学运算是至少部分地基于针对工作负载的基线指派。接着,和将工作负载请求的处理指派到所选择的成员节点。在现代计算机环境中,个体节点的可用性可能不足以满足某些可用性要求、目标、目的、服务水平协议SLA等。通常,多个节点协同操作例如,作为分布式计算系统以改进单个节点的可能可用性。在这种分布式计算系统中,负载均衡通常用于确定如何在分布式计算系统的成员节点之间分发工作。计算机科学的进步已经使得向分布计算系统添加节点或从分布式计算系统删除节点是相对简单和快速的。动态地向分布式计算系统添加和移除节点可以具有快速调整按需供应的益处。这继而可能导致更少的由于过度供应的浪费以及更少的由于容量的故障。存在多个负载均衡过程,其可以在成员节点池之间分发工作。一个示例是循环RoundRobin过程,其以循环方式来为成员节点池中的每个成员节点指派基本相等的工作部分。本公开的实施例可以用于各种各样的负载均衡分布式计算系统,诸如其中某些成员节点可以保留或以其他方式高速缓存在服务先前请求时所获得的信息的计算系统。在这些和其他分布式计算系统中,采用具有低重新分发的负载均衡过程可能是有益的。这种分布式计算系统的一个示例是服务域名系统DNS请求的分布式计算系统。例如,利用DNS,需要响应不同查询所需的计算负荷中可能存在显著差异,例如基于在服务节点试图查找针对查询的响应时,请求是否导致高速缓存未命中或高速缓存命中。对于高速缓存命中,可以简单地在服务节点的存储器中找到响应并将其返回至请求者。对于高速缓存未命中,服务节点可能必须执行磁盘和或网络IO,潜在地向其他服务器发送多个请求以找到正确的响应。通过向同一服务节点发送相同或类似的查询,可以更好地服务这些类型的工作负载。在一些实施例中,在基线条件期间,这通过使负载均衡器对包括或以其他方式与请求相关联的某个字段应用模数数学运算符modulusmathematicaloperator来实现。但是,当成员节点被添加到分布式计算系统或者从分布式计算系统被删除时,可能会出现问题。一些实施例应用低重新分发的负载均衡过程以代替使用典型的模数过程,其减少了工作的重新分发,因此,通过向相同的成员节点发送相同或类似的查询,这样的过程可以改善负载均衡的云型分布式计算系统的性能,其中可以确保效率。如上所述,本公开的一些实施例可以用于DNS服务的分布式计算系统中的负载均衡,但是本公开的各个方面可以用于任何合适的负载均衡,尤其是在低重新分发是有益的任何上下文中。例如,除了DNS应用之外,本公开的实施例可以用在其他合适的应用中例如涉及认证的应用例如,认证的HTTP,从而可以避免需要重新认证的重新分发。作为另一示例,本公开的实施例可以用于保持状态的网络地址转换设备。对于保持状态的网络地址转换设备,如果要重新分发网络通信,则通常会丢失重新分发的会话的状态信息,并且必须重新开始这样的会话。然而,该技术的一些实施例将低重新分发的负载均衡过程应用于网络地址转换设备,其保持状态以便减少向这些设备的网络通信的重新分发。说明性设备操作环境图1是可以实践本技术的各方面的环境100的图。如图所示,环境100包括经由网络130连接的计算设备110以及网络节点120。即使图1中示出了环境100的特定组件,在其他实施例中,环境100还可以包括附加的和或不同的组件。例如,在某些实施例中,环境100还可以包括网络存储设备、维护管理器和或其他合适的组件未示出。如图1所示,网络130可以包括一个或多个网络节点120,其互连多个计算设备110,并且将计算设备110连接到外部网络140例如因特网或内联网。例如,网络节点120可以包括交换机、路由器、集线器、网络控制器或其他网络元件。在某些实施例中,计算设备110可以被组织成机架、动作区域、分组、集合或其他合适的划分。例如,在所示实施例中,计算设备110被分组为三个主机组,其单独被标识为第一主机组、第二主机组和第三主机组112a-112c。在所示实施例中,主机组112a-112c中的每一个分别可操作地耦合到对应的网络节点120a-120c,其通常被称为“架顶”或“TOR”网络节点。然后,TOR网络节点120a-120c可以可操作地耦合到附加网络节点120,以形成层级hierarchical、平面flat、网格mesh或者允许计算设备110和外部网络140之间通信的其他合适类型的拓扑中的计算机网络。在其他实施例中,多个主机组112a-112c可以共享单个网络节点120。计算设备110实际上可以是任何类型的通用计算设备或专用计算设备。例如,这些计算设备可以是用户设备,诸如台式计算机、膝上型计算机、平板计算机、显示设备、相机、打印机或智能电话。然而,在数据中心环境中,这些计算设备可以是服务器设备,诸如应用服务器计算机、虚拟计算主机计算机或文件服务器计算机。此外,计算设备110可以单独配置为提供计算、存储和或其他合适的计算服务。例如,计算设备110可以被配置为执行工作负载和其他过程,诸如本文描述的工作负载和其他过程。在一些实施例中,网络节点120中的一个或者计算设备110中的一个可以作为负载均衡计算设备操作。负载均衡计算设备接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求,选择分布式计算系统的成员节点以处理工作负载请求,并将工作负载请求的处理指派至所选择的成员节点。在一些实施例中,多个主机组112-112c中的一个或多个用作分布式计算系统,其中每个计算设备作为分布式计算系统的成员节点操作。在其他实施例中,在网络节点之间执行负载均衡,并且网络节点120中的一个或多个是如下分布式计算系统:在该分布式计算系统中,一些网络节点120是分布式计算系统的成员节点。网络节点120可以被配置为执行工作负载和其他过程,诸如本文描述的工作负载和其他过程。说明性计算设备图2是示出其中可以实践本技术的各方面的计算设备200的一个示例的图。计算设备200实际上可以是任何类型的通用计算设备或者专用计算设备。例如,计算设备200可以是用户设备,诸如台式计算机、膝上型计算机、平板计算机、显示设备、相机、打印机或者智能电话。同样地,计算设备200还可以是服务器设备,诸如应用服务器计算机、虚拟计算主计算机或者文件服务器计算机,例如,计算设备200可以是图1的计算设备110或网络节点120的实施例。如图2所示,计算设备200包括处理电路210、操作存储器220、存储器控制器230、数据存储存储器250、输入接口260、输出接口270和网络适配器280。计算设备200的这些前面列出的组件中的每一个包括至少一个硬件元素。计算设备200包括至少一个处理电路210,其被配置为执行指令,诸如用于实现本文描述的工作负载、过程或技术的指令。处理电路210可以包括微处理器、微控制器、图形处理器、协处理器、现场可编程门阵列、可编程逻辑器件、信号处理器或者适合于处理数据的任何其他电路。在计算设备200的运行时间期间,上述指令以及其他数据例如,数据集,元数据,操作系统指令等可以被存储在操作存储器220中。操作存储器220还可以包括多种数据存储设备组件中的任何一种:例如易失性存储器、半易失性存储器、随机存取存储器、静态存储器、高速缓存、缓冲器或用于存储运行时信息的其他介质。在一个示例中,当计算设备200断电时,操作存储器220不保留信息。相反,作为引导或其他加载过程的一部分,计算设备200可以被配置为将指令从非易失性数据存储组件例如,数据存储组件250传送到操作存储器220。操作存储器220可以包括第四代双倍数据速率DDR4存储器、第三代双倍数据速率DDR3存储器、其他的动态随机存取存储器DRAM、高带宽存储器HBM、混合存储器立方体存储器、3D-堆叠存储器、静态随机存取存储器SRAM或者其他存储器,并且这种存储器可以包括集成在DIMM、SIMM、SODIMM或其他封装上的一个或多个存储器电路。这样的操作存储器模块或设备可以根据通道、排列rank和库bank来被组织。例如,操作存储器设备可以通过通道中的存储器控制器230而被耦合到处理电路210。计算设备200的一个示例可以包括每个通道一个或两个DIMM,每个通道具有一个或两个排列。排列内的存储器可以利用共享时钟、共享地址和命令总线来操作。而且,操作存储器设备可以被组织成几个库,其中库可以被认为是通过行和列寻址的阵列。基于这种操作存储器的组织,操作存储器内的物理地址可以由通道、排列、库,行和列的元组来引用。尽管进行了上述讨论,但特别地,操作存储器220不包括或包含通信媒体、任何通信媒体或者任何信号本身。存储器控制器230被配置为将处理电路210接合interface到操作存储器220。例如,存储器控制器230可以被配置为在操作存储器220和处理电路210之间接合通信命令、地址和数据。存储器控制器230还可以被配置为抽象或以其他方式管理来自处理电路210或者用于处理电路210的存储器管理的某些方面。虽然存储器控制器230被示为与处理电路210分离的单个存储器控制器,但是在其他示例中,也可以采用多个存储器控制器,多个存储器控制器可以与操作存储器220等集成。此外,多个存储器控制器可以集成到处理电路210中。这些和其他变化是可能的。在计算设备200中,数据存储存储器250、输入接口260、输出接口270和网络适配器280通过总线240被接合到处理电路210。尽管图2示出了作为单个无源总线的总线240,其他配置例如总线集合、点对点链路的集合、输入输出控制器、桥接器、其他接口电路或其任何集合可以被使用以将数据存储存储器250、输入接口260、输出接口270或网络适配器280接合到处理电路210。在计算设备200中,数据存储存储器250用于长期非易失性数据存储。数据存储存储器250可以包括各种非易失性数据存储设备组件中的任何一种,例如非易失性存储器、磁盘、磁盘驱动器、硬盘驱动器、固态驱动器或者可以用于信息的非易失性存储的任何其他介质。然而,特别地,数据存储存储器250不包括或包含通信媒体、任何通信媒体或任何信号本身。与操作存储器220相反,数据存储存储器250由计算设备200用于非易失性长期数据存储,而不是用于运行时数据存储。此外,计算设备200可以包括或者被耦合到任何类型的处理器可读介质,诸如处理器可读存储介质例如,操作存储器220和数据存储存储器250和通信介质例如,通信信号和无线电波。虽然术语“处理器可读存储介质”包括操作存储器220和数据存储存储器250,但是在整个说明书和权利要求中,无论是单数还是复数,特别地,术语“处理器可读存储介质”在本文中定义为使得该术语排除并且不包括通信介质、任何通信介质或者任何信号本身。然而,术语“处理器可读存储介质”确实包含处理器高速缓存、随机存取存储器RAM、寄存器存储器和或类似物。计算设备200还包括输入接口260,其可以被配置为使计算设备200能够从用户或从其他设备接收输入。此外,计算设备200包括输出接口270,其可以被配置为提供来自计算设备200的输出。在一个示例中,输出接口270包括帧缓冲器、图形处理器、图形处理器或加速器,并且被配置为渲染显示,以用于在单独的可视显示设备例如监视器,投影仪,虚拟计算客户端计算机等上呈现。在另一示例中,输出接口270包括可视显示设备,并且被配置为渲染和呈现显示,以用于观看。在所示示例中,计算设备200被配置为经由网络适配器280与其他计算设备或实体通信。网络适配器280可以包括有线网络适配器,例如以太网适配器、令牌环适配器或数字、或者订户线DSL适配器。网络适配器280还可以包括无线网络适配器,例如,Wi-Fi适配器、蓝牙适配器、ZigBee适配器、长期演进LTE适配器或5G适配器。尽管示出了具有以特定布置配置的某些组件的计算设备200,但是这些组件和布置仅仅是可以采用该技术的计算设备的一个示例。在其他示例中,数据存储存储器250、输入接口260、输出接口270或网络适配器280可以被直接耦合到处理电路210,或者经由输入输出控制器、桥接器或其他接口电路而被耦合到处理电路210。该技术的其他变形是可能的。计算设备200的一些实施例包括至少一个存储存储器例如,数据存储存储器250、至少一个操作存储器例如,操作存储器220和至少一个处理器例如,处理单元210,其分别适于存储和执行处理器可执行代码,其响应于执行而使得计算设备200能够执行动作,例如,图3中所示的并且在下文将参照图3进行讨论的处理。说明性过程为清楚起见,本文描述的过程是根据由特定设备或系统组件以特定顺序执行的操作来描述的。然而,应当注意其他过程不限于所述序列、设备或组件。例如,某些动作可以以不同的顺序执行、并行地执行、省略、或者可以通过附加的动作或特征来补充,而无论这些序列、并行性、动作或特征是否在本文中描述。同样地,本公开中描述的任何技术可以结合到所描述的过程或其他过程中,无论该技术是否结合过程具体描述。所公开的过程还可以在其他设备、组件或系统上执行或者由其他设备、组件或系统执行,而无论这些设备、组件或系统是否在本文中描述。这些过程也可以以各种方式被具化。例如,它们可以被具化为制品,例如,作为存储在计算机可读存储介质中的计算机可读指令、或者作为计算机实现的过程。作为备选示例,这些过程可以被具化为计算机可执行指令,并且经由通信介质来传输。图3是示出用于负载平衡的过程390的逻辑流程图。在开始框之后,该过程继续到框391,其中负载平衡计算设备例如,图2的计算设备200的实施例接收针对与工作负载相关联的处理工作负载请求的过程的负载平衡请求。该过程然后进行到框392-394,其中负载平衡计算设备选择分布式计算系统的成员节点来处理工作负载请求,使得从分布式计算系统的成员节点池中选择成员节点。更具体地,该过程首先从框391移动到框392。在框392,使用基线函数来确定成员节点用于针对工作负载的基线指派,使得为针对工作负载的基线指派所确定的成员节点与在池中的成员节点的基数等于成员节点的基线基数时所选择的成员节点相对应。“基数cardinality”是指存在多少个成员节点,即成员节点的数量。例如,如果成员池中有五个成员节点,则池中成员节点的基数为五。然后,该过程前进到框393。在框393,基于数学运算的结果选择成员节点。对以下执行数学运算:工作负载的标识符、成员节点的基线基数、以及池中成员节点的基数。执行数学运算,使得如果池中的成员节点的基数小于成员节点的基线基数并且工作负载的基线指派是到池中的成员节点中的一个,则选择被指派有对于工作负载的基线指派的成员节点。此外,数学运算至少部分地基于工作负荷的基线指派。然后,该过程进行到框394,其中将工作负载请求的处理指派到所选择的成员节点。然后处理移动到返回框,其他处理在此处恢复。在一些实施例中,负载均衡计算设备包括处理器可读存储介质,其具有存储于其上的用于负载均衡的过程可执行代码,其响应于至少一个处理器的执行而启用动作包括图3的过程390的动作。说明性系统图4是示出用于负载均衡的系统400的实施例的框图。系统400包括负载均衡计算设备411和分布式计算系统415。分布式计算系统415包括被组织到成员节点池410中的多个成员节点。计算设备411包括操作存储器430、存储存储器450和至少一个处理器419。操作存储器430适于存储用于计算设备411的运行时数据。至少存储存储器450和处理器419分别适于存储和执行处理器可执行,其响应于执行而使得计算设备411能够执行动作在一个示例中,诸如图3的过程390的动作。在一些示例中,计算设备411接收负载均衡请求,并向从成员节点池410中所选择的成员节点指派所请求的工作负载的处理。在一些示例中,成员节点池410包括来自分布式计算系统的成员节点,其连接在一起以达到目标级别的可用性。负载均衡计算设备411被布置为提供低重新分发的负载均衡技术,以在集群中的节点即,成员节点池410中的成员节点之间分发工作。可以动态地添加和移除集群中的节点即,成员节点池410中的成员节点以便按照需求调整供应。负载均衡计算设备411被布置为执行低重新分发的负载均衡技术,在节点的基数改变例如,在成员节点池410中的成员节点的数量改变时,该技术减少集群中节点例如,成员节点池410中的成员节点之间的工作的重新分发。负载均衡计算设备411可以用于合适的应用程序中,例如在如下应用中:在该应用中存在将相关、相同或者类似工作负载请求指派至分布式计算系统中的相同成员节点是有益的工作负载。低重新分发负载均衡技术减少了工作的重新分发,因此更可能将类似的查询发送到同一成员节点。在一些示例中,负载均衡计算设备411是内部DNS服务器。在这些实施例的一些中,工作负载是域名服务请求。然而,本公开不限于此。例如,除了在DNS应用中使用之外,本公开的实施例可以在其他合适的应用中使用,例如涉及认证的应用例如,认证的HTTP,其中工作负载是经认证的超文本传输协议请求,以便需要重新认证的重新分发可以被减少。本公开的实施例还可以用于网络地址转换设备,例如上面讨论的那些。此外,该技术还可以用于其他应用中,例如成员节点缓存数据、在处理请求中使用状态信息、对确定性函数的结果缓存以及重用相同的参数等的那些应用。虽然负载均衡计算设备411的一些实施例可以在软件中实现低重新分发的负载均衡技术,但是在其他实施例中,低重新分发的负载均衡技术备选地或者附加地由固件和或硬件例如,片上系统、专用集成电路和或其他合适的硬件和或固件执行。成员节点池410中的成员节点的基数可以例如基于工作负载而随时间变化。例如,如果成员节点池410中的各个成员节点的工作负载太大,则可以将一个或多个成员节点添加到成员节点池410中。相反,如果成员节点池410中的各个成员节点上的工作负载太小,可以从成员节点池中移除一个或多个成员节点。图4中所示的架构示出了一个实施例,其中在每个成员节点“之前”存在单独的负载均衡节点。例如,在一些实施例中,负载均衡节点是与分布式计算系统的成员节点分离的设备,并且负载均衡计算设备在将工作负载被指派至所选择的成员节点之后将工作负载请求转发到所选择的成员节点。然而,本公开不限于此,并且其他实施例可以采用其他架构。例如,在一些实施例中,每个成员节点本身可以执行负载均衡。例如,在一些实施例中,将请求发送到每个成员节点,并且每个成员节点自己确定是否要处理该请求。将要处理请求的成员节点确定其是要处理请求的成员节点,然后继续处理请求。每个其他成员节点确定其不是要处理请求的成员节点,并且因此响应于该确定而丢弃忽略该请求。在该示例中,每个成员节点本身是“负载均衡计算设备”。说明性函数作为示例提供的低重新分发的负载均衡技术的一个非限制性实施例是确定性函数,其接受3个参数作为输入并且返回表示成员节点实例的正整数作为输出,其中在这些示例中,三个输入参数和返回值如下。输入参数1--表示工作负荷的散列的值例如,查询的散列。可以使用任何合适的散列过程,例如MD4,MD5,SHA1或者工作负载的大小或ASCII代码。在一些实施例中,输入参数1是要查找的完整域名的散列。在其他实施例中,输入参数1是与查询相关联的一些其他散列和或与工作负载相关联的工作负载或其他标识符。在一些实施例中,输入参数1是与进行查询的用户相关联的值,例如cookie值或会话标识符。在其他实施例中,输入参数1是基于工作负载的唯一特性的一些其他合适的标识符。输入参数2--表示基线基数的值,即成员节点池中的成员节点的预期数量的基线。该值在执行负载均衡决策的成员节点之间应当保持一致,并且应表示成员节点池中成员节点的预期基数。无论此值如何,低重新分发的负载均衡技术都应该有效。然而,在具有递归函数的一些实施例中,当前成员节点的实际基数距离该值越远,则执行递归函数的迭代越多。输入参数3--表示成员节点池中的成员节点的当前基数的值。该值可以是自学习的或者被提供至负载均衡计算设备。通过观察超时和其他性能指标并相应地进行调整可以实现自学习。例如,自学习可以确定成员节点没有响应,并且因此可以确定非响应成员节点已经失效或被移除。备选地,负载均衡计算设备可能已经接收到指示成员节点已被移除的指令。输入参数3应该在执行负载均衡的节点队列中相对fairly一致,但不一定在任何给定时间都必须相同。该参数可能比基线输入参数2更高、更低或者相同。返回值--返回值表示针对要指派的工作负载所选择的成员节点。在一些实施例中,包括在该“说明性过程”部分中讨论的特定实施例,返回值对应于每个成员节点的编号,其中编号从1开始,并且不超过成员节点的当前基数除非存在没有成员节点,其中零作为错误指示而被返回。在其他实施例中,成员节点的编号从0开始,并且不比成员节点的当前基数小于超过1。在其他实施例中,可以使用用于成员节点的其他合适的编号方案。在期望将具有输入参数1的相同特定值例如,散列的重复调用发送到同一成员节点的实施例中,返回值可以表示由低重新分发的负载均衡函数所选择的成员节点。再次,仅通过示例的方式呈现了表示上述返回值的具体参数和方式,并且本公开决不限于该特定示例。图5A、5B和5C是示出图3的过程390的实施例的逻辑流程图。该过程的一个实施例是在函数590中实现的低重新分发的负载均衡过程,该函数具有三个输入参数输入参数1,输入参数2和输入参数3和如上所述的结果值。在该示例中,H表示输入参数1,使得H是指示工作负载的值例如,域名的哈希值;B表示输入参数2,使得B是表示成员节点池中的成员节点的基线基数的值;N表示输入参数3,使得N是成员节点的当前基数;并且R表示结果值例如,表示要向其指派工作负载请求的成员节点的值。在开始框之后,该过程前进到确定框571,其中确定成员节点的当前基数N是否等于成员节点的基线基数B。如果是,则该过程移动到框572,其中基于使用模B的模运算来指派结果值R,例如,R=[HmodB+1]。然后,该过程前进到返回框,在此处恢复其他处理。然而,如果框571处的确定是否定的即,N不等于B,则该过程转到确定框573,其中确定成员节点的当前基数N是否小于成员节点的基线基数B。如果是,则在前面的步骤中,成员节点的指派在较小的成员节点集合中分发。如果在确定框573处的确定是肯定的,则该过程前进到框574,其中再次调用函数590,其中针对N使用N+1的值的函数590的结果被指派至旧单元值OC。因此,这是运行[B-N+1]次的递归函数。然后,该过程移动到确定框575,其中确定OC是否大于N。如果是,则过程前进到框576,其中基于使用模N的模运算来指派结果值R,例如,R=[HmodN+1]。在框576,因为旧单元值将被指派至比该函数的成员节点的当前基数更高的值,相反使用模N来重新执行取模。然后该过程前进到返回框,在此处恢复其他处理。相反,如果在确定框575处的确定是否定的即,OC小于或等于N,则该过程改为前进到框577,其中基于使用模OC的模运算来指派结果值R,例如,R=[HmodOC+1],并且递归继续。在框577,因为旧单元值将被指派至当前成员节点之一的值,所以将结果指派至旧单元值以便最小化重新分发。关于框574-577,实质上,如果旧单元值OC小于N,则可以继续使用旧单元值。例如,如果基线是10,则对于返回值将是1-9中的任何值的每个查询,则仍然可以使用将与基线值10一起使用的结果框577。只有当值为10时才需要重新分发结果。因此,如果成员节点的基数等于基线值10,如果查询的值将为10,则需要基于模9而不是模10来重新分发查询框576。对于基线值的结果值为1-9的所有工作负载,则结果与存在10个成员节点时的结果值相同,并且对于基线值而具有结果值为10的所有工作负载,工作负载以循环roundrobin方式在剩余的九个成员节点上重新分发。以这种方式,相对于传统技术,重新分发得以减少。在成员节点的基数是来自基线的每个进一步的步骤中,将该函数被附加调用一次。例如,如果基线是10,并且只有7个成员节点,则该函数按照如下进行处理。首先,如果成员节点的基数等于基线基数10,则确定将请求指派至哪个成员节点。这例如通过循环分发方法例如使用模10来确定。接着,如果成员节点的基数等于9,则确定将请求指派至哪个成员节点。例如,如果在10个成员节点的情况下,请求将被发送到成员节点1-9中的任何一个,则该请求也将被发送到同一成员节点,就如同成员节点的基数是10。如果在10个成员节点的情况下请求将被发送到成员节点10,则使用模9计算来重新分发请求。接着,如果成员节点的基数等于8,则确定将请求指派至哪个成员节点。例如,如果在9个成员节点的情况下请求将被发送到成员节点1-8中的任何一个,则该请求也将被发送到相同的成员节点,就如同成员节点的基数是9。如果在9个成员节点的情况下请求将被发送到成员节点9,则使用模8计算来重新分发该请求。接者,在成员节点的基数等于7的情况下,确定将请求指派至哪个成员节点。这按照如下来确定。如果在8个成员节点的情况下该请求将被发送到成员节点1-7中的任何一个,则该请求也将被发送到同一成员节点,就如同成员节点的基数是8。如果在8个成员节点的情况下请求将被发送到成员节点8,则使用模7计算来重新分发请求。因此,在一些实施例中,在框574-577,响应于池中成员节点的基数小于成员节点的基线基数,选择成员节点是基于对工作负载的标识符、对成员节点的基线基数以及对成员的基数执行迭代函数的结果。其中该函数被迭代以下次数,该次数是由成员节点的基线基数减去池中的成员节点的基数来给出。此外,在一些实施例中,对于迭代函数的第一次迭代,正被分析的成员节点的基数比成员节点的基线基数小1。在一些实施例中,对于迭代函数的第一次迭代之后的每次迭代,正被分析的成员节点的基数比正在针对先前迭代分析的成员节点的基数小1。在一些实施例中,迭代函数包括,对于迭代函数的每次迭代:响应于针对比当前正在被分析的成员节点的基数大1的成员节点而选择的成员节点是成员节点之中当前正在被分析的成员节点中的一个,选择针对比当前正在被分析的成员节点的基数大1的成员节点而选择的成员节点;以及响应于针对比当前正在被分析的成员节点的基数大1的成员节点而选择的成员节点是在当前正在被分析的成员节点之外,基于当前正在被分析的成员节点之中的工作负载选择的重新分发来选择成员节点。如果在确定框573处的确定是否定的即,N大于B,则该过程从确定框573前进到框578。如果是,则在前面的步骤中,成员节点指派在成员节点的更大集合中被分发。在框578,基于使用模N-1的模运算来确定调制值MN-1,例如,MN-1=[{HmodN-1}+1]。该过程然后移动到框579,其中基于使用模N的模运算来确定模值MN,例如MN=[HmodN+1]。该过程然后前进到确定框580,其中确定MN-1=MN是否成立。如果是,则过程进行到框581,其中结果值R被指派值N即,最高编号最新成员节点。以这种方式,正确的小分数从每个N-1个成员节点流出到最新的成员节点N。例如,如果成员节点的数量从基线4增加到总共5个,那么B为4,N为5,并且有4个成员节点,每个成员节点以50%运行,然后在将成员节点的基数从4增加到5时,每个成员节点的10%被指派至成员节点5,现在所有5个成员节点都处理40%--或者模运算执行的目的是在作为相对有效的计算操作的同时尽可能接近这些分数。相反,如果在确定框580处的确定是否定的,则该过程从确定框580进行到框582,其中针对N使用N-1的值来再次调用函数590,其中针对N使用N-1的值的函数590的结果被指派给该函数的结果R。因此,这是运行[N-B+1]次的递归函数。以这种方式,返回旧单元值以作为结果。关于框578-582,实质上如果存在比成员节点的基线基数多一个成员节点,则工作负载d1B+1倍从1-B成员节点中的每个成员节点被重新分发到B+1成员节点,同时保持1-B个成员节点中的每个成员节点具有工作负载的BB+1倍,以便重新分发最小化--或者模运算的目的是到达尽可能接近这些分数并且效率合理。如果成员节点的基数大于B+1,则只需为存在多于B+1个成员节点中的每个成员节点重复额外的一次。例如,如果成员节点的基线基数为10,但是存在12个成员节点,则首先确定10个成员节点的分发如前所述,对应于模10运算。接着,以如下方式确定11个成员节点的分发:相对于针对10个成员节点的工作负载指派,以模11的方式选择的针对成员节点1至10中的每个成员节点的工作负荷指派的111被重新分发至成员节点11相对于存在十个成员节点的情况,将工作负载请求的1011留给成员节点1至10中的每一个--或者通过模11函数接近这些分数。接着,以如下方式确定12个成员节点的分发:当存在11个成员节点时,相对于工作负载指派,以模12方式选择的成员节点1至11中的每个的工作负载指派的112被重新分发至成员节点12相对于存在11个成员节点的情况,使成员节点1至11中的每个具有工作负载请求的1112--或者接近具有模12函数的那些分数。因此,在一些实施例中,在框578-582,对于迭代函数的第一次迭代,正在被分析的成员节点的基数比成员节点的基线基数大1。在一些实施例中,对于迭代函数的第一次迭代之后的每次迭代,正在被分析的成员节点的基数比正在被分析用于先前迭代的成员节点的基数大1。在一些实施例中,迭代函数包括,对于迭代函数的每次迭代:确定针对比当前正在被分析的成员节点的基数小1的成员节点而选择的成员节点;以及相对于比当前正在被分析的成员节点的基数小1的成员节点来重新分发工作负载选择,使得相对于先前确定的选择而保留来自先前确定的每个成员节点的工作负载选择的大约BB+1,以及来自先前确定的工作负载选择的剩余大约1B+1被重新分发至B+1个成员节点,其中B表示来自先前确定的成员节点的基数。在函数590的一些实施例中,如上所述,模运算用于将工作负载分发至成员节点。然而,在一些实施例中,模运算可以由不同的分发运算代替,例如,任何合适的循环分发运算或者在成员节点之间相对均匀地分发工作负载的其他运算。模运算仅仅是用于将工作负荷分发至成员节点的运算的一个示例,并且本公开不限于该具体示例。此外,在函数590的一些实施例中,如上所述,输入参数1H是查询的散列值。在其他示例中,可以备选地使用与工作负载相关联的一些其他数字标识符而不是使用查询的散列值。在上面讨论的函数590的实施例中,函数590主要用于在由于总工作负载而计划移除和添加成员节点的情况下使用,其中在移除成员节点时移除最高编号的成员节点,以及其中在添加成员节点时,在添加新成员节点之前添加与编号最大的成员节点大1的相对应的编号。函数590还可以用于意外地移除成员节点的情况,其中移除的成员节点不一定是编号最高的成员节点,但是在这些情况的示例中,例如,通过函数590的调用的成员节点的外部重新映射可以提高功能590的效率。下面给出Perl代码形式的函数590的一个示例实施例。该实施例是给出的示例,并且本公开的范围决不限于所示的实施例。在此示例中,输入参数1为$domain,输入参数2为$baseline,输入参数3为$current,返回值为子例程GetNodeInstance返回的结果值。作为上面给出的示例低重新分发负载分担算法的进一步说明,考虑以下示例域及其对应的散列值:[example.com,example.net,example.org][100,101,219]]。对于具有三个基线基数的三节点的成员节点池,这些域最初将被发送到成员节点[2,3,1],而不管是否使用了低重新分发的负载均衡过程或者具有标准循环重新分发的标准模过程。如果成员节点3变得离线,则标准模运算将通过在成员节点集上使用模2计算来重新分发流量。如前所述,模运算是mod加1。这将把流量发送到[1,2,2]。结果是所有值都与以前不同,因此运算没有利用如下事实:成员节点2很可能已经高速缓存的example.com并且成员节点1可能已经高速缓存了example.org。由于成员节点3离线,因为成员节点3不再可用,因此中间值example.net的结果不得不改变。使用标准模运算,第一个和最后一个值也会发生变化。另一方面,低重新分发的负载均衡技术会将流量发送到[2,2,1],因此只有中间值会发生变化,而其他两个值保持不变。低重新分发负载均衡技术利用了如下事实:在其各自的高速缓存中,成员节点2可能已经具有example.com,并且成员节点1可能具有example.org。图6A和6B是两个散列值结果表,示出了图5的过程的示例实施例的示例结果。图6A和图6B的两个表格示出了来自10个随机散列值列H的返回值。图6A示出了使用上面讨论的低重新分发的负载均衡技术的返回值,而图6B示出了使用标准模运算的返回值。两者都从3个成员节点开始。低重新分发负载均衡技术使用3作为成员节点的基线基数,因此在图6A所示的示例中$baseline=3。左侧的H列是每个表是完整域名的哈希值,即函数中的输入参数1或$域。每个表上方的第一行显示成员节点的实际基数,即输入参数3或$current。图6A的表中的每个表条目显示了由函数GetNodeInstance返回的结果值,其中输入参数2或$baseline=3,$domain是表条目行左侧的值,并且$current是条目的列的顶部的基数。因此,例如,使用$domain=7925和$current=5和$baseline=3的左上角条目,GetNodeInstance的结果为3,因此对于五个成员节点,查询的哈希值为7925被指派至成员节点3。除了使用标准模运算而不是低重新分发的负载均衡技术之外,图6B是相同的。在每个表的右侧是列,其示出当以五个成员节点开始时在所指派的成员节点中发生的成员节点中的改变量,并且对于每个哈希值一次丢弃一个成员节点直到只有一个成员节点。因此,对于图6A的表格可以看出,对于查询散列值7925,当从五个成员节点开始,并且一次丢弃一个成员节点直到只有一个成员节点时,当使用低重新分发的负载均衡技术时,存在对所指派的成员节点的两次改变。此外,对于查询哈希值6472,当从五个成员节点开始,并且一次丢弃一个成员节点直到只有一个成员节点时,当使用低重新分发的负载均衡技术时,存在对所指派的成员节点的两次更改。图6B是相同的,但是针对标准模函数。图6A和6B中的每一个中所示的表示出了针对所有散列值的总变化量,在列右侧的值列下方,并且总计以粗体显示。图6A总共有10个变化,图6B总共有28个变化。在图6A和6B中的每个在顶部下方具有三行,一个用于“顶部#”,另一个用于“理想”,另一个用于“差异”。除了每个表的最后一列之外,每个表的每一列都是这样,因为对于每个表的最后一列,只有一个成员节点,因此必须将所有查询指派至该成员节点。“顶部#”行显示了为其选择编号最高的成员节点的列的成员节点的基数查询的数量。“理想”行显示“顶部#”的理想数量,其具有完全相等的分发--因为有十个散列值,理想情况下针对每列的[10$current]。“差异”行显示针对每列的“顶部#”和“理想”之间的绝对差异。对于每个表,将所有差异结果相加在一起,在“差异”行的末尾以粗体给出结果,对于图6A和6B的每个表,该结果为2.83。就负载如何均匀分发的均匀性而言,两者可具有相同的效果。在图6A和6B中所示的该示例中,都具有2.83的有效性得分,该得分从理想分发和实际分发之间的绝对差异而得出。但是,随着成员节点数在1-5范围内发生变化,可以看出低重新分发的负载均衡技术仅将10个工作负载重新分发至新成员节点。这比标准模运算重新分发的28个少重新分发得多。结论虽然以上详细描述描述了本技术的某些实施例,并且描述了预期的最佳模式,但无论上文在文本中如何详细描述,该技术都可以以多种方式实践。可以在实现方式上改变细节,同时仍然包含在本文描述的技术中。如上所述,在描述本技术的某些特征或方面时使用的特定术语不应被视为暗示该术语在本文中被重新定义为受限于与该术语相关联的任何特定特征、特性或方面。通常,除非具体实施方式明确地定义了这些术语,以下权利要求中使用的术语不应被解释为将技术限制于本文公开的特定实施例。因此,该技术的实际范围不仅包括所公开的实施例,还包括实践或实施该技术的所有等同方式。

权利要求:1.一种用于负载均衡方法,包括:由负载均衡计算设备接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求;由所述负载均衡计算设备选择分布式计算系统的成员节点来处理所述工作负载请求,使得所述成员节点从所述分布式计算系统的成员节点池中被选择,并且使得所述选择包括:使用基线函数来确定用于针对所述工作负载的基线指派的成员节点,使得为针对所述工作负载的所述基线指派所确定的所述成员节点与在所述池中的成员节点的基数等于成员节点的基线基数时所选择的所述成员节点相对应;以及基于对所述工作负荷的标识符、对成员节点的所述基线基数以及对所述池中的成员节点的所述基数执行的数学运算的结果来选择所述成员节点,使得如果所述池中的成员节点的所述基数小于成员节点的所述基线基数并且所述工作负载的所述基线指派是到所述池中的所述成员节点中的一个,则被指派有到所述工作负载的所述基线指派的所述成员节点被选择,其中所述数学运算是至少部分地基于针对所述工作负载的所述基线指派;以及将所述工作负载请求的所述处理指派到所选择的所述成员节点。2.根据权利要求1所述的方法,其中所述工作负载的标识符是与所述工作负载相关联的域名的散列。3.根据权利要求1所述的方法,其中所述负载均衡设备是所述成员节点池的成员节点。4.根据权利要求1所述的方法,其中所述负载均衡设备是与所述分布式计算系统的所述成员节点分离的设备。5.根据权利要求1所述的方法,其中选择成员节点是基于响应于所述池中所述成员节点的基数小于所述成员节点的基线基数而对所述工作负载的所述标识符、对所述成员节点的所述基线基数和对所述池中的所述成员节点的所述基数执行迭代函数的结果,其中所述函数被迭代多次,次数等于所述成员节点的所述基线基数减去所述池中的所述成员节点的所述基数。6.根据权利要求5所述的方法,其中对于所述迭代函数的第一次迭代,正在被分析的成员节点的所述基数比成员节点的所述基线基数小1;对于所述迭代函数的所述第一次迭代后的每次迭代,正在被分析的成员节点的所述基数比针对先前迭代而被分析的成员节点的所述基数小1;并且其中所述迭代函数包括,针对所述迭代函数的每次迭代:响应于针对比当前正在被分析的成员节点的所述基数大1的成员节点而选择的所述成员节点是所述成员节点之中当前正在被分析的所述成员节点中的一个,选择针对比当前正在被分析的成员节点的所述基数大1的成员节点而选择的所述成员节点;以及响应于针对比当前正在被分析的成员节点的所述基数大1的成员节点而选择的所述成员节点是在当前正在被分析的所述成员节点之外,基于当前正在被分析的所述成员节点之中的所述工作负载选择的重新分发来选所述择成员节点。7.根据权利要求1所述的方法,其中:选择成员节点是基于响应于所述池中成员节点的所述基数大于所述成员节点的所述基线基数而对所述工作负载的所述标识符、成员节点的所述基线基数以及所述池中的所述成员节点的所述基数执行的迭代函数的结果;并且其中所述函数被迭代以下次数:所述次数由所述成员池中成员节点的所述基数减去成员节点的所述基线基数定义。8.一种计算设备,包括:操作存储器,适于存储用于计算设备的运行时数据;以及至少一个存储器和至少一个处理器,分别适于存储和执行处理器可执行代码,所述处理器可执行代码响应于执行使得所述计算设备能够执行动作,所述动作包括:接收针对与工作负载相关联的工作负载请求的处理的负载均衡请求;选择分布式计算系统的成员节点来处理所述工作负载请求,使得所述成员节点从所述分布式计算系统的成员节点池之中被选择,并且使得选择包括:使用基线函数来确定用于针对所述工作负载的基线指派的成员节点,使得为针对所述工作负载的所述基线指派所确定的所述成员节点与在所述池中的成员节点的基数等于成员节点的基线基数时所选择的所述成员节点相对应;以及基于对所述工作负荷的标识符、对成员节点的所述基线基数以及对所述池中的成员节点的所述基数执行的数学运算的结果来选择所述成员节点,使得如果所述池中的成员节点的所述基数小于成员节点的所述基线基数并且所述工作负载的所述基线指派是到所述池中的所述成员节点中的一个,则被指派有到所述工作负载的所述基线指派的所述成员节点被选择,其中所述数学运算是至少部分地基于针对所述工作负载的基线指派;以及将所述工作负载请求的所述处理指派到所选择的所述成员节点。9.根据权利要求8所述的计算设备,其中所述计算设备是所述成员节点池的成员节点。10.根据权利要求8所述的计算设备,其中所述计算设备是与所述成员节点池的所述成员节点分离的设备。11.根据权利要求10所述的计算设备,所述动作还包括:将所述工作负载请求转发到所选择的所述成员节点。12.根据权利要求8所述的计算设备,其中所述工作负载的所述标识符是与所述工作负载相关联的域名的散列。13.根据权利要求1所述的方法,其中所述工作负载是域名服务请求。14.根据权利要求4所述的方法,还包括:将所述工作负载请求转发到所选择的所述成员节点。15.根据权利要求7所述的方法,其中对于所述迭代函数的第一次迭代,正在被分析的成员节点的所述基数比成员节点的所述基线基数大1;对于所述迭代函数的所述第一次迭代后的每次迭代,正在被分析的成员节点的所述基数比针对先前迭代而被分析的成员节点的所述基数大1;并且其中所述迭代函数包括,针对所述迭代函数的每次迭代:确定针对比当前正在被分析的成员节点的所述基数小1的成员节点而选择的所述成员节点;以及相对于比当前正在被分析的成员节点的所述基数小1的成员节点来重新分发所述工作负载选择,使得相对于先前确定的所述选择而保留来自所述先前确定的每个成员节点的所述工作负载选择的大约BB+1,以及来自所述先前确定的所述工作负载选择的剩余大约1B+1被重新分发至B+1个成员节点,其中B表示来自所述先前确定的成员节点的所述基数。

百度查询: 微软技术许可有限责任公司 低重新分发的负载均衡

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。