基于维度的负载平衡的制作方法

文档序号:12287807阅读:216来源:国知局
基于维度的负载平衡的制作方法与工艺

包括服务器农场、web服务等的分布式系统对于提供诸如计算和存储资源等资源已变得日益常见。资源可由作为可伸缩系统的一部分的服务器网络提供,以便对遍及该网络的数据进行更高效的存储、检索和查询。可能期望将工作负载跨各服务器分布,以便优化资源使用、最大化吞吐、最小化响应时间、避免这些服务器之一的过载、和/或实现其它负载平衡目标。然而,由于现代分布式系统的复杂性,有效且高效地管理和实现负载平衡目标可能是充满挑战的。

发明概述

本公开部分涉及对可伸缩存储进行负载平衡,基本上如在至少一个附图中所示和/或结合至少一个附图所描述的,并且如在权利要求书中更完整地阐述的。本公开的实现可提供利用维度的负载平衡,其中每个维度可对应于可伸缩存储的一个或多个资源。

用于负载平衡的一个或多个途径可被实现。在一些实现中,负载平衡逻辑可在不同途径之间进行选择。在其它实现中,所述途径中仅一个途径可被采用。

在一个示例性途径中,用于负载平衡的框架包括多个优化模块。该多个优化模块包括用于针对负载平衡优化可伸缩存储的优化例程。优化例程可被用来选择一个或多个负载平衡操作,其可进一步用于负载平衡的优化模块的优化目标。所述优化模块中的一个或多个可包括与关于维度进行负载平衡相对应的优化目标。作为另一示例,不同优化模块可包括彼此不同的优化目标,其中每个优化目标对应于关于一个或多个维度的负载平衡。

优化模块可包括触发条件,该触发条件可被用于触发相应的优化例程。而且,优化模块可相对于彼此具有优先级。被触发的优化模块的优化例程可将这些优先级纳入考虑。例如,优化例程可遵从更高优先级的优化模块。此外,优化例程可考虑更低优先级的优化模块。从而,可利用优先级来针对被优化例程实现的优化目标建立层次结构。

优化例程可利用评估得分,该评估得分针对相应的优化模块的优化目标来量化可伸缩存储的被建模的状态。因此评估得分可被用来针对优化目标表征负载平衡操作,而无需执行所述负载平衡操作。例如,负载平衡操作可被表征为正在缩减、正在改善、或基本维持可伸缩存储的被建模的状态。从而,评估得分可在优化例程中被用来通过考虑被触发的优化模块以及其它优化模块来过滤负载平衡操作。

在另一示例性途径中,接收用于指派到所述可伸缩存储的服务器的分区。所述分区可具有维度的分区值,其中所述维度中的每个维度对应于所述可伸缩存储的一个或多个资源。可生成用于将所述分区指派给服务器的指派计划。所述指派计划是通过不同的指派试探法确定的,这导致不同的指派计划。基于分析所述指派计划的维度值来选择被生成的指派计划之一以供在可伸缩存储上执行,维度值可包括分区值和/或服务器值。

提供本概述以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于孤立地帮助确定所要求保护的主题的范围。

附图说明

在下面参考发土详细地描述了本公开的实现,在附图中:

图1是适于在本公开的各实现中使用的示例性计算环境的图示;

图2示出其中可采用本公开的实现的示例性系统;

图3描绘其中可采用本公开的实现的示例性负载平衡框架;

图4描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图;

图5描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图;

图6描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。

图7描绘其中可采用本公开的实现的示例性负载平衡系统;

图8描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图;

图9描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图;

图10描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图;以及

图11描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。

发明详细描述

此处用细节来描述本发明的各实施例的主题以满足法定要求。然而,该描述本身并非旨在限制本专利的范围。相反,发明人已设想所要求保护的主题可结合其它当前或未来技术以其它方式来实施,以包括不同的步骤或类似于本文中所描述的步骤的步骤组合。此外,尽管术语“步骤”和/或“框”可在此处用于指示所采用的方法的不同元素,但除非而且仅当明确描述了各个步骤的顺序时,该术语不应被解释为意味着此处公开的各个步骤之中或之间的任何特定顺序。

本公开部分涉及负载平衡可伸缩存储。在一个方面,本公开的实现提供了一种用于负载平衡的框架,该框架包括多个优化模块,该多个优化模块可被用来选择要在可伸缩存储上执行的一个或多个负载平衡操作。每个优化模块可具有关于负载平衡的优化目标,其可由优化例程来执行。优化例程可采用各种类型的优化函数。这些优化函数中的一些优化函数可以是因特定优化模块而异的,而其它优化函数可以是共享的。而且,优化例程可利用与其相应的优化模块不同的优化模块的优化功能,例如,以考虑该不同的优化模块的优化目标。该框架有利地允许高度可扩展的负载平衡逻辑,其中优化目标可被容易且高效地添加、移除或修改。

参考图1,图1是适于在本公开的各实现中使用的示例性计算环境的图示。具体而言,示例性计算机环境被概括地示为并描绘为计算设备100。计算设备100只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应该将计算设备100解释为对所示出的任一组件或其组合有任何依赖性或要求。

本公开的各实现可以在由计算机或诸如个人数据助理或其它手持式设备之类的其它机器执行的计算机代码或机器可使用指令的一般上下文中描述,该机器可使用指令包括诸如程序组件之类的计算机可执行指令。一般而言,包括例程、程序、对象、组件、数据结构等的程序组件指的是执行特定任务或实现特定抽象数据类型的代码。本公开的各实现可以在各种系统配置中实施,这些系统配置包括手持式设备、消费电子产品、通用计算机、专用计算设备等等。本公开的各实现也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。

继续参考图1,计算设备100包括直接或间接耦合以下设备的总线102:存储器104、一个或多个处理器106、一个或多个呈现组件108、输入/输出(I/O)端口110、I/O组件112、和电源114。总线102表示可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。虽然为了清楚起见利用线条示出了图1的各设备,但是实际上,各组件的轮廓并不是那样清楚,并且比喻性地来说,线条更精确地将是灰色的和模糊的。例如,可以将诸如显示设备的呈现组件认为是I/O组件112之一。同样,诸如一个或多个处理器106等处理器具有存储器。本公开在此认识到这是本领域的特性,并重申,图1仅仅说明了可以结合本公开的一个或多个实现来使用的示例性计算环境。诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”等分类之间没有区别,它们全部都被认为是在图1的范围之内并且被称为“计算机”或“计算设备”。

计算设备100通常包括各种计算机可读介质。计算机可读介质可以是可由计算设备100访问的任何可用介质,而且包含易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法和技术实现的易失性和非易失性、可移动和不可移动介质。

计算机存储介质包括RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设备。计算机存储介质不包括被传播的数据信号。

通信介质通常以诸如载波或其他传输机制之类的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设定或改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。

存储器104包括易失性和/或非易失性存储器形式的计算机存储介质。存储器104可以是可移动的、不可移动的、或其组合。示例性存储器包括非瞬态、固态存储器、硬盘驱动器、光盘驱动器等。计算设备100包括从诸如总线102、存储器104或I/O组件112等各种实体读取数据的一个或多个处理器106。一个或多个呈现组件108向人或其他设备呈现数据指示。示例性的一个或多个呈现组件108包括显示设备、扬声器、打印组件、振动组件等等。I/O端口110允许计算设备100在逻辑上耦合至包括I/O组件112的其他设备,其中某些设备可以内置于计算设备100中。说明性I/O组件112包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、打印机、无线设备等等。

现在参考图2,图2示出了在其中本公开的实现可被采用的示例性系统。具体而言,图2示出了根据本公开的实现的可伸缩存储200的高等级架构(在本文中也被称为“分布式系统200”)。应当理解,此处所描述的这一和其他安排仅作为示例来阐明。作为所示的安排和元素的补充或替换,可使用其他安排和元素(例如机器、接口、功能、次序、以及功能聚集等),并且可完全省略某些元素。此外,本文所描述的许多元素是可以实现为分立或分布式组件或结合其他组件的、以及以任何合适的组合和在任何合适的位置的功能实体。此处被描述为由一个或多个实体执行的各种功能可由硬件、固件和/或软件来执行。例如,各种功能可由执行存储在存储器中的指令的处理器来执行。

除了未示出的其它组件之外,分布式系统200还包括主机202(例如,分区主机202)、服务器204、206、208和210(例如,分区服务器204、206、208和210)、以及客户端212(例如,分区客户端212)。每个客户端可驻留在任一类型的计算设备上,其可对应于例如参考图1描述的计算设备100。分布式系统200的组件可以通过网络彼此通信,网络包括但不限于一个或多个局域网(LAN)和/或广域网(WAN)。尽管单个主机、四个服务器、以及单个客户端在图2中被示出,然而任何数量的主机、服务器和客户端可在本公开的实现的范围内的分布式系统200内被采用。

在分布式系统200中,诸如服务器204、206、208和210等服务器可被用来存储和提供对存储系统(例如可伸缩存储系统)的访问。主机202被配置成管理服务器。而且,客户端212被配置成向应用(诸如应用216)提供对存储系统的访问。

可伸缩存储200的被存储数据在多个分区之间被划分。例如,可伸缩存储200可包括在多个分区之间划分的键空间。主机202被配置成将分区指派给服务器204、206、208和210,和/或分布式系统200的未示出的其它服务器。主机202还可被配置成确定这些分区中的一分区何时由于故障而不被任何服务器主存并将该分区重新指派给一不同服务器。主机202被进一步配置控制服务器204、206、208、210、和/或分布式系统200的未示出的其它服务器上的分区的负载平衡。此外,主机202被配置成关于任何分区和/或服务器204、206、208和210、和/或分布式系统200的未示出的其它服务器监视资源利用。

分布式系统200的每个服务器(诸如服务器204、206、208和210)可负责提供到被指派给该服务器的0个到许多个分区的读取和写入访问。而且,每个分区可被指派到这些服务器中的单个服务器。在图2中示出的示例中,服务器204正在主存分区P1和P4,服务器206正在主存分区P2和P7、服务器208正在主存分区P3,而服务器210正在主存分区P5和P6。

客户端212被链接到应用(诸如应用216)中。在一些实现中,客户端212被配置成向被服务器204、206、208和210和/或分布式系统200的其它服务器所主存的分区(例如,分区P1、P2、P3、P4、P5、P6和P7)中的一些分区发出命令。同样在一些实现中,客户端212可例如通过将通信请求定向到前端的虚拟IP和软件负载平衡器或其它装置来间接地与该应用通信。前端可利用分区图,诸如分区图218,来确定哪个服务器正在主存(被映射到)哪些分区并可向那些服务器发送命令。命令的结果可从服务器接收回并可被传递至应用。分区图可存储所述分区和所述分区被指派到的服务器之间的映射,并通常可由主机(诸如主机202)维护。

已经描述了分布式系统200的各方面,要注意,任意数量的组件可被采用来实现本发明的范围内的理想功能。尽管为了清楚起见用线条示出了图2的各组件,但是在实际上,各组件的描绘并不是那样清楚,并且按比喻的说法,线条更精确地将是灰色的或模糊的。此外,虽然图2的某些组件被描述成各单独的组件,但是该描绘在性质上和数量上是示例性的,且不应该解释为对本发明的所有实现的限制。

如同上面指示的,分布式系统200的服务器是被配置的主机分区,由此为分区提供各种资源,所述资源可包括计算和存储资源。分区进而可与一个或多个应用的工作负载相关联。可能期望调整工作负载跨各服务器的分布,以便优化资源使用、最大化吞吐、最小化响应时间、避免这些服务器之一的过载、和/或实现其它负载平衡目标。为了实现这些和其它负载平衡目标,一个或多个主机(诸如主机202)可被配置成在被指派给分布式系统200的服务器的分区上执行各种负载平衡操作中的任何负载平衡操作。在各实现中,潜在工作负载平衡操作与被指派给可伸缩存储的服务器的分区相关联。下面描述一些示例性的负载平衡操作。然而,本公开不限于这些负载平衡操作。

可由主机202执行的一种类型的负载平衡操作包括将所述分区之一移动至分布式系统200的各服务器中的一不同服务器(移动操作)。例如,假定服务器204具有过度的CPU利用率而服务器206具有低CPU利用率。分区P1可被从服务器204移动至服务器206,以便归属于分区P1的CPU利用率可转而由服务器206适应。这可释放服务器204的过度的CPU利用率,由此关于CPU利用率改善负载平衡。

注意,分区的移动不要求在存储级别的数据的物理移动。而是,在各实现中,通过将一分区的分区范围指派重新指派或重新映射到新的服务器(例如,在分区图中),该分区可被移动至另一服务器。特别而言,可伸缩存储的分区可各自对应于被存储的对象的分区索引中的键的范围。示例性对象包括团块(blob)、表和队列。将分区指派给分区服务器可不四处移动分区所存储的任何数据。而是,指派分区可将关于服务器负责该索引的哪(一个或多个)键范围告知服务器。例如,主机202可通过将分区从一个服务器卸载、将该分区指派给另一服务器、并且更新分区图来反映该分区被指派给了新服务器来执行移动。

可由主机202执行的另一种类型的负载平衡操作包括将所述分区之一划分为要被指派给分布式系统200的各服务器中的多个服务器的多个分区(划分操作)。例如,再次假定服务器204具有过度的CPU利用率而服务器206具有低CPU利用率。分区P1可在负载平衡操作中被划分为多个分区。所述多个分区中的一者或两者可被指派给与服务器204不同的服务器,诸如服务器206。以此方式,归属于分区P1的CPU利用率可通过所述服务器中的多个服务器来适应,由此减少服务器204上的总CPU利用率。同样,分区的划分不要求在存储级别的数据的物理移动。而是,在各实现中,可通过更新分区图来将一分区表示为被指派到服务器的多个分区来划分分区。

作为另一示例,可由主机202执行的一种类型的负载平衡操作包括将所述分区中的多个分区合并为要被指派给分布式系统200的各服务器中的一个服务器的一共享分区(合并操作)。例如,假定服务器204和206每个均具有太多分区。分区P1和P2可被合并为指派给服务器204或服务器206的单个分区。以此方式,服务器204和206中的至少一者可主存减少数量的分区。同样,分区的合并不要求在存储级别的数据的物理移动。而是,在各实现中,可通过更新分区图来将各分区表示为被指派到所述服务器之一的单个分区来合并分区。

负载平衡逻辑可被使用以便协调在分布式系统200上执行的负载平衡操作以便实现关于负载平衡的一个或多个优化目标。作为一个示例,主机202可通过确定要在分布式系统200上执行哪些类型的负载平衡操作并且结合确定要在其上执行负载平衡操作的分区和服务器来实现分布式系统200的负载平衡逻辑。通过随时间执行一系列这些负载平衡操作,主机202可根据一个或多个优化目标来调整分布式系统200的负载平衡。

在各个实现中,负载平衡逻辑合并关于负载平衡的多个优化目标。针对负载平衡的该多个优化目标可采取许多不同形式并且可涉及分布式系统200的各个不同方面中的任何方面。

优化目标的一个具体示例包括将任何特定服务器的资源利用率维持在阈值值之下。该资源利用率可被表示为一个或多个维度,所述维度随后更详细地被描述。作为示例,优化目标可以是将分布式系统200中的各服务器中的每个服务器或一定比例的服务器或一个或多个特定服务器的CPU利用率(或不同资源)维持在其能力的90%以下。关于此,主机202可选择一个或多个负载平衡操作以便将高于90%CPU利用率的服务器的CPU利用率减少到能力的90%以下。

优化目标的另一示例包括将资源利用率在分布式系统的各服务器之间扩展以便资源利用率不过度集中在任何服务器上。关于此,主机202可选择一个或多个负载平衡操作以便减少任何服务器的资源利用率,同时增加其它服务器的资源利用率。

优化目标的另一示例包括将属于托管在分布式系统上的多个帐户中的特定帐户的分区在分布式系统的各服务器之间展开以便分区不过度集中在任何服务器上。。关于此,主机202可选择一个或多个负载平衡操作以便减少该特定帐户的任何服务器的分区的集中度,这可增加其它服务器上的集中度。

在用于负载平衡的一些方法中,与多个优化目标中的一些优化目标相对应的负载平衡逻辑的各方面可告知主机202选择关于该多个优化目标中的其它优化目标可削弱分布式系统200的状态的一个或多个负载平衡操作。这可能导致分布式系统200的状态中的振荡,由此优化目标持续竞争而不能达到分布式系统200的稳定状态。

为了解说上面的情况,第一优化目标可告知主机202执行第一负载平衡操作以将分区P1从服务器204移动至服务器206以便改善分布式系统200关于将属于特定帐户的分区在各服务器之间展开的状态,其中分区P1和P4属于该特定帐户而分区P2和P7不属于该特定帐户。然而,负载平衡操作同时可能将服务器206的CPU利用率增加到高于90%由此削弱将任何特定服务器的资源利用率维持在能力的90%以下的第二优化目标。

随后,第二优化目标可告知主机202执行第二负载平衡操作以将分区P1从服务器206移动至服务器204以便改善分布式系统200关于将任何特定服务器的资源利用率维持在能力的90%以下的状态。然而,该负载平衡操作同时可能增加服务器204上属于该特定帐户的分区的集中度,由此削弱第一优化操作。在第一和第二优化目标竞争时,第一和第二负载平衡操作可被持续重复,由此阻止分布式系统200达到稳定状态。

根据本公开的一些实现,分布式系统200的负载平衡逻辑可实现多个优化目标,同时避免或显著减少可能阻止分布式系统200达到稳定状态的振荡。而且,优化目标可被容易地添加到该多个优化目标或从该多个优化目标移除,同时维持分布式系统200的负载平衡逻辑的这些属性。

现在参考图3,图3描绘了其中可采用本公开的实现的示例性负载平衡框架。框架300例如可被图2的主机202采用。框架300包括一个或多个优化模块,其中特别示出了优化模块320a、320b和320c。框架300的各组分中的任何组分可以是因每个优化模块而异的,或者其任一个或多个部分可被共享。而且,框架300的每个优化模块可对应于多个优化目标之一,所述优化目标可利用优化模块的优化例程来执行。为此目的,每个优化模块可包括针对该优化例程以及优化例程的各种优化函数中的任何优化函数的触发条件。

一个或多个优化函数可被优化例程中的每个优化模块使用。优化函数的示例在图3中示出,但是可采用其它优化函数。如所示,优化模块320a包括优化函数322a、326a、330a、332a和334a。优化模块320b和320c被示出为包括与优化模块320a类似的类型的优化函数。然而,优化模块320b和320c中的任一者可包括不同类型的优化函数。而且,在各实现中,任何优化函数可在任何优化模块之间共享。被共享的优化函数的示例在图3中被示出为优化函数336和340,但是在各实现中,所示出的任何其它优化函数均可被共享。稍后更加详细地描述优化函数。还要注意,一些优化函数可被其它优化函数用作例如子函数。例如,优化函数326a(其被指示为表征函数)可被优化函数330a、322a、332a和334a采用以例如表征一个或多个负载平衡操作。

每个优化模块可具有触发条件。响应于触发条件被满足,优化模块的优化例程可被执行。每个优化模块可具有各自的触发条件或一些触发条件可被共享。触发函数可被用来确定该触发条件是否被满足。例如,在所示实现中,优化模块320a具有优化函数322a,其为触发函数。优化函数322a可被用来确定触发条件324a是否被满足,例如通过返回真(true)或假(false)或其它指示符。优化模块320b和320c也具有各自的优化函数322b和322c和各自的触发条件324b和324c,其可不同于优化函数322a和触发条件324a。如此,在所示实现中,每个优化模块可独立地确定其相应的触发条件是否被满足。

从而,所述优化模块的一个或多个优化模块的触发条件可被满足,而所述优化模块的一个或多个其它优化模块的触发条件同时未被满足。因此,在给定时间段期间,优化例程可针对被触发的优化模块被执行,而并不针对其它优化模块被执行。在稍后的时间段期间,任何被触发的优化模块可以不同,以使得随着被用于确定触发条件的各种因素中的任何因素改变而执行不同的优化例程。从而,框架300允许分布式系统(诸如分布式系统200)随着时间适配到各种优化目标。而且,在框架300中,可容易且高效地添加、移除或修改优化模块和相应的优化目标。

任何优化模块的触发条件可通过分析各种因素中的任何因素来确定。本文描述的示例性因素可按任何适当方式并且按任何适当组合被组合。一个示例性因素包括配额。例如,优化模块的优化例程可具有相关联的配额,该配额确定该优化例程可被采用多少次,其可以是在给定时间段上被采用多少次。如果触发条件的其它因素阻止触发条件被满足,则配额可增加。此外,配额可具有封顶以限制优化例程在给定时间段上可被采用的次数。

另一示例性因素包括各种暂时的或基于时间的因素中的任一者。例如,触发条件可以被周期性地在给定时间段流逝之后满足。又一示例性因素可由一个或多个其它优化模块确定。例如,因素可基于该一个或多个优化模块的一个或多个其他优化例程是否已经被执行或其触发条件是否已经被满足,或者以其为条件。一个优化模块的触发条件可以例如在一个或多个其它优化模块的优化例程已经被执行给定次数(并且可能在给定时间段上)之后被满足。附加因素可以是另一因素是否超出阈值值。

用于任何优化模块的触发条件的各示例性因素可以基于采用框架300的分布式系统(诸如分布式系统200)的状态。作为一个示例,任何触发条件可任选地至少部分由分布式系统200的一个或多个被建模的状态(诸如被建模的状态338a和338b)来确定。被建模的状态可包括一个或多个统计数据、度量、和/或与分布式系统的各组分中的任何组分有关的其它变量,诸如在图2中所示的那些。被建模的状态可由例如主机202确定和管理。变量可被输入、预先确定、或测量、或按其它方式从分布式系统得到。

任何变量可与一个或多个服务器、分区、主机、客户端、应用、或分布式系统的其它组分的任何组合有关。这些变量中的至少一个变量可对应于分布式系统整体。有限的示例包括分布式系统中的服务器的总数量、以及分布式系统中的分区的总数量。这些变量中的至少一个变量可按照分布式系统的另一组件的子组件来表达。一些示例包括由特定服务器主存的分区的总数量、特定服务器的特定资源的利用率、以及特定分区对特定资源的利用率。在一些实现中,该一个或多个子组件与分布式系统主存的多个账户中的一账户相关联。作为几个示例,变量可对应于被指派给特定账户或与特定账户相关联的分区或服务器,或者与特定账户相关联的资源利用率。其它示例性变量可包括评估公式、触发公式、以及本文描述的其它公式或函数的各变量中的任何变量。还要注意,这些函数或公式中的任一者可从被建模的状态得到其变量。

因此,要领会,可被合并到一个或多个被建模的状态中的变量可采取许多不同形式并且可合并涉及分布式系统的许多不同因素。通过任选地将那些变量中的至少一个变量合并到触发条件中,触发条件可通过该一个或多个被建模的状态确定。例如,触发条件可通过触发公式来确定,其中该触发公式的一个到全部变量是通过该一个或多个被建模的状态提供的。触发公式从而可提供根据该可伸缩存储的被建模的状态计算的触发得分。

被建模的状态可对应于分布式系统在给定时间的状态的表示。被建模的状态可对应于分布式系统的当前或实际状态。然而,被建模的状态可转而对应于分布式系统的被外插的状态,例如,其对在分布式系统上执行至少一个负载平衡操作建模。分布式系统的被外插的状态可根据分布式系统的实际或当前状态被计算或以另一方式基于分布式系统的实际或当前状态。被外插的状态可根据实际状态直接计算或通过是从另一被外插的状态所计算的来间接计算,该另一被外插的状态本身可能已经被根据实际或当前状态、或根据被外插的状态直接计算。

从而,在一些实现中,用于任何优化模块的触发条件可基于至少一个负载平衡操作来确定,而无需在该分布式系统上执行该至少一个负载平衡操作。这可在本公开的其中期望用于负载平衡的迭代方法的一些实现中被利用。

每个优化模块还可被配置成生成评估得分。评估得分针对其对应的优化模块的优化目标来量化分布式系统的被建模的状态。例如,评估得分328a可针对优化模块320a量化被建模的状态338a或338b。通过量化分布式系统的被建模的状态,评估得分提供了用于将分布式系统的一个被建模的状态与分布式系统的另一被建模的状态进行比较的手段(例如,被建模的状态338a相较于被建模的状态338b)。以此方式,评估得分可被用来关于优化模块的优化目标来确定或表征一个被建模的状态是否是对该被建模的状态的改善、是该被建模的状态的削弱、或实质上等效于该被建模的状态。

评估得分可在一个方向上(例如,正方向上)从一个被建模的状态改变到另一个被建模的状态以指示被建模的状态之间针对优化目标的改善。而且,评估得分可在另一方向上(例如,相反的负方向上)从一个被建模的状态改变到另一个被建模的状态以指示被建模的状态之间针对优化目标的削弱。而且,该评估得分可保持相同或基本相同以指示被建模的状态之间针对优化目标的基本等效。因此,评估得分可被用来确定或表征一个被建模的状态比另一个被建模的状态关于优化目标更好还是更差,以及可能好或差多少。这些确定或表征可利用表征函数来执行,其在下面更详细地被描述。

评估得分可通过评估公式或函数来确定,该评估公式或函数量化优化模块的优化目标。因为优化模块可各自具有不同的评估公式,所以优化模块可对应于不同的优化目标。例如,评估得分328a、328b和328c可量化分布式系统关于不同优化目标的被建模的状态。因此,相同被建模的状态可针对不同优化模块关于不同优化目标来评估。与触发公式和本文描述的其它公式一样,评估公式的一个或全部变量可通过被建模的状态(诸如被建模的状态338a或338b)提供。从而,评估得分可至少部分由被建模的状态来确定。对于优化模块,触发公式可被用作评估公式,或评估公式可不同于触发公式。

可伸缩存储的被建模的状态的表征可被表征函数执行,诸如表征函数326a、326b和326c中的任一者。表征函数可返回与评估得分在一个被建模的状态和另一被建模的状态之间的改变或改变量对应的表征值,如上所述。作为一示例,该一个被建模的状态可对应于在执行至少一个负载平衡操作之前的该分布式系统,而该另一被建模的状态可对应于该分布式系统的对在该分布式系统上执行该至少一个负载平衡操作建模的被外插状态。

以此方式,表征函数可关于优化模块的优化目标来表征该至少一个负载平衡操作。例如,表征函数可基于该评估得分中的改变或改变的缺失来指示该至少一个负载平衡操作是否将改善、削弱、或基本上维持该分布式系统的被建模的状态,所述改变是由对该被建模的状态执行该至少一个负载平衡操作引起的。而且,表征函数可被优化例程的各优化函数中的任何优化函数利用以便关于彼此评估负载平衡操作(例如,通过比较各自的表征值)。

提议候选函数是可在框架300中被采用的优化函数的另一示例。提议候选函数可以是优化模块的优化例程的一部分。如所示,优化模块320a、320b和320c包括各自的优化函数330a、330b和330c,它们可以是各自的提议候选函数。然而,与其它优化函数一样,提议候选函数可被共享并且不需要因特定优化模块而异。

提议候选函数可被配置成标识、选择、和/或提供多个候选操作,其中该多个候选操作是与被指派给该分布式系统的服务器的分区相关联的潜在负载平衡操作。被提议候选函数标识、提供和/或选择的该多个候选操作可被用作初始负载平衡操作集合,该集合可被其它优化函数缩小。至少一个负载平衡操作可被优化例程从该多个候选操作中选择。

提议候选函数可标识、选择和/或提供移动、划分、合并或其它负载平衡操作的任何组合的群组。在一些实现中,该多个候选操作可以全部是相同类型的,诸如全部是移动操作或全部是划分操作,但是不需要如此。每个负载平衡操作可被提议候选函数在标识与该负载平衡操作相关联的一个或多个分区和一个或多个服务器的同时提供。作为一个具体示例,在一些实现中,移动负载平衡操作由两个元素的元组(tuple)标识:<分区,目标服务器>。

提议候选函数的一个示例提供与被指派给分布式系统的服务器的分区相关联的所有潜在负载平衡操作。然而,其它示例可提供所有负载平衡操作的一部分,诸如特定类型的所有潜在负载平衡操作,或一不同子集。提议候选函数可采用一个或多个试探法(heuristic)来选择该多个候选操作。该一个或多个试探法可被设计成增加最佳负载平衡操作被选择以用于改善分布式系统关于优化例程的优化目标的状态的几率。因此,该一个或多个试探法可关于不同的提议候选函数而不同,并且可被针对一个或多个特定优化目标定制。提议候选函数可选择如由触发公式、评估得分和/或其它公式或函数确定或基于触发公式、评估得分和/或其它公式或函数的多个候选操作,其可被合并到试探法中。

保持有利函数是可在框架300中被采用的优化函数的另一示例。保持有利函数也可以是优化模块的优化例程的一部分。如所示,优化模块320a、320b和320c包括各自的优化函数332a、332b和332c,它们可以是各自的保持有利函数。然而,与其它优化函数一样,保持有利函数可被共享并且不需要因特定优化模块而异。

保持有利函数可被配置成基于优化模块的优化目标来过滤候选操作集合,例如以关于优化模块的优化目标保持有利候选操作。输入可以是候选操作的集合(例如列表),例如,如从提议候选函数所提供的,而输出可以是包括如由优化模块的评估得分(例如,包括该函数的优化模块的评估得分)量化的最佳或接近最佳操作的更小集合。注意,候选操作的集合在被提供给保持有利函数之前可能已经被过滤或者另行修改,例如由框架300的另一优化函数。

有利候选操作可对应于改善分布式系统的被建模的状态的负载平衡操作,如由评估得分所量化并由表征函数(例如,从其提供的表征值)所表征的。具有比另一候选操作更大改善的候选操作可被认为是比对分布式系统的被建模的状态具有更少改善的另一候选操作更好或更有利,如由表征值所指示的。在一些实现中,保持有利函数包括滤除该多个候选操作中如由表征值所指示的将削弱或基本上维持分布式系统的被建模的状态的候选操作。

在一些实现中,保持有利函数包括选择与其中输入的将最大地改善可伸缩存储的被建模的状态(如由被触发的或其它优化模块的评估得分所量化的)的多个候选操作的一百分比、指定的数量、或范围相对应的一个或多个操作。例如,保持有利函数可保留将提供例如与该多个候选操作中的最佳候选操作(例如,最有利操作)相比约90%或更大的改善的候选操作。从而,作为一个示例,如果最佳候选操作具有表征值1.0,则具有从0.9到1.0的表征值的所有候选操作可被保持有利函数保留或选择。

保持有利函数例如可被用于例如向优化例程提供灵活性。例如,优化模块的优化例程可以是贪婪的,因为它可确定什么对于其优化目标是最佳的而忽略其它。维持对优化目标有利的候选操作的群组是使得优化例程较不贪婪的一种方法。例如,其它优化模块的其它优化目标可通过具有可被优化例程从中选择的多个有利负载平衡操作而被考虑。这可例如通过提供对应于至少一个其它优化模块的保持最不无利函数来实现。

保持最不无利函数是可在框架300中被采用的优化函数的另一示例。保持最不无利函数也可以是优化模块的优化例程的一部分。如所示,优化模块320a、320b和320c包括各自的优化函数334a、334b和334c,它们可以是各自的保持最不无利函数。然而,与其它优化函数一样,保持最不无利函数可被共享并且不需要因特定优化模块而异。

保持最不无利函数可被配置成过滤候选操作的集合以保持关于优化模块的优化目标的最不无利的候选操作(例如,通过来自与该优化模块不同的优化模块的优化例程)。该输入可以是候选操作的集合(例如列表),例如,如从提议候选函数所提供的,而输出可以是包括如由优化模块的评估得分量化的(一个或多个)最不差或接近最不差操作的更小集合。注意,候选操作的集合在被提供给保持最不无利函数之前可能已经被过滤或者另行修改,例如由框架300的另一优化函数。

无利候选操作可对应于削弱善分布式系统的被建模的状态的负载平衡操作,如由评估得分所量化并由表征函数(例如,表征函数的表征值)所表征的。具有更大削弱的候选操作可被认为是比对分布式系统的状态具有更少削弱的另一候选操作更差或更不利,如由表征值所指示的。在一些实现中,保持最不无利函数确定并保留该多个候选操作中如由表征值所指示的将改善分布式系统的状态的候选操作。

在一些实现中,保持最不无利函数保留至少一个无利操作,诸如这些无利操作中的一个或多个最不无利操作。关于此,最不无利操作可被认为是来自该候选操作的输入集合的对优化目标的各个最差操作中的最佳操作。保持最不无利函数可以没有有利操作被包括在候选操作的输入集合中为条件来保留至少一个无利操作,或者该至少一个无利操作可无论如何被保留。在各实现中,保持最不无利函数可以总是作为来自候选操作的输入集合的最后一个候选操作被输出。保持最不无利函数的一个示例包括选择与将最少地削弱可伸缩存储的被建模的状态(如由被优化模块的评估得分所量化的)的候选操作的输入集合的一百分比、指定的数量、或范围相对应的一个或多个操作。

如上所述,维持对其被触发的优化模块的优化目标有利的候选操作的群组的优化例程是使得被触发的优化模块的优化例程较不贪婪的一种途径。例如,候选操作的群组可在选择候选例程的至少一个操作之前根据其它优化模块的其它优化目标而被过滤。被触发的优化模块的优化例程可利用与一个或多个其它优化模块相对应的保持最不无利函数或其它函数来过滤候选操作的群组。如此,通过利用其它优化模块的保持最不无利函数,可根据那些优化模块的其它优化目标来过滤候选操作的群组。在保持最不无利函数保留至少一个候选操作的情况下,优化例程仍旧可使得至少一个候选操作被选择。而且,通过在执行其它优化模块的保持最不无利操作之前执行其优化模块的保持有利函数,该至少一个候选操作可总是对该优化例程的优化目标有利。

保持最低惩罚函数是可在框架300中被采用的优化函数的另一示例。保持最低惩罚函数也可以是优化模块的优化例程的一部分。如所示,框架300包括优化函数336,该优化函数可以是保持最低惩罚函数。与其它优化函数一样,保持最低惩罚函数可被共享或者可因特定优化模块而异。

保持最低惩罚函数或其它惩罚函数可被配置成基于与在可伸缩存储上执行一个或多个候选操作相关联的一个或多个惩罚来滤除该一个或多个候选操作。惩罚可对应于与执行分布式系统的负载平衡操作相关联的成本。例如,惩罚可对应于与在分布式系统上执行负载平衡操作相关联的时间、资源利用率和/或其它因素。

在一些实现中,惩罚基于一个或多个相关联的分区的实况通信量。更高的实况通信量可对应于比更低的实况通信量更高的惩罚和/或成本。可为实况通信量定义托架(bracket),以使得多个分区落入每个托架中。每个托架可对应于用于对那些分区执行负载平衡操作的不同惩罚,以使得相同托架内的分区具有相同的相关联的惩罚。作为一个示例,实况通信量可被认为是请求速率,其中在0和10之间的请求速率描绘一个托架,在10和100之间的请求速率描绘另一托架,在100和1000之间的请求速率描绘另一托架,如此等等。可以看出,托架边界针对更高的请求速率范围而增加。

惩罚可例如由主机202作为惩罚得分来计算,或者可被预先确定或以其它方式评估。在一些实现中,惩罚从其它负载平衡操作被得出,例如,类似的负载平衡操作,其先前已经在分布式系统中被执行。作为一个示例,主机202可测量用于执行负载平衡操作的惩罚以及基于被测量的惩罚来确定惩罚,诸如通过其平均值。用于确定和/或评估惩罚的各种过程可以是可配置的。例如,当帐户、整体系统、或分布式系统的其它部分处于风险中或正经历高等待时间时,可能期望盖写或更改惩罚的考量。

在一些实现中,用于一负载平衡操作的惩罚可基于与该负载平衡操作相关联的一个或多个分区来确定。例如,分区可被分类到趋向于在对其执行负载平衡操作时引起类似成本产生的类别中。惩罚可基于这些类别或通过将这些类别纳入计算来确定。分区的类别可以基于例如分布式系统中的分区的相关联应用或其它进程(例如,该分区被指派给哪些应用或其它操作)。与系统进程相关联的分区可具有比与帐户(例如用户帐户)或一般存储相关联的那些进程更高的相关联的惩罚。

在一些实现中,用于候选操作的惩罚基于与候选操作相关联的任何分区是否具有持续的垃圾收集(GC)或可能被候选操作负面影响的其它长期运行的后台活动。

而且,在一些实现中,候选操作的惩罚基于与该候选操作相关联的任何分区是否与分布式系统的基础结构即服务(IAAS)进程相关联或被指派给IAAS进程。IAAS进程可允许用户将包括存储、硬件、服务器和联网组件等装置外包给分布式系统。IAAS进程可管理这些用户的帐户以及任何相关联的虚拟机、虚拟联网、和存储。

在一些实现中,候选操作的惩罚基于与该候选操作相关联的任何分区是否与分布式系统的系统表相关联或被指派给该系统表。系统表可包括与实现数据存储和管理系统有关的存储,其可以是分布式系统的子组件。作为一个示例,系统表可包括信息模式视图、分区图信息、和其它关键系统元数据。

当在负载平衡操作中被涉及时,与GC、系统表和IAAS进程相关联的分区通常具有比其它分区更高的相关联的惩罚。从最低到最高的相关联的惩罚可以是与GC相关联的分区、然后是与IAAS相关联的分区,以及与系统表相关联的分区。这可被反映在负载平衡操作的相应惩罚中,并且可被考虑在保持最低惩罚函数或考虑惩罚的另一函数中。

保持最低惩罚函数可被配置成过滤候选操作集合以便保持对分布式系统具有最低惩罚的候选操作。该输入可以是候选操作的集合(例如列表),例如,如从提议候选函数所提供的,而输出可以是包括在相关联的惩罚方面(一个或多个)最不差或接近最不差操作的更小集合。注意,候选操作的集合在被保持最低惩罚函数接收到之前可能已经被过滤或者另行修改,例如由框架300的另一优化函数。而且,保持最低惩罚函数可任选地是提议候选函数或其它优化函数的子函数。

保持最低惩罚函数的一个示例包括选择与具有最低相关联惩罚的候选操作的输入集合的一百分比、指定数量、或范围相对应的一个或多个操作。选择具有最低惩罚的候选操作的群组是允许优化模块的优化例程将惩罚考虑在选择优化例程的至少一个负载平衡操作中的一种途径。

更新被建模的状态函数是可在框架300中被采用的优化函数的另一示例。更新被建模的状态函数也可以是优化模块的优化例程的一部分。如所示,框架300包括优化函数340,该优化函数可以是更新被建模的状态函数。与其它优化函数一样,更新被建模的状态函数可被共享或者可因特定优化模块而异。

更新被建模的状态函数可被配置成更新分布式系统的被建模的状态,诸如被建模的状态338a和338b。更新被建模的状态函数可被配置成接收被建模的状态作为输入并输出经更新的被建模的状态。更新被建模的状态可包括更新该一个或多个统计数据、度量,和/或被建模的状态的其它变量来反映执行至少一个负载平衡操作。经更新的被建模的状态中的一个到全部变量可从该被建模的状态中的一个到全部变量计算。

经更新的被建模的状态可对应于分布式系统的当前或实际状态。然而,被建模的状态可转而对应于分布式系统的被外插的状态,例如,其对在分布式系统上执行该至少一个负载平衡操作建模。经外插状态可任选地被用作稍后输入到更新模型函数的被建模的状态。以此方式,框架300允许模拟至少一个负载平衡操作的执行,其可任选地当附加负载平衡操作被选择和/或被考虑以供一个或多个优化例程执行时被迭代地执行。

现在参考图4,图4描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图4描绘了根据本公开的实现的方法400的流程图。仅出于说明性用途,方法400在下面参考图2和图3来描述。然而,方法400不限于本文描述的分布式系统200和框架300的特定特征。而且,图4中所示的不应当必然被认为全面解释了方法400,因为某些规程可能被省略或附加规程可被采用。而且,图4所指示的那些规程中的某些排序不应当被认为是限制性的并且在本公开的某些实现中可被改变。

方法400包括确定多个优化模块中的被触发的优化模块的触发条件被满足(图4中的450)。例如,触发函数322b可确定优化模块320a、320b和320c中的优化模块320b的触发条件322b被满足。响应于确定触发条件332b被满足,触发函数332b可提供指示符,诸如真值。确定优化模块330b的触发条件332b被满足可基于被建模的状态338a。例如,被建模的状态338a中的各变量中的任何变量可被插入到触发条件332b的触发公式的相应变量中。通过将触发公式的结果(例如触发得分)与阈值值进行比较,可确定触发条件已被满足。例如,基于触发得分超出阈值值,触发条件可被满足。

方法400还可包括基于优化例程来优化可伸缩存储(在图4中未具体示出)。例如,可基于优化模块320b的优化例程来优化分布式系统200。被触发的优化模块的优化例程可响应于确定该多个优化模块的被触发的优化模块的触发条件被满足而被执行。而且,优化例程可包括下面进一步描述的方法400的452、454、456和458。

方法400进一步包括提供多个候选操作,其中该多个候选操作是与被指派给可伸缩存储的服务器的分区相关联的潜在负载平衡操作(图4中的452)。例如,优化模块320b的提议候选函数330b可提供多个候选操作,其中该多个候选操作是与被指派给分布式系统200的服务器(例如,服务器204、206、208和210)的分区(例如,分区P1、P2、P3、P4、P5和P6)相关联的潜在负载平衡操作。

方法400还包括基于更高优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作(图4中的454)。例如,主机202可利用优化模块320a(该优化模块具有比优化模块320b更高的优先级)的表征函数326a和/或另一更高优先级的优化模块(未示出)的另一表征函数来基于被建模的状态338a过滤该多个候选操作。

基于更高优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作可包括例如该多个优化模块的具有比被触发的优化模块更高的优先级的所选优化模块把将削弱可伸缩存储的被建模的状态(如由该所选优化模块的评估得分所量化的)的候选操作从该多个候选操作中移除。例如,优化模块320a的表征函数326a可提供表征值,该表征值指示来自该多个候选操作的一候选操作将削弱分布式系统200的被建模的状态338a,如由优化模块320a的评估得分328a所量化的。该候选操作随后可被从该多个候选操作移除。

基于更高优先级的优化模块和该可伸缩存储的被建模的状态来过滤该多个候选操作允许可能削弱更高优先级的优化模块的优化目标的候选操作被从该多个候选操作移除。这可被用来对优化模块的优化目标施加层次结构。以此方式,分布式系统200的状态中的振荡可通过减少各优化目标之间的竞争来被减少或消除。

在一些实现中,对于该多个优化模块中的具有比被触发的优化模块更高的优先级的所选优化模块,将削弱可伸缩存储的被建模的状态(如由所选优化模块的评估得分所量化的)的每个候选操作被从该多个候选操作移除。这可被执行,以使得该多个候选操作不再包含可削弱更高优先级的优化模块的优化目标(如由评估得分所量化的)的任何负载平衡操作。

此外,方法400的454可针对框架300中具有比被触发的优化模块更高的优先级的每个优化模块执行。方法400可包括,对于该多个优化模块中的具有比被触发的优化模块更高的优先级的每个优化模块,从该多个候选操作移除将削弱可伸缩存储的被建模的状态(如由该优化模块的评估得分所量化的)的所有候选操作。这样做可在负载平衡逻辑上施加层次结构,以使得优化模块的各优化目标收敛且分布式系统200可达到稳定状态。

注意,如果没有候选操作保留在该多个候选操作中,则被触发的优化模块的优化例程可在不选择候选操作的情况下终止。

此外,方法400还包括基于被触发的优化模块和被建模的状态来确定该多个操作中的至少一个操作(图4中的456)。例如,该多个操作中的至少一个操作(例如,单个操作)可基于优化模块320b和被建模的状态338a被确定。这可包括确定该多个操作中将改善可伸缩存储的被建模的状态(如由被触发的优化模块的评估得分所量化的)的至少一个操作。例如,可确定该多个候选操作中的将改善分布式系统200的被建模的状态338a(如由优化模块320b的评估得分328b所量化的)的至少一个操作。

在一些实现中,确定该多个候选操作中的将改善可伸缩存储的被建模的状态(如由被触发的优化模块的评估得分所量化的)的至少一个操作基于来自被触发的优化模块的表征函数的一个或多个表征值。例如,表征值可由优化函数326b(即,表征函数)针对该多个操作中的任何或全部操作生成,且最佳候选操作(例如,具有最佳表征值)中的一个或多个可被从该多个操作中选择作为该至少一个操作。

而且,在一些实现中,确定该多个候选操作中的将改善可伸缩存储的被建模的状态(如由被触发的优化模块的评估得分所量化的)的至少一个操作包括基于被触发的优化模块来过滤该多个候选操作。例如,该多个候选操作可被优化函数332b(即,保持有利函数)或另一函数过滤来关于评估得分328b将一个到全部不利候选操作从该多个候选操作移除。优化函数332b可过滤该多个候选操作以使得仅有利操作保留。该至少一个操作从而可被该优化例程从中选择或者作为被过滤的多个候选操作选择。

从而,如果该多个候选操作中的仅一个候选操作在基于被触发的优化模块的过滤之后保留,该候选操作可被该优化例程选择作为该至少一个候选操作。如果该多个候选操作中的多个候选操作在过滤之后保留,则那些候选操作可被该优化例程选择作为该至少一个候选操作。替换地,那些候选操作可在选择该至少一个候选操作中被进一步过滤。

在一些实现中,在选择该多个候选操作中的该至少一个操作之前,基于与在该可伸缩存储上执行该多个候选操作的该至少一个操作相关联的惩罚,该多个候选操作中的至少一个候选操作被从该多个候选操作滤除。例如,优化函数336(即,保持最低惩罚)或另一惩罚函数可被采用。

而且在一些实现中,在选择该多个候选操作的该至少一个操作之前,该多个候选操作被基于至少一个更低优先级的优化模块和该可伸缩存储的被建模的状态过滤。例如,主机202可利用优化模块320c(该优化模块具有比优化模块320b更低的优先级)的表征函数326c和/或另一更低优先级优化模块(未示出)的另一表征函数来关于该更低优先级的优化模块基于被建模的状态338a过滤该多个候选操作。

基于更低优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作可包括例如该多个优化模块的具有比被触发的优化模块更低的优先级的所选优化模块把将削弱可伸缩存储的被建模的状态(如由该所选优化模块的评估得分所量化的)的候选操作从该多个候选操作中移除。例如,优化模块320c的表征函数326c可提供表征值,该表征值表征来自该多个候选操作的一候选操作将削弱分布式系统200的被建模的状态338a,如由优化模块320c的评估得分328c所量化的。该候选操作随后可被从该多个候选操作移除。

作为另一示例,基于更低优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作可利用优化函数334c(即,保持最不无利函数)或另一函数。基于更低优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作允许被触发的优化模块的优化例程考虑一个或多个更低优先级的优化模块,由此导致该优化例程的该至少一个候选操作的较不贪婪部分。

在各实现中,基于至少一个更低优先级的优化模块和可伸缩存储的被建模的状态来过滤该多个候选操作是在确保并非所有候选操作均被从该多个候选操作滤除的同时执行的。具体而言,可以确保该多个候选操作中的将改善可伸缩存储的状态(如由被触发的优化模块的评估得分所量化的)的至少一个候选操作仍旧存在。这可确保被触发的优化模块的优化例程总是具有该至少一个操作以供选择以在分布式系统上执行。

方法400还包括更新可伸缩存储的被建模的状态以对在可伸缩存储上执行该至少一个操作建模(图4中的458)。例如,被建模的状态338a可被更新以对执行分布式系统200的该至少一个操作建模。这可包括利用优化函数340(即,更新被建模的状态函数)。

经更新的被建模的状态可被用来选择要在可伸缩存储上执行的一个或多个附加操作。例如,被触发的优化模块的优化例程可任选地响应于触发条件仍旧被满足(如由可伸缩存储的经更新的被建模的状态所确定的)而被重复。在一些实现中,优化例程被重复,直到触发条件不再被满足为止,这任选地可以在优化例程已经被执行预定次数之后。

而且,一个或多个其它被触发的优化模块的一个或多个其它优化例程可任选地响应于该一个或多个其它被触发的优化模块的触发条件而被执行。该一个或多个其它优化例程可以与关于优化模块320b描述的优化例程类似或不同,其中相应的优化模块被用作被触发的优化模块。那一个或多个其它优化例程可利用经更新的被建模的状态并且每个优化例程可与优化模块320b的优化例程类似地更新该被建模的状态。

方法400还包括在该可伸缩存储上执行该至少一个操作(图4中的460)。例如,该至少一个操作(其在优化模块320b的优化例程中被确定并选择)可在分布式系统200上被执行。在各实现中,该至少一个操作可在被确定之后的任何时间被执行。作为一个示例,该至少一个操作可在重复被触发的优化模块的优化例程之前被执行。该执行该至少一个操作和/或被提议操作集合可以响应于被触发的优化模块的触发条件不再被满足。

在一些实现中,优化例程包括向被提议操作集合添加该至少一个操作。该被提议操作集合稍后可在可伸缩存储上被执行。该被提议操作集合可随着该多个优化模块中的任何优化模块的一个或多个附加优化例程确定并选择至少一个操作而迭代地增长,该至少一个操作可被添加到该被提议操作集合。

因此,要注意,(一个或多个)其它优化例程可在执行由被触发的优化模块(即,当前示例中的优化模块320b)选择的该至少一个操作之前被执行。而且,被执行的该被提议操作集合可包括被该(一个或多个)其它优化例程选择的至少一个操作。从而,在该可伸缩存储上执行该至少一个操作可包括在该可伸缩存储上执行该被提议操作集合,该集合包括由优化模块320b确定并选择的该至少一个操作。

在各实现中,该多个优化模块的每个被触发的优化模块的优化例程是响应于该被触发的优化模块的相应处罚条件被满足的。而且,执行该至少一个操作和/或被提议操作集合可以响应于相应触发条件中的每一个或一些不再被满足。

根据上文将能领会,方法400可被用于框架300中的各优化模块中的任何优化模块。还要领会,方法400可形成更复杂的方法的基础,该更复杂的方法可包括方法400的一个或多个实例作为其子组件。一个具体示例在图5中示出,图5描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。

图5示出方法500,其开始于接收按照优先级排序的优化模块的列表(图5中的562)。该列表的范围从模块[0]到模块[模块数量],其中每个整数值对应于相应的优化模块。该列表的模块[0]是最高优先级模块,其中相应优化模块的优先级随着其相应的整数值增加而降低。从而,模块[模块数量]对应于具有最低优先级的优化模块。要领会,该列表可转而从最低优先级到最高优先级排序,其中方法500被相应调整。

方法500在564处开始于最高优先级优化模块(即模块[0]),并在按照优先级次序迭代遍历该列表之后结束。与模块[i]相对应的优化模块当其触发条件被满足时可被称为被触发的优化模块。如果与模块[i]相对应的优化模块的触发函数在566未被满足,则564评估该列表中是否存在更低优先级的优化模块。如果被触发的优化模块的触发函数在566处被满足,则被触发的优化模块的提议候选函数被执行以选择多个候选操作。

而且,在570处针对比被触发的优化模块的所有更高优先级的优化模块的多个候选操作执行保持有利函数。例如,可以看出,由于优化模块的列表按照优先级被排序,所以模块[j]将总是具有比模块[i](即,被触发的优化模块)更高的优先级。从而,当在方法500中使得j等于i时,将削弱可伸缩存储的状态(如由每个更高优先级的优化模块的相应评估得分所量化的)的任一个或多个候选操作可被从该多个候选操作中移除。如果没有候选操作留在该多个候选操作中,则i可被递增且方法500可返回至564。

在572,被触发的优化模块的保持有利函数被执行。从而,将削弱可伸缩存储的状态(如由被触发的优化模块的评估得分所量化的)的任一个或多个候选操作可被从该多个候选操作移除。如果没有候选操作留在该多个候选操作中,则i可被递增且方法500可返回至564。

在574,保持最低惩罚函数被执行。从而,该多个候选操作中具有最高移动惩罚的至少一个候选操作可被从该多个候选操作移除。

在574,保持最低惩罚函数被执行。从而,该多个候选操作中具有最高惩罚的至少一个候选操作可被从该多个候选操作移除。

在576处针对比被触发的优化模块的所有更低优先级的优化模块的多个候选操作执行保持最不无利函数。例如,可以看出,由于优化模块的列表按照优先级被排序,所以模块[k]将总是具有比模块[i](即,被触发的优化模块)更低的优先级。从而,每个更低优先级的优化模块可将所有候选操作从该多个候选操作移除,同时保留针对该更低优先级优化模块的该最不无利操作。每个保持最不无利函数可被配置成保留至少一个候选操作,使得当在方法500中使得k等于i时,该多个候选操作将仍旧包括至少一个操作。而且,由于572处的保持有利函数,所以该至少一个操作将对该被触发的优化模块有利。

在578,该多个候选操作中的最佳操作被选择并被添加到被提议操作的集合。在580,该被触发的优化模块的优化例程所利用的被建模的状态被更新被建模的状态函数更新。因此,被触发的优化模块的触发条件在566可基于经更新的被建模的状态被评估,且方法500的各部分可重复以选择另一最佳操作并将该最佳操作添加到提议操作的集合。当被触发的优化模块的触发条件不再被满足时,一不同的优化模块可变成被触发的优化模块,其可导致该不同优化模块的至少一个最佳操作被添加到该提议操作集合。这可针对每个优化模块重复,如所示。在582,被提议操作的集合如果存在则在可伸缩存储上被执行。

描述了各方法以后,根据本公开的实现,附加示例性优化模块被在下面描述,其可在本公开的方法中实现。注意,下面描述的特征和函数不必是因特定类型的优化模块或特定优化目标而异的。

维度负载平衡

可伸缩存储的负载平衡逻辑的一种途径仅考虑实况通信量,其根据请求率和等待时间来表达。然而,仅考虑实况通信量可能不足以实现有效的负载平衡。例如,可伸缩存储的不同的(经常是正交的)资源已变得越来越受到约束,仅考虑实况通信量的负载平衡逻辑不足以解决这些约束。这可部分由于增加的数量的不同请求类型,以及在可伸缩存储的分区上执行的增加的数量的小的或大的后台作业。后台作业的示例是数据的复制,其中分区存储的数据可被复制至另一位置。例如,地理复制可在地理上分布的可伸缩存储中被采用。其它示例包括用于保护数据免遭存储故障的擦除编码,以及数据验证。作为结果,分区的资源需求可能经常与实况通信量不成比例。

根据本公开的实现,负载平衡逻辑可利用一个或多个维度来考虑可伸缩存储的多个资源。每个维度可对应于可伸缩存储的一个或多个资源。该一个或多个资源中的每个资源可以是可伸缩存储的可测量或可定义的数量。可被负载平衡逻辑考虑的资源的示例包括CPU处理、实况通信量、网络带宽、分区计数、分区大小、还有许多。

负载平衡逻辑采用的任何到全部维度可按照量化该维度的该一个或多个资源的一个或多个度量来定义。定义特定维度的该一个或多个度量可被从多个度量中选择,该多个度量在负载平衡逻辑中被提供。通过针对一维度从该多个度量中选择该一个或多个度量,该维度可被容易且高效地添加到该负载平衡逻辑、从该负载平衡逻辑移除、或针对该负载平衡逻辑修改。而且,可比较不同维度之间的相应度量。

每个度量可关于一个或多个服务器和/或可伸缩存储的分区的任何组合来量化一维度的一个或多个资源的利用率。一个这样的度量的示例是分区度量。分区度量可关于一个或多个分区(例如,单个分区)来量化该维度的该一个或多个资源的利用率。例如,在该一个或多个资源包括CPU资源的情况下,该分区度量可量化与单个分区相关联的CPU资源的利用率。维度可包括多个分区的每个分区的分区度量。

在一些实现中,分区度量基本独立于该一个或多个分区被指派到的一个或多个服务器。从而,例如,分区度量可能没有由于将分区指派到一不同服务器的负载平衡操作而在值方面显著改变。CPU利用是分区度量的一个示例,其基本独立于该一个或多个分区被指派到的一个或多个服务器。计数器示例可被扼制,其中分区可在旧服务器上被扼制但不在新服务器上被扼制,其中扼制是基于服务器负载的,其是因服务器而异的。

度量的另一示例是进程度量。该进程度量可关于被指派给服务器的分区(例如,被指派给该服务器的每个分区)量化该维度的该一个或多个资源的利用率。在一些实现中,进程度量包括被指派给该服务器的每个分区的分区度量的总和。度量的另一示例是服务器度量。服务器度量可关于该服务器量化该维度的该一个或多个资源的整体利用率。在一些实现中,服务器度量对应于进程度量加上与该服务器上的开销相关联的该维度的该一个或多个资源的附加利用率。维度可包括多个服务器的每个服务器的进程度量和/或服务器度量。

负载平衡逻辑所采用的任何到全部维度可包括相关联的封顶值或阈值值。在维度的度量超过封顶值的情况下,该维度的该一个或多个资源可被认为被负载平衡逻辑过度利用。封顶值的一示例是服务器封顶值,其对应于服务器度量、进程度量、或其它服务器相关度量的阈值值。而且,负载平衡逻辑所采用的任何到全部维度可包括相关联的改善阈值。可将改善阈值与对将由至少一个负载平衡操作引起的可伸缩存储的被建模的状态的改善量(如由评估得分所量化的)进行比较。如果改善量没有超出改善阈值,则该至少一个负载平衡操作可不被选择以供在可伸缩存储上执行。

该负载平衡逻辑所采用的任何到全部维度也可包括关于该负载平衡逻辑可能采用的其它维度的相关联的排名或权重值。

已经描述了维度的一些示例性组分。描述了示例性CPU维度。CPU维度可由量化单个分区的CPU利用率的分区度量、量化指派给服务器的全部分区的累积CPU利用率的进程度量、以及量化服务器上的总CPU利用率的服务器度量中的任何或全部来定义。CPU维度可进一步包括服务器封顶,例如CPU利用率的90%、权重值(例如1)、以及改善阈值(例如10%)。

示例性分区计数维度可由量化单个分区的分区利用率的分区度量(其通常被设置为1)、以及量化被指派给一服务器的全部分区的分区利用率的进程或服务器度量(即,指派给该服务器的分区的数量)的任何或全部来定义。分区计数维度可进一步包括服务器封顶,例如50个分区、权重值(例如2)、以及改善阈值(例如1个分区)。

通常,CPU维度具有比其它维度(诸如分区计数维度)更高的权重值或排名。然而,注意,维度的各组分的任何组分可被重新配置和/或重新定义,同时仍旧与负载平衡逻辑兼容。例如,权重值或排名可以是可动态配置的。

而且,在各实现中,被负载平衡逻辑采用的维度的度量中的至少一些可被标准化(normalize),以使得不同维度的不同度量可被容易地比较。换言之,不同维度之间的度量可利用理论上共用的尺度来比较。作为一个示例,度量可被标准化为该度量的所定义的能力的百分比。作为一个示例,该度量的能力可以是前面提及的封顶值或阈值值。如果度量(诸如分区度量)对应于10%的CPU利用率,其可基于100%CPU利用率的能力被标准化为0.1。通过类似地将不同维度的度量缩放为度量能力的百分比,那些度量可被容易地比较。在此示例中,被缩放的度量可具有范围从0到1的值。

基于封顶值的维度优化

在一些实现中,优化模块(其可在框架300中被采用(例如,作为优化模块320b))具有确保可伸缩存储的一个或多个维度的一个或多个度量不超出相应的封顶值的优化目标。优化模块的优化例程可利用本文描述的各种优化函数的任一者。

在一些实现中,基于将维度的各度量中的一个或多个与阈值值(诸如该一个或多个度量的相应封顶值(例如,服务器度量的服务器封顶))相比较,确定触发条件被满足。例如,如果任何度量(例如,任何服务器度量)超出相应封顶值的特定百分比(例如,50%),则可确定该阈值条件被满足。在一些实现中,如果各服务器的服务器度量中没有服务器度量超出任何维度的相应封顶值,则不可确定该阈值条件被满足,但是如果任何服务器度量超出任何维度的相应封顶值,则可确定该阈值条件被满足。

利用一个或多个维度的优化模块的评估得分可以基于维度的度量(x)、相应封顶值(T)、维度的排名或权重值(w)、以及指示该维度的度量超出相应封顶值多少的值中的一个或多个。作为具体示例,给定服务器的评估公式可包括S=∑ipi*wi。其中,其中每个维度i具有服务器度量x。常量a控制评估公式的斜率(X轴上的缩放因子)。作为示例,常量a的值的范围为从约2到约10。

此示例性评估公式关于服务器度量具有指数增长。因此要领会,在一些实现中,评估得分随着评估公式中的一个或多个度量指数地增加。

该示例性评估公式可以是针对给定服务器的,然而,可通过针对多个服务器中的每个服务器利用示例性评估公式并添加结果来在评估得分中考虑该多个服务器。从而,根据期望,评估得分可对应于可伸缩存储的一个服务器、多个服务器、或全部服务器。

利用一个或多个维度的优化模块的提议候选函数可包括基于一个或多个维度的一个或多个度量来选择多个候选操作。在一些实现中,该多个候选操作是基于该多个候选操作被指派到的服务器的服务器度量来选择的。

在一些实现中,选择该多个候选操作包括标识具有一维度或超出阈值值(诸如服务器封顶)的特定维度的一服务器度量的一个或多个服务器。

被指派给那些服务器的分区中的至少一些分区可被添加给候选分区集合。然而,一个或多个分区可被基于与该一个或多个分区相关联的通信量被从该候选分区集合排除,例如,高通信量分区可被排除。

而且,该一个或多个服务器可基于服务器负载被标识,以使得该多个候选操作基于该一个或多个服务器的服务器负载被选择。例如,提议候选函数可将可伸缩存储的每个服务器从最繁忙到最空闲排序(如由诸如服务器负载度量等负载度量所量化的)。那些服务器中的最繁忙服务器中的一个或多个可被选择为可从中选择分区以用于候选分区集合的该一个或多个服务器。

服务器负载度量可基于一个或多个维度(i)的任何服务器度量(d)、以及该一个或多个维度的排名或权重值(w)中的至少一者。在一个实现中,服务器负载度量包括负载=∑idi*wi

提议候选函数可确定具有单个最高服务器度量的该一个或多个服务器的维度。而且,提议候选函数可从该维度的最高到最低服务器度量对该可伸缩存储的服务器排序。候选目标服务器集合可被选择为那些服务器中具有该维度的最低服务器度量的一定数量的服务器。从而,基于一维度的服务器度量,例如基于具有低服务器度量,服务器可被添加至该候选目标服务器集合。

被提议候选函数选择的该多个候选操作随后可例如是将减小已超出一个或多个服务器的服务器封顶的一维度的服务器度量的候选操作。例如,该多个候选操作的移动负载平衡操作可包括该候选分区集合和该候选目标服务器集合的笛卡尔乘积。从而,负载平衡操作可包括:针对这些集合中的每个分区和服务器组合,来自该候选分区集合的给定分区被移动至该候选目标服务器集合的给定服务器。

从而,优化模块的优化例程可利用来自该提议候选函数的该多个候选操作来选择至少一个操作以在该可伸缩存储上执行。该多个候选操作可利用各优化函数中的任何优化函数被该优化例程过滤,诸如保持有利函数和保持最不无利函数。

维度扩展优化

在一些实现中,可在框架300中被采用的优化模块(例如,优化模块320b)具有在可伸缩存储的各服务器之间扩展多个维度中的各维度的度量的优化目标。出于各种原因,此优化目标可能是期望的,诸如以减小可伸缩存储的服务器变得过载的风险。实现维度扩展优化的优化模块的优化例程可利用本文描述的各种优化函数的任一者。

在想着这种优化目标的情况下,在可伸缩存储的一个或多个维度的一个或多个度量关于可伸缩存储的服务器具有不平衡的情况下,被触发的优化模块的触发条件可被确定为被满足。因此,框架300的多个优化模块中的至少一个优化模块的优化例程可响应于可伸缩存储的一个或多个维度的一个或多个度量关于可伸缩存储的服务器具有不平衡而被执行。

一个或多个度量是否具有不平衡可由触发公式和触发得分来量化。在一些实现中,在该一个或多个度量中的至少一个具有不平衡的情况下,触发条件被确定为被满足。

在一些实现中,基于将维度的各度量中的一个或多个与阈值值(诸如该一个或多个度量的相应封顶值(例如,服务器度量的服务器封顶))相比较,确定该触发条件被满足。作为附加或替换,基于任何服务器负载(L)、一个或多个最繁忙服务器(i)、以及一个或多个最空闲服务器(j)中的至少一者,利用触发公式可确定该触发条件被满足。示例性触发公式包括其是一个或多个最繁忙服务器的平均服务器负载和一个或多个最空闲服务器的平均服务器负载之间的比值。服务器负载可包括上面描述的服务器负载度量。此时可基于触发得分S超过阈值值来确定触发条件被满足。例如,如果触发得分小于1.5,则触发条件可仍旧被满足。

触发条件还可基于配额,该配额设置在可伸缩存储上执行的负载平衡操作的全局速率。可与上面关于触发条件的各示例性因素所描述的类似地实现配额。

从而,触发公式可允许将触发条件的触发得分与阈值值相比较。从而,确定可伸缩的一个或多个维度的该一个或多个度量关于可伸缩存储的服务器具有不平衡可包括将从可伸缩存储的被建模的状态计算的触发得分与阈值值相比较。基于触发得分超过阈值值,可确定触发条件被满足。

用于实现维度扩展优化的优化模块的评估得分可关于可伸缩存储的服务器量化可伸缩存储的一个或多个维度的一个或多个度量的平衡。可能期望生成评估得分的评估公式不同于生成触发得分的触发函数。可能期望利用与触发公式不同的评估公式的一个理由是其中触发公式不能被有效利用来表征至少一个负载平衡操作所做的改善。例如,改善维度扩展的一些负载平衡操作可不改变触发公式。可能期望将方差公式或标准差公式用于该评估公式。

在一些实现中,评估得分基于一个或多个维度(i)、一个或多个分区服务器(j)、一个或多个度量(d)、和/或一个或多个排名或权重值(w)中的至少一者。作为具体示例,评估公式可包括其中是dij在j上的平均值。从而,被触发的优化模块的评估得分可被基于服务器的服务器度量从方差公式计算。

该示例性评估公式可以是针对给定维度的,然而,可通过针对多个维度中的每个维度利用示例性评估公式并添加结果来在评估得分中考虑该多个维度。从而,根据期望,评估得分可对应于可伸缩存储的一个维度、多个维度、或全部维度器。作为示例,评估公式可对应于S-∑iwiSi,其中S是评估得分。

提议候选函数可包括基于一个或多个服务器的服务器负载来选择多个候选操作。例如,提议候选函数可将可伸缩存储的每个服务器从最繁忙到最空闲排序(如由诸如服务器负载度量等负载度量所量化的)。那些服务器中的各最繁忙服务器中的一个或多个可被选择为该一个或多个服务器。

被指派给那些服务器的分区中的至少一些分区可被添加给候选分区集合。然而,一个或多个分区可被基于与该一个或多个分区相关联的通信量被从该候选分区集合排除,例如,高通信量分区可被排除。

而且,候选目标服务器集合可被选择为具有最低服务器负载的一定数量的服务器。被提议候选函数选择的该多个候选操作随后可被从提议候选集合和提议目标服务器集合确定。例如,该多个候选操作的移动负载平衡操作可包括该候选分区集合和该候选目标服务器集合的笛卡尔乘积。从而,负载平衡操作可包括:针对这些集合中的每个分区和服务器组合,来自该候选分区集合的给定分区被移动至该候选目标服务器集合的给定服务器。

从而,优化模块的优化例程可利用来自该提议候选函数的该多个候选操作来选择至少一个操作以在该可伸缩存储上执行。该多个候选操作可利用各优化函数中的任何优化函数被该优化例程过滤,诸如保持有利函数和保持最不无利函数。

帐户扩展优化

在框架300中实现的负载平衡逻辑可具有将来自由可伸缩存储主存的多个帐户的一帐户的分区在可伸缩存储的各服务器之间扩展的优化目标。例如,可能期望将分区扩展到尽可能多的服务器。出于多种原因,这可能是期望的,诸如以减少被严重损害的有限数量的服务器影响该帐户的分区的几率。实现帐户扩展优化的优化模块的优化例程可利用本文描述的各种优化函数的任一者。

在想着这种优化目标的情况下,在可伸缩存储主存的帐户的分区关于可伸缩存储的服务器在指派方面具有不平衡的情况下,被触发的优化模块的触发条件可被确定为被满足。因此,框架300的多个优化模块中的至少一个优化模块的优化例程可响应于可伸缩存储所主存的多个帐户中的一帐户的多个分区关于所述服务器中的一个或多个在指派方面具有不平衡而被执行。

该多个帐户的特定帐户或多个帐户是否具有不平衡可通过触发公式和触发得分来量化。在一些实现中,在该多个帐户的至少一个具有不平衡的情况下,触发条件被确定为被满足。

在一些实现中,触发条件基于与帐户相关联的分区的总数(Ctotal)、可伸缩存储中对与该帐户相关联的分区可用的服务器的总数(Ntotal)、包含与该帐户相关联的分区中的至少一个分区的服务器的数量(Nassigned)、以及该帐户的分区可能被扩展到的服务器的最大数量(min(Ctotal,Ntotal))中的至少一者。触发条件也可基于可被指派到给定服务器的分区的最大数量(C1)、以及在所述帐户的分区被完美扩展的情况下可被指派到相同服务器的分区的理想最大数量(C2)中的至少一者。例如,C2可以等于Ctotal/Ntotal

作为具体示例,触发条件可包括触发公式S=(Nmax-Nassigned)/Nmax+(C1-C2)/Ctotal,其中S是触发函数的触发得分。(Nmax-Nassigned)/Nmax根据当前托管该帐户的分区的服务器来量化帐户扩展。该值越高,帐户扩展越差。(C1-C2)/Ctotal根据如果所述服务器之一受到损害则丢失各分区的可用性的最大潜在风险来量化该帐户扩展。该值越高,最大潜在风险越高。

因此,假定一帐户具有三个分区(Ctotal),且它们全部被指派给可伸缩存储中的总共100个分区服务器(Ntotal)中的一个服务器。Nassigned=1,因为所有3个分区被指派给1个服务器。Nmax=min(100,3)=3,其指示所述分区可能被3个服务器托管。C1=3,因为在此示例中一个服务器中的分区的最大数量为3。C2=(3/100)舍入为1,因为理想帐户扩展将具有到3个服务器的3个分区扩展,每个服务器1个分区。在此示例中,所得到的触发得分S将为(3-1)/3+(3–1)/3=约1.3333。

有利地,触发公式允许触发得分被容易且有效地与阈值值进行比较。从而,确定可伸缩存储主存的帐户的分区具有不平衡可包括将从可伸缩存储的被建模的状态计算的触发得分与阈值值相比较。基于触发得分超过阈值值,可确定触发条件被满足。例如,利用上面的示例性触发公式,基于在正方向上的触发得分超过1,确定触发条件被满足。要领会,阈值值可任选地随时间被配置和调整。

实现帐户扩展优化的优化模块的评估得分可量化可伸缩存储主存的多个帐户的一帐户的多个分区中的不平衡。可能期望生成评估得分的评估公式不同于生成触发得分的触发函数。可能期望利用与触发公式不同的评估公式的一个理由是其中触发公式没有有效跟踪至少一个负载平衡操作所做的改善。例如,改善帐户扩展的一些负载平衡操作可不改变上面描述的触发公式的结果。可能期望将方差公式或标准差公式用于该评估公式。

在一些实现中,评估得分基于给定服务器上的帐户的分区的数量(d)以及针对任何给定服务器的帐户的分区的平均数量中的至少一者。作为一具体示例,评估公式可包括其中S是评估得分并且是针对该帐户的每个服务器i计算的。从而,被触发的优化模块的评估得分可被基于属于服务器的分区的指派的量从方差公式计算。

可被实现帐户扩展优化的优化模块利用的提议候选函数可包括标识该多个帐户中具有指示超过阈值值的帐户扩展(即,不平衡的帐户)的触发得分、评估得分或其它得分的一个或多个帐户。触发得分和触发公式可针对该多个帐户的一个或多个帐户分别考虑。利用上面描述的示例性触发得分和触发公式,对于被考虑的每个帐户,阈值值可以是1。阈值值和触发公式被配置成使得具有2个分区的帐户(全部在相同服务器上(其中至少一个其它服务器可用于分区)将被认为是不平衡的(即,在此情况下该阈值值将被超过)。然而,在相同示例中,如果每个分区在一独立服务器上,则该帐户将不被认为不平衡(即,在此情况下该阈值值将不被超过)。

在一些实现中,提议候选函数每次提议用于单个帐户的多个候选操作。例如,优化模块的优化例程可针对单个帐户被执行,其中该评估得分可关于该帐户被考虑。要注意,在各实现中,优化例程的优化例程可针对多个帐户被执行,其中评估得分关于那些帐户被考虑。从而,提议候选函数可针对该多个帐户中的任何数量的帐户提议多个候选操作。

基于优化模块的触发条件在经更新的被建模的状态中仍旧被满足,优化例程可针对(一个或多个)相同帐户或(一个或多个)不同帐户重复。在一些实现中,在给定优化例程中被考虑的(一个或多个帐户)按照轮询的方式从多个帐户中选择。

在一些实现中,负载平衡操作由提议候选函数基于与分区相关联的通信量来选择。例如,与分区中正经历高通信量的一个或多个分区相关联的负载平衡操作可不被包括在由提议候选函数提供的多个候选操作中。在一些实现中,提议候选函数仅考虑与分区中具有不超过一阈值值的通信量的一个或多个分区相关联的负载平衡操作。从而,基于一个或多个相关联的分区具有高通信量,各负载平衡操作中的至少一个可被从该多个候选操作排除。

提议候选函数可基于被指派给服务器的(一个或多个)帐户的分区的量来选择多个候选操作。例如,提议候选函数可标识并考虑被指派给可伸缩存储的任何到全部服务器的分区的量。在一些实现中,提议候选函数确定所述服务器中的哪些服务器主存该(一个或多个)帐户的分区的最高的量。被指派给那些服务器的分区可被添加到候选分区集合。从而,提议候选函数可包括基于与其它服务器相比属于所述服务器中的多个服务器的分区的指派的量(例如,基于高分区量被指派到一服务器)来选择多个候选操作。一个或多个分区可被基于与该一个或多个分区相关联的通信量被从该候选分区集合排除,例如,高通信量分区可被排除。

在一些实现中,提议候选函数确定所述服务器中的哪些服务器主存该(一个或多个)帐户的分区的最低的量。那些服务器可被添加到候选目标服务器集合。从而,可基于被指派给服务器的分区的量来将服务器添加到候选目标服务器集合。

提议候选函数可基于可伸缩存储的服务器的服务器负载来选择该多个候选操作。例如,提议候选函数可将可伸缩存储的每个服务器从最繁忙到最空闲排序(如由诸如如上所述的服务器负载度量等负载度量所量化的)。候选目标服务器集合可被限于具有最低服务器负载的一定数量的那些服务器。从而,基于服务器负载,例如基于具有低服务器负载,服务器可被添加至该候选目标服务器集合。

被提议候选函数选择的多个候选操作随后例如可以是将增加候选分区集合中的任何分区的扩展的操作,其中候选目标服务器集合中的任何服务器将接收到该(一个或多个)帐户的新分区。例如,该多个候选操作的移动负载平衡操作可包括该候选分区集合和该候选目标服务器集合的笛卡尔乘积。从而,负载平衡操作可包括:针对这些集合中的每个分区和服务器组合,来自该候选分区集合的给定分区被移动至该候选目标服务器集合的给定服务器。

从而,优化模块的优化例程可利用来自该提议候选函数的该多个候选操作来选择至少一个操作以在该可伸缩存储上执行。该多个候选操作可利用各优化函数中的任何优化函数被该优化例程过滤,诸如保持有利函数和保持最不无利函数。然而,如果被使用,则由于从用于在提议候选函数中选择多个候选操作的装置的观点看该多个候选操作全部对该优化模块有利,保持有利函数可不滤除该多个候选操作中的任何候选操作。

其他基于优化模块的示例

在一个方面,提供一种用于对可伸缩存储进行负载平衡的计算机实现的方法。所述方法包括:确定多个优化模块中的被触发的优化模块的触发条件被满足;基于优化例程优化所述可伸缩存储,所述优化例程包括:提供多个候选操作,其中所述多个候选操作是被指派给所述可伸缩存储的服务器的分区相关联的潜在负载平衡操作;对于所述多个优化模块中的具有比被触发的优化模块更高的优先级的所选优化模块,从所述多个候选操作中移除将削弱如由所述所选优化模块的评估得分所量化的所述可伸缩存储的被建模的状态的候选操作;以及确定所述多个候选操作中将改善如由所述被触发的优化模块的评估得分所量化的所述可伸缩存储的所述被建模的状态的至少一个操作;以及更新所述可伸缩存储的所述被建模的状态以对在所述可伸缩存储上执行所述至少一个操作进行建模;在所述可伸缩存储上执行所述至少一个操作。

在另一方面,提供了一个或多个存储计算机可使用指令的计算机存储介质,当所述计算机可使用指令由计算设备执行时执行一种用于对可伸缩存储进行负载平衡的方法。所述方法包括:对于多个优化模块中的每个被触发的优化模块,基于优化例程优化所述可伸缩存储,所述优化例程包括:提供多个候选操作,其中所述多个候选操作是被指派给所述可伸缩存储的服务器的分区相关联的潜在负载平衡操作;对于所述多个优化模块中的具有比被触发的优化模块更高的优先级的所选优化模块,从所述多个候选操作中移除如由所述所选优化模块的评估得分所量化的将削弱所述可伸缩存储的被建模的状态的候选操作;确定所述多个候选操作中如由所述被触发的优化模块的评估得分所量化的将改善所述可伸缩存储的所述被建模的状态的至少一个操作;将所述至少一个操作添加到被提议操作集合,以及更新所述可伸缩存储的被建模的状态来对在所述可伸缩存储上执行所述至少一个操作进行建模;在所述可伸缩存储上执行所述被提议操作集合。

参考图6,图6描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图6描绘了根据本公开的实现的方法600的流程图。在一个方面,提供一种用于对可伸缩存储进行负载平衡的计算机实现的方法(例如,图6的方法600)。所述方法包括:针对多个优化模块的被触发的优化模块,确定所述可伸缩存储主存的账户的分区具有关于所述可伸缩存储的服务器在指派方面的不平衡,并且响应于所述确定(例如,图6中的684),执行选择,包括:基于与所述服务器中的其它服务器相比属于所述服务器中的一些服务器的指派的量来选择多个候选操作,其中所述多个候选操作是与被指派给所述可伸缩存储的服务器的分区相关联的潜在负载平衡操作(例如,图6中的686);对于所述多个优化模块中的具有比被触发的优化模块更高的优先级的所选优化模块,从所述多个候选操作中移除如由所述所选优化模块的评估得分所量化的将削弱所述可伸缩存储的被建模的状态的候选操作(例如,图6中的688);以及确定所述多个候选操作中如由所述被触发的优化模块的评估得分所量化的关于指派方面的不平衡将改善所述可伸缩存储的所述被建模的状态的至少一个操作(例如,图6中的690);将所述至少一个操作添加到被提议操作集合(例如,图6中的692);更新所述可伸缩存储的被建模的状态来对在所述可伸缩存储上执行所述至少一个操作进行建模(例如,图6中的694);在所述可伸缩存储上执行所述被提议操作集合(例如,图6中的696)。

维度的试探负载平衡

示例性途径已在上面被描述,其可被用于利用一个或多个维度对可伸缩存储进行负载平衡。例如,一个或多个优化模块可被用来实现维度负载平衡。用于负载平衡的其它途径在下面描述并通常可被称为基于试探法的途径,这仅是为了方便而不应限制本文描述的各途径的特征,包括上面描述的基于优化模块的途径。而且,关于本文的各示例性途径中的任一者描述的概念不应当被认为是特定途径所独有的。例如,上面描述的维度可在基于试探法的途径中被实现。

在一些实现中,基于试探法的途径包括生成针对分区到服务器的多个指派计划,其中每个指派计划可利用不同的指派试探法来生成。指派计划可被分析和/或彼此比较和/或与指派准则相比较,并且作为响应,所述指派计划之一可被选择以供在可伸缩存储上执行。利用指派试探法可提供高度优化的指派计划以供在可伸缩存储上执行而不消耗大量资源。

参考图7,图7描绘了在其中本公开的实现可被采用的示例性负载平衡系统。特别而言,图7描绘其中可采用本公开的实现的负载平衡系统700。尽管为了清楚起见用线条示出了图7的各组件,但是在实际上,各组件的界限并不是那样清楚,并且按比喻的说法,线条更精确地将是灰色的或模糊的。而且,那些组分中的一些被描绘为在其它组分内仅旨在示出那些组分之间的关联。还要注意,图7中的箭头不旨在将本公开限制于特定时序或排序,包括信息或进程是否被串行或并行地计入。

负载平衡系统700包括指派协调器702、指派生成器704、以及计划分析器706。指派协调器702可被配置成管理针对分区到服务器的指派计划的生成。就此,指派协调器702可被配置成收集一个或多个分区712并将其提供给指派生成器704以供指派,并收集可伸缩存储(例如,图2中的可伸缩存储200)的一个或多个服务器714(例如,图2中的服务器204、206、208和210)并将其提供给可接收那些指派的指派生成器704。指派协调器702也可被配置成确定可伸缩存储的哪些分区被包括在分区712中。

分区712可包括可伸缩存储的目前被指派给可伸缩存储的服务器的分区。例如,分区可被选择以从其相应服务器卸载。至少一些分区可来自可伸缩存储的具有各维度的至少一个维度的超过封顶值的维度值(例如,服务器值)的至少一个服务器。

分区712可替代地或附加地包括被解除到可伸缩存储的指派的分区。分区712可被指派到或先前被指派到了可伸缩存储的已经故障、已被关闭、或以其它方式不能用于主存任何分区712的一个或多个服务器。

指派协调器702可被配置成提供可向其指派分区712的一个或多个服务器714。服务器714可包括可伸缩存储的全部服务器或其子集。而且,服务器714可包括在任一个或多个维度中或者在给定的一个或多个维度或其子集中具有可用能力的全部服务器。

指派协调器702还可被配置成向指派生成器704提供维度值。维度值是从诸如图7中示出的维度710a、710b和710c等维度的度量得到的。示例性维度已在上面被讨论。所示的每个维度均包括量化该维度的一个或多个资源的一个或多个度量。

维度值可包括维度的分区值和/或维度的服务器值。分区值可对应于维度的关于一个或多个分区(例如,单个分区)的度量。例如,分区值可从维度的分区度量得到。服务器值可对应于维度的关于一个或多个服务器(例如,单个服务器)的度量。例如,服务器值可从维度的服务器度量或进程度量得到。

服务器值也可从分区值和/或分区度量得到。例如,针对一维度的服务器的服务器值可从该维度的分区值得到,其中所述分区值对应于被指派给该服务器的分区。作为更具体的示例,服务器的服务器值可基本等于、大于或等于、或以其它方式基于被指派给该服务器的所有分区的分区值的总和。而且,每个分区值可对应于被指派给该服务器的分区之一。因此,被指派了四个分区的服务器可具有对应于四个分区值的总和的服务器值,每个分区值对应于分区之一。服务器值还可包括在分区值中可不被计入的附加开销。

如所示,在图7中,指派协调器702正向指派生成器704提供维度值,所述维度值包括服务器值716a、716b和716c以及分区值718a、718b和718c。服务器值716a和分区值718a是从维度710a的一个或多个度量得到的。服务器值716b和分区值718b是从维度710b的一个或多个度量得到的。而且,服务器值716c和分区值718c是从维度710c的一个或多个度量得到的。尽管在本文中用复数指代,然而在一些实现中,对于任何给定维度,指派协调器702可提供仅一个服务器值和一个分区值。而且,分区值和/或服务器值可不必由指派协调器702针对每个维度提供。

服务器值716a可各自对应于一个或多个不同的服务器。而且,服务器值716a可各自从维度710a的一个或多个相同度量得到,诸如相同的服务器度量。类似地,服务器值716b可各自对应于一个或多个不同的服务器。而且,服务器值716b可各自从维度710b的一个或多个相同度量得到,诸如相同的服务器度量。服务器值716c可各自对应于一个或多个不同的服务器。而且,服务器值716c可各自从维度710c的一个或多个相同度量得到,诸如相同的服务器度量。通过基于维度内的一个或多个共同度量,不同服务器的服务器值可在给定维度内被容易地与彼此比较。

一个或多个给定服务器可具有来自所述维度中的每个维度的相应服务器值。例如,服务器值716a之一、服务器值716b之一以及服务器值716c之一可各自对应于该一个或多个相同的服务器。然而,在一些实现中,所述一个或多个服务器中的每个服务器可仅具有针对总维度的子集的相应服务器值(例如,针对维度710a和710b的服务器值,而对于维度710c没有服务器值)。作为一些示例,在这些情况下,缺失的服务器值可被指派默认值(例如0),或者可指示相应的一个或多个服务器不可用于在与缺失的服务器值对应的维度上使用。

而且,分区值718a可各自对应于一个或多个不同的分区。而且,分区值718a可各自从维度710a的一个或多个相同度量得到,诸如相同的分区度量。类似地,分区值718b可各自对应于一个或多个不同的分区。而且,分区值718b可各自从维度710b的一个或多个相同度量得到,诸如相同的分区度量。分区值718c可各自对应于一个或多个不同的分区。而且,分区值718c可各自从维度710c的一个或多个相同度量得到,诸如相同的分区度量。通过基于维度内的一个或多个共同度量,不同分区的分区值可在给定维度内被容易地与彼此比较。

一个或多个给定分区可具有来自所述维度中的每个维度的相应分区值。例如,分区值718a之一、分区值718b之一以及分区值718c之一可各自对应于该一个或多个相同的分区。然而,每一个或多个分区可不必然具有针对每个维度的相应的分区值。

作为示例,在本实现中,每个服务器值716a可对应于服务器714之一,每个服务器值716b可对应于服务器714之一,且每个服务器值716c可对应于服务器714之一。类似地,每个分区值718a可对应于分区712之一,每个分区值718b可对应于分区712之一,且每个分区值718c可对应于分区712之一。

维度值可用维度值的向量来表示。例如,一个或多个特定分区可使其来自每个维度的相应分区值用那些分区值的分区向量表示。类似地,一个或多个特定服务器可使其来自每个维度的相应服务器值用那些服务器值的单个服务器向量表示。为了方便,服务器向量和/或分区向量关于所述维度可共享相同的排序。例如,在每个维度向量中,第一维度值可对应于维度710a,第二维度值可对应于维度710b,第三维度值可对应于710c,以此类推。

指派生成器704可被配置成接收分区712以供指派到可伸缩存储的服务器。接收分区712可包括接收任何分区值718a、718b、718c和/或对应于分区712的其它分区值。例如,分区向量可任选地针对每个分区712被接收。分区值不必然与彼此或与相应分区同时被接收。

指派生成器704还可被配置成接收要向其指派分区712的服务器714。接收服务器714可包括接收任何服务器值716a、716b、716c和/或对应于服务器714的其它分区值。例如,服务器向量可任选地针对每个服务器714被接收。服务器值不必然与彼此或与相应服务器同时被接收。

指派生成器704还可被配置成生成用于将分区712指派到服务器的指派计划722a、722b、722c和722d。在各实现中,指派计划描述了分区712中的哪一个或多个分区要被指派到可伸缩存储的哪个服务器。在一些实现中,在指派计划之前或作为指派计划的一部分,分区712可被分割、合并、或以其它方式修改。

指派计划722a、722b、722c和722d和/或其它指派计划可通过不同的指派试探法来确定。例如,指派计划722a通过指派试探法720a来确定,指派计划722b通过指派试探法720b来确定,指派计划722c通过指派试探法720c来确定,且指派计划722d通过指派试探法720d来确定。

将分区最优地指派到服务器可以是NP难度问题,其可以是计算上昂贵且耗时的。被消耗的资源在伸缩存储中可能是高度有价值的,其中很大数量的分区和服务可能被采用。指派试探法可各自包括用于将分区指派到服务器的不同试探法,不保证其得到最优指派计划,但是可具有低的计算和时间要求。可实现任何数量的指派试探法和指派计划。作为具体示例,一些实现采用36个指派试探法和相应的指派计划。

指派试探法可按许多不同方式实现并可计入许多不同的因素。一般而言,通过关于生成指派计划具有不同的结果确定性属性,指派试探法可以是能够彼此区分的。换言之,不同的指派试探法可以能够产生不同的指派计划,并且任选地可基于相同的输入实现这一点(例如,分区712和/或服务器714)。关于此,每个指派试探法可对应于用于分区712的不同的指派策略。

利用任何到全部的指派试探法,指派生成器704可基于关于一个到全部维度服务器具有托管分区可用的能力确定分区到服务器的指派。附加地或替换地,指派生成器704可基于关于一个到全部维度服务器具有最低利用率量或阈值利用率量确定分区到服务器的指派。

在一些实现中,用于给定维度的服务器的能力可通过封顶值或阈值值来确定,诸如上面已描述的。可用能力接着可对应于关于给定维度的封顶值(例如,服务器封顶)和利用率之间的差异。关于给定维度的利用率可对应于服务器值(例如,对应于该服务器的分区值的总和)。

如先前所指示的,维度值可被标准化到概念上共用的尺度。例如,分区值可被标准化到一概念上共用的尺度且服务器值可被标准化到一概念上共用的尺度。这样做可允许来自不同维度的维度值被容易地比较,例如,在确定分区的指派和/或评估指派计划时。

在一个方面,利用任何到全部指派试探法,至少部分通过将所述维度的任何分区值718a、718b和718c装箱到服务器714的服务器箱(server bin)中,指派生成器704可确定指派计划722a、722b、722c和722d和/或其它指派计划。作为装箱的补充或替代,也可采用其它指派策略。

在装箱时,任何给定服务器箱可具有对应于能力(例如,封顶值)的大小或体积以及对应于当前利用率(例如,服务器的服务器值或分区值的总和)的被占用体积。装箱可以是多维的,例如,在采用分区向量的情况下,装箱可包括将对应于不同维度的分区值向量装箱到对应于所述不同维度的服务器箱中。

不同指派试探法可采用用于分区的装箱的不同适合策略。那些适合策略中的一些可允许任何服务器关于一维度超出能力,其可以是有限次数、超出有限量、和/或针对指定维度。在一些实现中,第一策略可被采用,并且如果并非全部分区712均使用第一适合策略在指派计划中被指派,则第二适合策略可被采用,该第二适合策略向该指派计划增加附加指派。例如,第一适合策略可尝试将服务器箱维持在能力以下而第二适合策略可无视能力或增加封顶值。示例性适合策略包括第一适合、最佳适合、最差适合、下一适合、或其任何组合或变种。

指派试探法可通过它们如何确定被分析的至少一个分区是否将被指派给被分析的服务器来区分。而且,指派试探法可附加地或替换地通过分区和/或服务器被选择以进行分析的次序来区分。

在一些实现中,生成指派计划中的至少一个包括使用一搜索次序迭代地搜索至少一个候选服务器以用于将至少一个给定分区指派给该至少一个候选服务器。至少一个候选服务器可在搜索该至少一个候选服务器的迭代中被选择。而且,该至少一个候选服务器可被添加到该给定指派计划以将所述分区指派到所述服务器。

搜索次序可通过指派试探法来确定。在一些方面,通过针对不同搜索利用不同的搜索算法和/或不同的搜索方法,可使得搜索次序不同。例如,一个指派试探法将对应于二元搜索方法而另一指派试探法可对应于线性搜索方法。搜索方法可在装箱中或在其它指派策略中采用。在每个操作方法对列表(诸如维度向量或值的列表)进行操作的情况下,每个搜索方法可接收同一列表,但是按不同的搜索次序搜索该列表。

而且,在一些实现中,借助利用相同的搜索算法和/或搜索方法,但是向该(一个或多个)搜索算法提供具有不同排序的已排序列表,搜索次序可以不同。例如,取决于被输入到算法中的已排序列表的次序,相同二元搜索算法可产生不同的输出。

任何搜索次序可以是被指派的分区(例如,712)和用于分区的指派的服务器(例如714)中的至少一者的搜索次序。例如,搜索次序可对应于至少一个分区被选择以被指派到服务器的次序。搜索次序还可对应于被用来遍历搜索服务器以指派到所选的至少一个分区的次序。

在一些实现中,被指派的分区和分区被指派到的服务器中的至少一者的搜索次序是通过基于相应的维度值(例如在列表中)对那些分区或服务器进行排序来确定。例如,搜索次序可包括按照根据一个或多个维度的相应分区值的升序或降序对分区712排序。作为另一示例,搜索次序可包括按照根据一个或多个维度的相应服务器值的升序或降序对服务器排序。

分区和/或服务器可按照相同维度、多个维度或全部维度来排序。例如,分区712可按照全部对应于维度710a的分区值的升序或降序排序。替换地,分区712可不管相应维度(例如,按照分区的最大或最小维度)按照分区值的升序或降序排序。服务器可类似地根据服务器值按照这些方式中的任何方式被排序。在一些实现中,至少一个指派试探法包括分区值和/或服务器值的未排序或随机化列表,而其它指派试探法可对列表排序。

在一些实现中,至少一个候选服务器在该搜索的一迭代中被选择,而在该搜索的另一迭代中该至少一个候选服务器被更新为至少另一服务器。更新可以基于新候选服务器在一个或多个维度中具有更大的可用能力或更低的利用率。例如,服务器714可在二元搜索或其它类型的搜索中被搜索以用于指派,其中所述搜索的每个迭代检查服务器714中的一个或多个不同的服务器以用于指派。该至少一个候选服务器可在一次迭代中被选择并在后续迭代中被另一服务器取代。新候选服务器可具有更多的可用能力、更少的利用率,或以其它方式更适于被指派的一个或多个分区。

在一些实现中,任何到全部指派试探法包括形成服务器714(和/或分区712)的群组并分开地对那些群组进行排序和/或搜索。例如,一个服务器群组可基于具有最大可用能力的一服务器的至少一个维度(例如,一个或两个维度)。指派试探法可在搜索另一群组之前搜索该群组以用于在该至少一个维度中的分区的指派。

在各实现中,任何到全部指派试探法可利用至少一个元试探法(meta-heuristic)来实现。元试探法可对应于指派试探法之间的首要共性。例如,上面描述的前述编组可被实现为元试探法。特别而言,服务器714和/或分区712可被分组且不同的指派试探法可按照不同方式(其可包括装箱)对那些群组进行排序和/或搜索。

指派计划可按任何次序来确定,其包括并行或串行。而且,指派计划可基于来自指派协调器702的任何维度值来确定。指派生成器704可被配置成向计划分析器706提供指派计划722a、722b、722c、722d和/或其它指派计划。

计划分析器706可被配置成从指派生成器704接收指派计划722a、722b、722c、722d和/或其它指派计划。而且,计划分析器706可被配置成从指派计划选择指派计划726以供在可伸缩存储上执行。选择可包括关于指派准则来分析指派计划并基于指派准则来选择指派计划726。

指派准则可采取许多不同形式并计入许多不同因素。在各实现中,选择指派计划之一以供在可伸缩存储上执行基于根据指派计划中的指派来分析维度值。维度值可被从所述维度的分区值和服务器值中选择。例如,分析可基于如果指派计划被执行则将对应于所述服务器的维度值。

选择可包括在不同指派计划间比较服务器的维度值。在一些实现中,选择基于指派计划中的最大或最小维度值或维度值的总和。例如,可至少部分基于指派计划中的服务器的分区值或服务器值是否是任何指派计划中的任何服务器的最大或最小者来选择指派计划726。该选择还可基于指派计划中的服务器是否超过封顶值或指派计划中多少服务器或封顶值正被超过。

关于指派准则计算最优指派计划可以是NP难度问题。任何给定指派试探法可不可靠地导致关于指派准则的高度最优的指派计划。然而,利用多个指派试探法可增加所选的指派计划一致地高度最优的同时通过消耗显著更少的可伸缩存储的资源来被生成的概率。

所述指派计划中的被选择的指派计划可在可伸缩存储上执行。在一些情况下,可能期望确保至少一个指派计划总是被生成并针对要被指派的分区(例如分区712)被选择。此类情况的示例包括其中要被指派的至少一个分区当前未被指派给服务器,或以其它方式应当被紧急指派给服务器。例如,要被指派的至少一个分区中的任何分区当前可被指派或先前被指派给了可伸缩存储的已经故障、已被关闭、或以其它方式不可用于主存的一个或多个服务器。

然而,要注意,任选地,指派计划可能不总是被成功地生成和/或选择以用于在可伸缩存储上执行。例如,在要被指派的分区(例如分区712)已经被指派给服务器的情况下,可能不紧急地需要指派计划。因此,要注意,在一些情况下,没有指派试探法能够成功生成指派计划可以是可接受的。而且,在一些情况下,一个或多个指派计划被生成但例如未被选择可以是可接受的,其中那些计划中的计划均不满足指定准则。而且,在一些情况下,其中指派计划被选择,该指派计划可任选地使其执行是以确定该指派计划将改善可伸缩存储的负载平衡为条件的。

附加试探负载平衡示例

参考图8,图8描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图8描绘了根据本公开的实现的方法800的流程图。在一个方面,提供一种用于对可伸缩存储进行负载平衡的计算机实现的方法(例如,图8的方法800)。所述方法包括:接收用于指派到可伸缩存储的服务器的分区(例如,图8中的850),基于维度的维度值生成用于将所述分区指派到所述服务器的指派计划,每个维度对应于可伸缩存储的一个或多个资源,其中指派计划是通过不同的指派试探法确定的(例如,图8中的852),基于根据指派计划的指派分析维度值来选择指派计划之一以供在可伸缩存储上执行(例如,图8中的854),以及在可伸缩存储上执行所述指派计划中的被选择的指派计划(例如,图8中的856)。

现在参考图9,图9描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图9描绘了根据本公开的实现的方法900的流程图。在一个方面,提供了一个或多个存储计算机可使用指令的计算机存储介质,当所述计算机可使用指令由计算设备执行时执行一种用于对可伸缩存储进行负载平衡的方法(例如,图9中的方法900)。所述方法包括:接收用于指派到可伸缩存储的服务器的多个分区中的分区,所述分区具有维度的分区值,每个维度对应于可伸缩存储的一个或多个资源(例如,图9中的950),通过将维度的分区值装箱到服务器的服务器箱中来确定用于将分区指派到服务器的指派计划,其中针对所述指派计划中的不同指派计划的装箱利用不同的指派试探法(例如,图9中的952),基于根据指派计划中的指派来分析分区值来选择所述指派计划之一以供在可伸缩存储上执行(例如,图9中的954),以及在可伸缩存储上执行所述指派计划中的被选择的指派计划(例如,图9中的956)。

参考图10,图10描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图10描绘了根据本公开的实现的方法1000的流程图。在一个方面,提供一种用于对可伸缩存储进行负载平衡的计算机实现的方法(例如,图10的方法1000)。所述方法包括:接收用于指派到可伸缩存储的服务器的多个分区的分区,所述分区具有维度的分区值,每个维度对应于可伸缩存储的一个或多个资源(例如,图10中的1050),生成用于将分区指派到服务器的指派计划,所述指派计划通过不同指派试探法来确定(例如,图10中的1052),其中对于所述指派计划中的给定指派计划,所述生成包括:使用一搜索次序迭代地搜索候选服务器以将所述分区中的至少一个分区指派到所述候选服务器,该搜索次序是分区和服务器的至少一者的搜索次序,其中该搜索次序是通过对应于给定指派计划的不同指派试探法之一确定的(例如,图10中的1054),在搜索候选服务器的迭代中选择候选服务器(例如,图10中的1056),以及将该候选服务器添加到用于将分区指派到服务器的给定指派计划(例如,图10中的1058)。该方法进一步包括,基于根据指派计划中的指派来分析分区值选择所生成的指派计划之一以供在可伸缩存储上执行(例如,图10中的1060),并且在可伸缩存储上执行所述指派计划中的被选择的指派计划(例如,图10中的1062)。

基于试探法的途径可连同其它途径一起使用,诸如本文中描述的那些途径。例如,基于试探法的途径可连同基于被用来实现维度负载平衡的一个或多个优化模块的途径被实现。在一些实现中,图2的主机202可在用于对可伸缩存储进行负载平衡的各种途径之间进行选择。特别而言,已经构想,基于试探法的途径在某些情况下通常显著更快或以其它方式更被期望,诸如当对大量分区进行负载平衡时。选择可基于例如经受负载平衡的分区的数量、那些分区的大小、那些分区是否当前被指派给服务器或未被指派、可用于指派的服务器的数量、那些服务器的可用能力、或其它因素的任何组合。

用于负载平衡的分区的选择

在另一方面,本公开涉及选择用于指派的分区。例如,参考图7描述的分区712中的至少一些分区已被选择用于从其相应的服务器卸载。涉及选择用于指派的分区的各种概念可被应用至本文描述的任何负载平衡途径,或可利用不同途径来实现。

在选择用于指派的分区时已构想了各种考虑。与较不重要的分区相比,较重要的分区在不可用时可对可伸缩存储具有更大的影响。因此,在一个方面,可能期望将具有比其它分区更低的重要程度的分区的选择优先化。而且,向服务器指派分区可具有某些相关联的成本和开销。从而,在另一方面,如果可能,可期望最小化被选择以用于指派的分区的数量。尽管每次准确地最小化分区的数量可能不切实际,但是一个适当途径可选择服务器以从最过载的服务器卸载。通过这样做,可做出供应以使得移除分区将不显著超越服务器值的加少,因为那些分区的分区值可能很大且难以指派。

如所指示的,在一些方面,选择用于指派的分区基于可伸缩存储的分区的重要度,诸如图2中的分区P1、P2、P3、P4、P5和P6中的任一者。重要度通常可量化卸载分区或分区组的重要性,例如,关于另一个或多个分区。重要度可针对各分区中的至少一些分区利用权重值、重要性得分、或其它排名来定义。

在一些实现中,重要度是用户定义的。例如,一个或多个用户可向不同分区类别指派不同重要度。重要度还可从各种因子中的任何因子来计算或另行得出,诸如实况通信量、历史通信量、拥有分区或与分区相关联的帐户的帐户优先级、资源利用率、分区值、复杂平衡惩罚、惩罚得分、以及许多其他因子。一些分区可不被一个或多个用户指派重要度。这些分区可被指派默认重要度,可使其重要度被计算或确定,或可按其它方式在选择用于卸载的分区时被计入。

在各实现中,在选择用于卸载的分区时,具有较低重要度的分区可在选择用于卸载的分区之前被分析或以其它方式在选择用于卸载的分区时被给予优先级。在一些实现中,选择用于卸载的分区包括至少基于与多个分区相关联的重要度来确定该多个分区中用于卸载的候选分区。被选择的候选分区可在该多个分区中具有不同重要度(例如,更高的重要度)的其他分区之前被分析。

在一些实现中,候选分区在选择用于卸载的分区的一次迭代中被分析以用于卸载,且在后续迭代中,该多个分区中的至少一个其它分区例如基于与该至少一个其它分区相关联的重要度被添加到候选分区。例如,基于具有比候选分区中的分区具有更高的重要度,该至少一个分区可被添加。迭代添加到候选操作是在选择用于卸载的分区时偏向具有更低重要度的分区的一种途径。

在一些实现中,用于卸载的分区的选择可有条件地被迭代,例如基于在该迭代中和/或在多个迭代中累积地一个或多个分区是否已被选择用于卸载。那些考虑可进一步基于已被选择的分区的数量或是否已满足其它选择准则。

作为重要度的附加或替换,选择用于卸载的分区可任选地偏向选择更少的分区。关于此,分析和/或选择用于卸载的分区可首先寻求选择有限数量的分区以从给定服务器卸载(例如一个或两个分区)。如果例如给定服务器不能通过移除有限数量的分区来在一个或多个维度上被置于能力之下或能力处,则在选择用于卸载的分区时可考虑更多分区。例如,该有限数量可被增加和/或任何数量的分区可在后续分析中被选择。

在一些实现中,选择用于卸载的分区包括确定所述候选分区中的至少一些分区的卸载得分。卸载得分可量化一分区对于其相应服务器的卸载的适合度。而且,卸载得分可基于相应服务器的封顶值和/或服务器值、至少一个分区值、和/或其它维度值的任何组合。在一些方面,卸载得分可基于将该至少一个分区值与对应于该同一维度的封顶值相比较。例如,卸载得分可基于一个或多个分区值与和该一个或多个分区值相同的维度相对应的一个或多个服务器封顶之间的差。

在从到服务器的指派移除该分区将导致该服务器的维度不再过载的情况下,更低的差可对应于比更高的差更高的卸载得分。以此方式,分区可被偏向用于卸载而无需移除具有可能难以指派给其它服务器的过大的分区值的分区和/或无需导致服务器关于维度的利用不足。

在一些实现中,范围和/或阈值可被用于确定卸载值。该范围和/或阈值可对应于卸载该分区将带来的服务器的关于一个或多个维度的利用率,并且可被引用到服务器的封顶值。例如,基本等于封顶值可对应于一个卸载得分,从封顶值到封顶值下的第一阈值(例如,封顶值的95%)可对应于更高的卸载得分,从第一阈值到进一步低于封顶值的第二阈值(例如,封顶值的75%)可对应于更低的卸载得分,而低于第二阈值可导致甚至更低的卸载得分(例如0)。在移除之后服务器将仍旧关于(一个或多个)维度过载的情况下,卸载得分也可低于任何前述得分(例如0)。注意,更多或更少的范围和/或阈值可被利用并可计入与所描述的因子不同的因子。

选择用于卸载的分区可包括限制可被选择以从给定服务器卸载的分区的数量。例如,该数量可限于每服务器一个分区。例如,如果没有足够的分区已被选择用于卸载,或没有分区已被选择用于卸载,则该数量可被增加。在一个实现中,仅一个分区被选择从任何给定服务器卸载,其可以是对该服务器具有最高卸载得分的该服务器的分区。然而,如果没有分区被选择用于卸载(或小于阈值量的分区被选择用于卸载),则所述选择可考虑分区对(或多于两个分区、或无限数量的分区)以用于从相应服务器移除。所考虑的分区的数量可递增地增加,直到满足特定选择准则为止。

选择用于卸载的分区还可包括对应于服务器的分区值的子集总和(例如,向量子集总和)分析。换言之,子集总和可相较于服务器的封顶值来考虑分区值的总和。基于分区值的子集总和分析,相应分区可被选择以用于移除。子集总和可被递增地实现且至少一些递增可以以基于至少一个先前递增的选择准则为条件。例如,选择准则可以是至少一个分区或给定数量的分区已在一个或多个先前迭代中被选择。迭代可以从选择中移除先前选择的分区或可以与那些被选择的分区相累积。

在一些实现中,在第一迭代中,子集总和分析选择将导致关于服务器的服务器封顶的第一利用率水平(例如,等于服务器封顶)的用于移除的分区(例如,任何数量的分区或给定数量的分区)。在任何后续迭代中,关于服务器的利用率水平可被减少至更低的利用率水平,其可在任何后续迭代中被进一步减少。作为具体示例,在封顶值为100且服务器值为120的情况下,子集总和分析可被用来找出用于选择的分区,以使得在分析的不同迭代中该服务器值将为100、90、80、70、60和50。以此方式,分析可偏向维持服务器的特定利用率水平以便防止越过封顶值。

在针对被选择的分区生成指派计划时的考虑

已选择用于卸载的分区之后,那些分区可被合并到一个或多个指派计划中,例如,利用本文描述的任何适当的途径或其它途径。在一些实现中,针对被选择的分区生成指派计划。在可伸缩存储上执行指派计划之前进一步确定执行指派计划是否将改善可伸缩存储中的负载平衡。基于确定执行指派计划将改善可伸缩存储的负载平衡,可执行指派计划。然而,基于确定执行指派计划将不改善可伸缩存储的负载平衡,可选择新分区集合以用于卸载。这可任选地重复,直到适当的指派计划被确定并被执行为止。

在一些实现中,所述确定包括将服务器划分为集合。一个集合可对应于具有在指派计划中要被卸载的分区的服务器(也被称为第一服务器集合)。另一集合可对应于其分区要被指派到的服务器(也被称为第二服务器集合)。要领会,这些集合可能重叠。对于每个集合中的每个维度,可确定哪个分区值最高。这可导致第一服务器集合的那些分区值的集合(也被称为第一分区值集合)和第二服务器集合的那些分区值的集合(也被称为第二分区值集合)。每个集合可被表示为向量。

可将第一分区集合与第二分区值集合进行比较以确定该指派计划是否将改善负载平衡。如果第一分区值集合中的分区值大于其相应维度的服务器封顶,则改善可对应于该维度的最高分区值在第二分区值集合中降低。如果第一分区值集合中的分区值小于其相应维度的服务器封顶,则改善可对应于该维度的最高分区值小于或等于第二分区值集合中该维度的封顶值。这些评估可针对每个分区值执行。而且,评估可单独决定关于负载平衡的总改善确定。例如,负载平衡可仅在每个评估对应于改善的情况下被认为是被改善。在另一途径中,那些评估可以是累积的或以其它方式被组合地考虑,以使得没有单一评估是决定性的。

指派计划和分区的选择的附加示例

现在参考图11,图11描绘了根据本公开的实现的用于对可伸缩存储进行负载平衡的示例性方法的流程图。特别而言,图11示出了可实现本文描述的各概念的方法1100。方法1100开始于接收具有范围从1到N的重要性值的分区(图11中的1150)。每个重要性值对应于一重要度且可被表示为整数。所示出的具体示例包括N个重要度。而且,更低的整数可对应于比具有更高的整数的分区更低的重要度。这种关系仅是示例性的并且可被更改。

方法1100可分析分区PS以供选择用于卸载,其中分区PS对应于具有范围从1到i的重要性值的分区。如果后续迭代发生,则具有更低重要度的附加分区通过递增i被添加到分区PS。当不存在剩余分区用于考虑时,方法1100可在不执行指派计划的情况下终止。如果从分区PS的先前版本分区被成功选择用于卸载且基于分区PS的先前版本指派计划被执行(图11中的1160),则后续迭代可不发生。尽管用复数来指代,然而分区PS可包括一个或多个分区。而且,仅一个分区或许多分区可被选择并执行。

方法1100尝试从分区PS选择有限数量的分区以供从任何给定服务器卸载(例如,利用卸载得分)。上面描述了许多示例性途径且不再重复。如果选择成功,则可针对被选择的分区生成指派计划(图11中的1156)。指派计划可按任何适当方式并利用任何适当途径生成,诸如本文描述的基于试探法的途径。

如果没有分区被选择,则方法1100可更改其选择准则和选择方法(例如,利用子集总和分析),例如,通过尝试从分区PS中选择任何数量的分区以供从任何给定服务器(图11中的1158)卸载。上面描述了许多示例性途径且不再重复。如果选择成功,则可针对被选择的分区生成指派计划(图11中的1156)。指派计划可按任何适当方式并利用任何适当途径生成,诸如本文描述的基于试探法的途径。

方法1100可包括在可伸缩存储上执行指派计划之前进一步确定执行指派计划是否将改善可伸缩存储的负载平衡(图11中的1158)。这可按任何适当方式并利用任何适当途径(诸如上面描述的途径)实现。在图11中可以看出,基于确定执行指派计划将改善可伸缩存储的负载平衡,可执行指派计划。然而,方法1100可基于确定执行指派计划将不改善可伸缩存储的负载平衡,考虑用于选择的附加分区。

从而,根据本公开的实现,可利用本文描述的各种途径中的任何途径来实现对可伸缩存储进行负载平衡。本发明的各实施例已被描述为说明性的而非限制性的。可理解的是,某些特征和子组合是有用的,并且可以加以利用而无需参考其它特征和子组合。这由权利要求所构想的,并在权利要求的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1