在可缩放环境中管理分区的制作方法

文档序号:6532950阅读:175来源:国知局
在可缩放环境中管理分区的制作方法
【专利摘要】本发明提供了启用用于对可缩放环境中的应用定义的作业进行分区的通用框架的系统和方法。该通用框架将对作业进行分区从其他方面的作业中解耦出来。结果,定义应用定义的作业所需的努力被降低或最小化,因为不需要用户提供分区算法。通用框架还促成对在分布式环境中执行计算的主机和服务器的管理。
【专利说明】在可缩放环境中管理分区
[0001]背景
[0002]云计算环境提供用于允许用户具有对大量计算资源的访问而无须购置相应的架构的潜在平台。相反,该计算环境可被云计算提供者作为服务来提供。这可允许用户调谐所请求的计算资源以匹配计算作业的尺寸和重要性。然而,充分利用可用作服务的附加计算资源可能需要将各计算任务划分成较小的部分,以使得多个物理或虚拟处理器可被用于执行任务。
[0003]概述
[0004]在各个实施例中,提供了启用用于对可缩放环境中的应用定义的作业进行分区的通用框架的系统和方法。该通用框架将对作业进行分区从该作业的其他方面中解耦出来。结果,定义应用定义的作业所需的努力被降低或最小化,因为不需要用户提供分区算法。通用框架还促成对在分布式环境中执行计算的主机和服务器的管理。
[0005]提供本概述是为了以简化的形式介绍将在以下【具体实施方式】中进一步描述的概念选择。该概述不旨在标识所要求保护的主题的关键特征或本质特征,也不旨在独立地用于帮助确定所要求保护的主题的范围。
[0006]附图简述
[0007]下面将参考附图详细描述本发明,其中:
[0008]图1到图3示意性地示出根据本发明的各方面的分布式计算环境的一示例的各个方面;
[0009]图4示意性地示出根据本发明的各方面的各个接口之间用于执行通用分区环境中的作业的交互。
[0010]图5示出了根据本发明的各方面的通用分区环境的示例;
[0011]图6示出根据本发明的各方面的为活跃主机角色提供备份机器的示例;
[0012]图7是适用于在实现本发明的各实施例时使用的示例性计算环境的框图;
[0013]图8示出根据本发明的各方面的为主机角色提供备份机器的另一示例;
[0014]图9到图10示出根据本发明的各实施例的方法的示例;以及
[0015]图11示出根据本发明的各方面的相对于错误域和升级域为主机角色提供备份机器的示例性方面。
[0016]详细描述
[0017]摄览
[0018]由于通过网络的数据传输速度的增加和其他网络特征的改善,越来越有可能在其中计算资源分布在大型网络上的环境中执行大规模计算任务。处于第一位置的用户可向计算服务提交作业或计算任务,并且使该任务在该用户不直接知晓的计算机群组上执行。用于执行用户的任务的计算资源可分布在多个位置上。位于一个或多个位置中的第一计算资源群组可以存储用于执行用户的计算任务的数据和其他信息,而位于相同位置或者可能位于一组不同的一个或多个位置中的第二计算资源群组可被用于执行该计算任务。
[0019]对各种分布式计算资源的访问允许用户执行作业任务,而无需关心这些计算资源位于何处。分布式资源还为用户提供了扩展(scale up)(或收缩(scale down))所使用的资源量以便满足计算任务的目标(诸如用指定时间完成该计算任务)的机会。然而,使用分布式计算资源向用户提出了数个挑战。常规上,用户或应用设计者将需要将资源从设计应用或作业中转移走,以便确定如何利用具体的分布式计算环境。
[0020]在各个实施例中,提供了启用用于在分布式环境(诸如云计算环境)中构建可缩放应用的通用框架的系统和方法。该通用框架可允许将对作业或工作项进行分区从执行与这些作业或工作项相关联的计算中解耦出来。这允许分布式环境的所有者以可访问或简化方式向用户提供资源,而同时仍提供分布式资源的高可用性。该通用框架通过提供以下框架来降低为分布式环境设计应用的复杂性:用于处理诸如可缩放性、容错性、和/或可用性之类的特征,同时降低或最小化处理这些特征所需的努力量的框架。结果,该框架可允许应用设计者聚焦于该应用,而不是将附加的时间花在该分布式环境的要求上。
[0021]定义
[0022]“密钥”是通用分区框架中使用的基板概念之一。密钥是来自命名空间或域的值。命名空间的示例是对应于云计算环境中的所有存储账户的标识符。在这样的示例中,密钥可对应于账户名、账号、或允许引用特定账户的另一标识符。命名空间的另一示例是针对作业的输入参数的可能字母数字值范围。优选地,跨越命名空间的各密钥将也具有某种组织方法,以使得密钥可被描述成序列值范围。例如,这些密钥可以按数字、按字母、基于散列值、或以允许密钥范围基于将两个密钥指定为范围开始和范围结束来定义的任何其他方便的串行方式来组织。
[0023]“分区”是由低(包括性)和高(排他性)密钥限定的范围。分区永远不可能是空范围。如果需要的话,单个分区可包含域的整个范围。分区被定义成是互斥的,以使得两个不同分区的范围之间不存在交迭。所有分区的并将跨越整个域或命名空间。
[0024]“分区服务器”是云计算环境内与用于提供零个或更多个分区的角色实例相对应的虚拟机。分区并非在相同时间由一个以上的分区服务器来服务。然而,给定分区服务器可能不具有当前正由该分区服务器来服务的任何分区。分区服务器可包括用于执行各种动作的应用定义的接口和(由分区系统定义的)固定接口两者。
[0025]“分区主机”是诸如通过将分区分派给分区服务器和解除这种分派来管理针对给定类型的角色的分区服务器的角色。分区主机角色还诸如通过验证分区服务器仍服务于所分派的分区来监控这些分区服务器。通常,该角色对于容错性而言是冗余的。分区主机可包括用于执行各种动作的应用定义的接口和(由分区系统定义的)固定接口两者。
[0026]“应用定义的接口 ”指的是由客户机定义来供角色实例执行的计算、操作或其他功能。可以为分区主机或分区服务器角色创建应用定义的接口。应用定义的接口不同于分区系统的“固定接口”。固定接口指的是作为分区系统的一部分来提供的应用接口。客户机无法修改固定接口的动作。然而,应用定义的接口可结合固定接口被使用。例如,主机角色的固定接口可能每时间周期都会发送心跳消息,以验证正由主机角色管理的任何服务器的状态。服务器角色的相应固定接口可以是用于以恰当方式对该心跳消息作出响应的接口。应用定义的接口的示例可以是向心跳消息添加附加信息的接口,而另一示例可以是从心跳消息提取这样的附加信息的接口。在这样的情况下,心跳消息的发送本身是固定接口。用户或应用无法修改用于发送该消息的协议。然而,用于定义消息内容的接口可以被用户修改。用于补充心跳消息中的信息的接口的基本结构可以由该系统来提供。然而,由于客户机可以修改这个接口所提供的内容,因此在本文中这样的接口被定义成应用定义的接口。
[0027]作为另一示例,应用定义的接口可结合固定接口一起使用以提供负载平衡的总特征。用于将分区分派给分区服务器或将分区拆解成两个分区的接口是固定接口。然而,应用定义的接口可提供关于负载平衡动作应何时发生的表达,如在各机器之间改变分区分派,或判定何时拆解分区。
[0028]每一活跃分区主机角色或分区服务器角色具有控制与该角色相对应的数据的相应存储对象。存储对象的示例是二进制大型对象或团块。对于分区服务器,存储对象包括正被服务的各分区的身份。注意,分区服务器的存储对象通常不包含与该分区相对应的底层数据。通过仅存储分区身份而将底层数据留在分开的数据存储位置,可以用最小的数据转移将各分区从一个服务器移动到另一服务器。对于分区主机,该存储对象包括用于建立分区主机的特定实例是活跃实例的信息。存储对象可任选地还包括关于正由该主机来管理的服务器的所有存储对象的信息。在操作期间,主机和服务器角色可维护对相应存储对象的租用。当某角色的对存储对象的租用被中断时,相应的角色可被终止。
[0029]如上所述,给定类型的角色的分区主机优选是冗余的,使得如果发生故障,则至少一个附加分区主机可用。“命令器(dictator)”被定义成当前执行给定类型的角色的分区主机功能的分区主机。命令器是维护对与给定分区主机角色相关联的存储对象的租用的分区主机。
[0030]活跃分区主机(命令器)可经由心跳与分区服务器通信。基本心跳的类型为“保活”,并且总被使用。如上所述,应用定义的接口可用于向这个心跳信息添加可任选的命令和/或信息。
[0031]命名空间、密钥和分区
[0032]在各个实施例中,提供使得用户或应用可定义被自动分区以供在分布式计算环境中处理的计算的通用分区框架。为了利用该通用分区框架,用户可基于命名空间来定义计算。命名空间对应于可任选地对与命名空间相关联的数据执行的一个或多个计算或运算。用户定义的命名空间可具有如上所述的某些性质。只要命名空间具有必要的特征,通用分区框架将能够基于这些应用定义的接口来自动对该命名空间进行分区。该分区是仅使用该用户定义的命名空间及与该分区系统一起提供的固定接口来完成的。通过仅使用通用分区系统的固定接口来对命名空间进行分区,将这种分区从由用户提供的任何应用定义的接口中解耦出来,并从正在执行的计算的本性中解耦出来。
[0033]作业的命名空间或域可对应于针对将通过计算被操作和/或生成的一种类型的数据的整个范围的一组标识符。另外地或可替换地,命名空间或域可对应于可通过该计算被操作和/或生成的可能状态的列表或范围。又一选项是命名空间可对应于针对正在分布式环境中执行的计算的多个实例的一组标识符。计算的所有潜在命名空间或域都被标识出并不是必要的。相反,用户可标识出将用于进行分区的那些命名空间或状态。标识出的命名空间或域应跨越用户将期望使用给定角色来执行的计算的整体。这些计算的整体可通过跨越通过计算对其操作的数据集的整体、跨越该计算内的运算实例的整体、或以任何其他方便的方式来跨越。密钥可用于指定命名空间内的离散值或状态。密钥还可用于指定值的范围。由于密钥可用于指定范围,应理解,命名空间应包括某一类型的串行排序,以使得指定上限密钥和下限密钥将唯一地标识一范围。该排序可基于常规排序,诸如基于字母的排序。可替换地,该排序可以是任意的,诸如基于将值的列表包含在命名空间内的文件的串行次序。
[0034]除了定义命名空间(包括使用那个命名空间执行的任何计算)夕卜,用户还可提供与服务器角色相关联的一个或多个应用定义的接口。应用定义的接口表示分区服务器可执行的一个或多个任务或功能,这些任务或功能可任选地涉及一个或多个命名空间。服务器角色的应用定义的接口可包括在给定命名空间上执行的所有任务或功能,以使得不同的服务器角色不会尝试访问相同的数据或状态。可任选地,构想了:在一示例性方面,服务器角色还可包括子角色,以使得角色内的一些应用定义的接口与同一角色内的其他应用定义的接口相比在不同的命名空间上操作。在简单示例中,客户机可能期望执行涉及对数据集执行至少一种类型的运算的计算。在这种情况下,客户机可定义服务器的对该数据集中的被请求元素执行至少一种类型的运算的单个角色。该单个角色可表示与被配置成执行科学运算、对数据集执行一个或多个相关的数据挖掘函数、或执行任何其他方便的计算的角色实例相对应的一个或多个服务器。该计算和任何相关数据可被定义成用于执行该计算的命名空间的定义的一部分。此外,可为服务器角色提供一个或多个应用定义的接口,诸如用于向主机角色实例提供关于该计算的度量的应用定义的接口。服务器角色实例可基于向该服务器传递的密钥值来确定要对其进行操作的数据集的一个或多个元素。至少一个附加主机角色可管理这些服务器,包括向一个或多个服务器分派数据集分区。
[0035]基于命名空间,计算可被分区,以使得多个分区服务器处理或执行该命名空间的不同处理部分。每一分区对应于某一范围的密钥值。当分区被分派给分区服务器时,该服务器执行包含处于与所分派的分区相对应的范围内的密钥值的任何请求所期望的计算。分派给该服务器的分区不需要相对于命名空间的串行排序是连续的。
[0036]在通用分区环境中,分区表可用于跟踪各分区到各分区服务器的当前分派。当活跃主机或命令器向服务器分派分区时,可首先更新分区表以反映该分派。分区表可随后用于基于客户机请求中指定的密钥来确定将处理该客户机请求的分区服务器。可任选地,一个分区表可用于跟踪针对多个角色的分区分派,这与被分区的每一命名空间具有不同的分区表相反。作为示例,分区表中的条目可包括范围的低密钥、范围的高密钥以及将对与所请求的密钥相对应的数据或状态执行所请求的任务的角色实例或服务器实例。分区表还可包括其他数据,诸如时期号或版本号,如何以下更详细讨论的。
[0037]管理主机和服务器角色实例
[0038]在执行作业时,通常期望具有若干主机角色实例来提供冗余。然而,为了避免冲突,在给定时间仅一个主机角色实例可以是活跃主机。当存在多个主机角色实例时,这些主机角色实例将为了获得对与整个命名空间相对应的存储对象的租用而竞争。被授予该租用的主机角色实例变成活跃主机或命令器。此外主机时期号被存储在针对该主机角色实例的存储对象中。当主机变成命令器时,它递增该号码,将该号码写回主机角色存储对象,并随后使用该时期号来与相应的分区服务器进行通信。活跃主机实例或命令器还可获得对该分区表或该分区表的至少一部分的租用。分区服务器将忽略具有比已经看见的最高时期小的主机时期的心跳,由此避免来自不再是命令器的主机角色的陈旧心跳。
[0039]一个选项是使用分开的命令器资格库来经由存储对象租用实现命令器资格。具有分开的命令器资格库可提供若干优点,诸如允许在分区系统外部的角色实现冗余。这允许不涉及进行分区的角色使用相同的用于选择活跃主机角色的方法。
[0040]每一服务器维护对其自己的存储对象的租用。服务器存储对象名称一般在每次服务器接收到其首个分区分派时由主机生成。每一服务器还将其自己的当前分区分派(包括时期号的分区列表)存储在存储对象中。第三方可有力地终止服务器及其存储对象之间的租用。该功能性可被分区主机命令器用来以分区分派协议来中断服务器租用。
[0041]当具有主机角色的冗余实例在故障事件发生时允许改善的性能时,冗余实例还可潜在地由于陈旧更新而导致问题。陈旧更新指的是来自在先命令器的消息或指令在新命令器已被选择后被服务器或数据存储接收到的情况。陈旧更新的问题可影响在外部存储中维护状态的任何角色或代码段,其中到外部存储的消息可(例如,通过因特网)被延迟或重新排序,并该状态在该角色的故障转移之际从该存储读出。
[0042]作为示例,考虑分区主机(命令器)在更新针对该角色的分区表的过程中故障转移的情况。首先,旧主机发起对分区表第“X”行的更新。旧主机随后停止工作。该主机的冗余实例被选为新命令器。该新活跃主机使用分区表的第“X”行来更新、读取或以其他方式执行动作。随后,来自旧主机的更新在由新活跃主机执行的对第“X”行的动作之后通过。如果来自旧主机的更新被合并在分区表中,则该更新将导致该分区表改变,而无需新(当前)主机知晓该改变。这可导致分区表的非一致状态。
[0043]在以上示例中,该问题的一种解决方案是以某种方式阻挡来自旧主机的陈旧更新。一个选项是还允许分区主机获得对该分区表的各部分的租用。对主机的租用可对应于与给定命名空间相对应的表中所有分区。可使用用于指定租用范围的任何常规方法。例如,如果期望的话,租用可仅跨越分区的一部分和/或可跨越多个分区。当新命令器被选择时,主机仍将为了经由租用获得命令器资格而竞争,其中时期号被提供,以使得各服务器可阻挡陈旧更新,诸如陈旧的心跳消息。此外,主机命令器还可在构建分区表的状态时读该表之前获得对该分区表(该分区表的相关部分)的租用。
[0044]更一般地,主机和服务器两者都可使用该租用机制通过在该主机或服务器被分派来处理数据结构时获得对团块、表格和/或其他数据结构的租用来避免陈旧更新。当该主机或服务器诸如由于故障转移或主机改变分派的显式请求而不再被分派到数据结构时,该租用被释放。
[0045]对于主机和服务器之间的通信而言陈旧更新也是令人关注的问题。处理来自旧主机的消息可例如通过使主机在其变成命令器时获得时期号来避免。该时期号在每次命令器资格故障转移时增加。该时期号可在每个服务器心跳和/或其他消息上从主机传送到服务器。服务器可忽略具有比该服务器看见的最高时期号更低的时期号的任何心跳。这个高水印时期号可以以该服务器的软状态来存储。如果主机和服务器也正经由存储对象租用传达状态,则以上方法可能足以避免陈旧消息问题。可替换地,也可使用用于避免主机和服务器之间的陈丨H消息的其他常规解决方案。
[0046]类似的时期号方法可被用于每一范围分区,以避免来自先前分派的服务器的陈旧更新。例如,每一分区可具有由主机在该分区发生改变时更新的当前时期号。分区改变的示例包括将分区分派给新服务器、拆分分区及合并两个分区。将分区分派给新服务器可导致时期号增加I。将分区拆分成两个或更多个新分区可导致每一子分区接收递增了 I的父分区号。当合并两个分区时,经合并分区的时期号可以是在合并之前这些分区中的任何一个的最大时期号递增I。可替换地,也可以使用用于跟踪分区的时期号的递增的任何其他常规方法。
[0047]作为可如何使用分区时期号的示例,考虑具有分区主机、两个分区服务器SI和S2及第三服务器X的系统。第三服务器X可以是例如包含由分区主机和服务器SI和S2操作的命名空间的实际数据集的数据服务器。服务器SI和S2发出给X的命令(或其他消息)。假定消息可以诸如由于前端对X的处理而在从SI或S2到X的路上被延迟。除非X保持为给定范围分区跟踪所看见的最高时期,否则容易明白陈旧消息可如何被X接受。例如,具有时期3的分区P最初由服务器SI来服务。SI可向X发送消息Ml。消息Ml包含对应于分区P的密钥以及时期号3。分区主机随后将分区P从SI移动到S2。在分派后,S2将包括新时期号的消息M2发送给服务器X。X在接收消息Ml之前先接收消息M2。这使Ml变得陈旧。X随后接收陈旧消息Ml。通过跟踪时期号,服务器X可认识到陈旧消息Ml来自不再负责分区P的服务器。
[0048]为了进一步避免陈旧更新的可能性,可使用时期验证库。时期验证库验证接收的消息不是陈旧的。例如,当服务器从新命令器接收消息时或接收关于新分区范围的请求时,该服务器可检查时期验证库以验证该消息包含该主机或分区的当前时期号。
[0049]图4示出了角色、分区和密钥之前的关系的示意图。在图4中,用户405提交对期望数据片段执行动作(诸如,访问用户账户中的信息)的请求。该数据通过密钥来标识。客户机请求和密钥被传递至处理客户机或用户405所作出的这种类型的请求的角色420。角色420包括定义该角色如何处理给定类型的请求的客户机库430。基于请求的类型和密钥,角色420咨询分区表455来寻找处理与该请求中的密钥相对应的密钥范围的当前服务器。分区表455中的信息是基于由分区主机460作出的分区判决来填充的。分区主机460在图4中被示为多个潜在分区主机之一。附加的潜在分区主机用于冗余目的,并且在被需要前不是活跃的。在图4的示例中,多个分区服务器465可用作用于执行从角色420请求的任务的角色实例。基于分区表455,多个分区服务器465中的分区服务器N正在处理与客户机请求中的密钥相对应的密钥范围。
[0050]通用分区框架示例
[0051]图5示出根据本发明的用于提供通用分区框架的模块和/或接口群组的示例。图5还显示了可利用通用分区环境的、用于提供计算作业的应用定义的接口的示例。在图5中,虽然密钥或命名空间是由用户或应用提供的,但用于对命名空间进行分区的接口是由分区系统提供的固定接口。这将对命名空间进行分区从执行对与命名空间相对应的数据进行操作的作业或工作项中解耦出来。
[0052]在图5中,存在由用户提供或指定的至少两种类型的组件或接口。用户提供对密钥510(和相应的命名空间)的定义以及用于应用的多个服务器接口 520。如上所述,密钥描述了应用的命名空间。这允许分区系统知道用于潜在分区的变量、状态和/或计算的范围。除了定义密钥外,用户还提供与该密钥相关的至少三个接口。与该密钥510有关的接口提供串行化命名空间中的各密钥、取消密钥的串行化以及比较两个密钥的功能。由于用户选择命名空间和密钥值,这些接口的操作不是作为分区系统的固定接口来提供的。与密钥和命名空间有关的接口改为被用户作为应用定义的接口来提供。
[0053]用户还提供由服务器角色实例使用的应用定义的接口 520。服务器角色实例520的应用定义的接口包括关于在服务器接收对密钥进行操作的请求时服务器将执行哪些操作的功能。例如,针对开始服务密钥范围(StartServeKeyRange)的接口可定义在服务器开始服务于给定密钥范围时该服务器可执行的一个或多个操作。针对停止服务密钥范围(Stop ServeKeyRange)的相应接口可允许服务器以有序方式终止服务于某密钥范围。此外,可能期望从服务器收集信息。诸如在接收到心跳请求时(OnReceivedHeartbeatRequest)之类的接口可定义服务器将如何从接收自当前分区主机的心跳消息中提取附加信息。诸如在发送心跳响应之前(BeforeSendingHeartbeatResponse)之类的另一接口可定义服务器将把什么作为附加信息包括在对心跳消息的响应中。这可允许例如服务器将负载信息传达给分区主机以供在负载平衡时使用。
[0054]如果用户将附加功能或信息作为心跳(或其他消息)交换的一部分来包括,则该用户还可提供针对主机角色530的用户定义的接口。针对主机角色530的用户定义接口是针对主机角色的固定接口的补充,示意性地示为GP主机535。针对主机角色530的用户定义的接口并不是必需的。
[0055]在图5中示出的实施例中,通用分区环境由固定分区系统接口的五个模块和/或分组来启用。这些模块和/或分组包括被示为GP客户机(GPClient)模块515、GP服务器(GPServer)模块 525、GP 主机(GPMaster)模块 535、GP 命令器(GPDirector)模块 536 和GP租用(GPLease)模块545的一部分的固定接口。当然,还可以使用安置图5中示出的这些模块、接口和/功能的其他方式。
[0056]图5中示出的GP客户机模块515具有允许从客户机应用或用户599指定的密钥到将处理用户请求的服务器的地址的转换的接口。GP客户机模块515的接口通过质询分区图或分区表559来执行这一查找。GP客户机模块接口可随后例如向客户机应用599返回与密钥相对应的服务器地址,以使得客户机应用可将请求导向正确的服务器。
[0057]GP服务器模块525具有与应用定义的接口 520结合用于执行所需用户任务的接口。GP服务器模块525包括用于在主机角色实例和服务器角色实例之间的通信的接口。GP服务器模块接口也与GP租用模块545的接口通信以管理租用对象并租用与每一服务器角色实例相关联的内容。
[0058]GP主机模块535为核心功能提供用于管理主机角色实例的接口。GP主机模块535的接口处理命令器在各主机角色实例中的选择、命令器和服务器角色实例之间(诸如经由心跳消息)的通信以及分区管理。分区管理可包括向分区表559提供更新。对于负载平衡,GP主机模块535的接口可使用内部算法来执行负载平衡,或者GP主机模块可接收由用户作为应用定义的接口来提供的替换负载平衡表达560。可任选地,由GP主机模块535处理的消息收发功能可通过一个或多个分开的消息收发接口来执行。
[0059]GP命令器模块536提供处理与将用作命令器的主机角色实例有关的功能的接口。GP命令器接口可处理:主机角色实例(诸如在由GP主机模块535进行的选择中赢得命令器资格后)要求命令器资格、主机角色实例(诸如在故障转移后)释放命令器资格、以及主机角色实例处理顺序或时期号的改变以便避免陈旧更新。
[0060]GP租用模块545提供管理通用分区环境中的租用的接口。这可包括允许主机或服务器获得对相关联的存储对象、对分区、或对可获得租用的任何其他类型的数据结构的租用。
[0061 ] 基本主机/服务器管理协议
[0062]分区主机可与分区服务器进行通信的一种方式是经由规律发送的保活(“查验(ping)”)心跳。该心跳可被发送给所有服务器,包括不服务于任何分区的服务器。服务器可以用服务器当前服务于的分区的列表来对该保活心跳(或其他类型的心跳消息)作出响应。心跳响应可以与服务器分区租用结合用于允许主机验证服务器正服务于正确的分区。当服务器服务于一个或多个分区时,该服务器还维持对其自己的私有存储对象(诸如,二进制对象或团块)的租用。当服务器启动时,它不保持任何租用——该服务器将仅在初始分区分派之际才保持租用。存储对象租用还应包括由服务器服务的分区的列表。如果心跳响应或存储对象租用中的信息与主机预期的分区信息不同,则出现分区信息中的冲突。
[0063]如果在主机和服务器之间发生关于正被服务的分区的冲突,并且如果服务器正尝试服务于一个或多个分区,则该冲突被认为是致命错误。作为示例,主机可认为服务器正服务于Pl和P2,而服务器向P2、P4和P5报告。在这种情形下,主机将中断服务器对相应的分区服务器团块的租用。主机随后将发出警报,并重构分区表的适当状态。这可涉及终止主机,以使得适当状态在重启该主机后被重构。
[0064]当主机和服务器不同并且服务器报告没有分区被服务时也有冲突。然而,这不被认为是致命错误。这可在例如服务器在两次心跳之间进行了故障转移的情况下,或者在服务器在一次或多次心跳期间停机同时仍“保持”该租用并且随后该服务器重启并对下一心跳作出响应的情况下发生。当发生关于服务器报告没有分区被服务的冲突时,分区主机可尝试删除服务器的存储对象。如果成功,则任何分区可被重新分派给其他可用服务器。然而,如果对服务器的先前实例的租用尚未期满,则删除对服务器的存储对象的租用可能失败。因此,重试该删除达租用时段可能是必要的。在一个租用时段后未能删除存储对象是致命错误,该致命错误可被如上所述的那样处理。在主机重启时,它将在继续分区分派之前确保所有未知存储对象被删除。
[0065]另一潜在的失败情形是当服务器保持租用,但该服务器在某一超时时段内没有对心跳(诸如,保活)作出响应。再次,主机可尝试删除服务器的存储对象以解决该冲突。如果存储对象被成功删除,则该服务器不再发挥作用。该服务器服务于的任何分区可被重新分派给其他服务器。如果存储对象无法被删除,则主机可读取存储对象内容以检查主机和服务器之间关于分区分派的冲突。如果不存在冲突,则服务器可继续服务,并且主机可尝试立刻经由正常的心跳处理来再次“查验”服务器。优选地,存在主机中断服务器对存储对象的租用之前该主机多久无法经由心跳与服务器进行通信的限制。如果检测到冲突,则可如上所述的那样处理该冲突。
[0066]对于分区分派,主机将该心跳上的分区分派请求驮运(piggy-back)至相关的分区服务器(在该情况下,心跳被加速)。分区分派请求由服务器存储对象名称以及要被服务的分区的全新列表组成。例如,为了将分区P2分派给当前服务于Pl的服务器,该分区分派由Pl和P2两者组成。这使得解除分派与分派互不相关:将Pl从服务于Pl和P2的服务器处移除,只发送仅由P2组成的分派。在分区分派发生时,主机已经更新了分区表。分区表仅在分区被分派给服务器时(之前)被更新;在分区从服务器处移除时,不需要更新。
[0067]分区服务器维持在第一分区被分派给该服务器时开始的存储对象租用。存储对象租用被维持,直到服务器不再工作或主机诸如由于在分区表中的服务器的分派信息和服务器向主机报告的分派信息之间的冲突而迫使该租用中断。存储对象名称与分区分派一起被传递。所有后续分区分派将包含同一存储对象名称。当服务器接收分区分派时,没有现有存储对象名称的服务器将获得在分区分派中提供的存储对象名称。如果服务器已经有具有名称的存储对象,则服务器可将请求中提供的名称与现有名称进行比较。如果这些名称不同,则服务器可发出警报并终止,因为不同的名称指示分区分派信息中的冲突。在接收到分区分派后,服务器可将任何相关联的信息写入用于该服务器的存储对象。相关联的信息可包括例如要服务的密钥范围、命令器的时期号、和/或分区的时期号。服务器可随后对提供该分区分派的主机作出响应、开始服务于任何新分区、并停止服务于任何移除的分区。
[0068]在分区分派之后,主机角色实例将预期来自服务器的确认该分派的响应。如果该响应不匹配该分派,或者如果该响应被延迟,则主机角色实例可终止对该服务器的租用。可替换地,主机角色实例可调查服务器的团块,以确定服务器状态。例如,如果服务器的存储对象指示该分派已成功,并且如果该响应只是被延迟或丢失而不是不正确,则该主机角色实例可等待以查看该服务器是否正确地对后续心跳或其他消息作出响应。如果发现了错误并且主机无法中断对该服务器的存储对象租用,则主机可终止以迫使用新主机角色实例来重构分区图。
[0069]此外,服务器角色实例可提供关于它正服务于的每一范围(S卩,分区)的统计数据。该统计数据对通用分区系统而言是不透明的,并且可被表示成名称/值对的特性包。这些可选统计数据可被合并在负载平衡公式中,包括由用户提供的负载平衡公式。
[0070]当主机变成活跃主机或命令器时,它首先从它正保持租用的存储对象处获得新时期号。它随后收集三段信息,以便构建其对该系统的视图,并纠正任何不一致的信息。首先,主机读分区表。该分区表包含关于存在哪些分区的真相。优选地,主机在读分区表之前获得对分区表的至少相关部分的租用,以便防止前主机作出的陈旧写。接着,主机获得所有现有服务器存储对象的列表。这可通过维护服务器存储对象列表、通过要求所有服务器存储对象位于特定位置、或通过另一常规方法来完成。心跳或另一类型的消息也用于就服务器的当前分区分派向每一服务器进行查询。该查询可包括对服务器的存储对象的名称的查询。注意,以上任务可并行继续。
[0071]基于收集到的信息,主机可标识出分区表中的分派和由每一服务器报告的分派之间的任何不一致。如果存在失配,可采取一个或多个纠正动作,诸如中断服务器对服务器对象的租用并重启主机。此外,如果标识出分区表中未提到的任何服务器存储对象,则可删除这些存储对象。最后,可使分区表中服务器未确认的任何分派排队以供分派给新分区服务器。在解决这些冲突后,主机可启动正常的心跳处理、分派分区以及任何其他主机功能。
[0072]负载平衡
[0073]负载平衡可被大致划分成三种活动。负载平衡可包括将分区从一个服务器移动到另一服务器、将一分区拆分成多个分区、或将多个分区合并成单个分区。通常,将分区分派从第一服务器改变到第二服务器将是对基于一个或多个度量第一服务器具有足够高的负载的响应。如果单个分区考虑大量负载,则拆分该分区可用于允许大型负载在多个服务器之间划分。合并分区允许具有较低活动量的分区被组合。这减少了跟踪和维持数据集的各种分区所需的开销。可任选地,用户可定义命名空间的分区数的上限。用于发起分区合并的阈值可被降低成接近该上限的分区数。该分区数的上限可被动态配置。
[0074]作为确定何时拆分或移动分区的示例,命名空间的所有分区可基于负载来排序。负载可指的是与执行用于分区的计算相关的一个或多个度量。因此,负载可指的是服务器或个体分区的总CPU用量;用于服务器或分区的存储;被整个服务器接收到的或针对单个分区的请求的数目;或指示正被服务器执行的和/或针对给定分区的工作量的任何其他方便的值。基于该负载,具有比平均分区负载的可配置倍数高的负载的前N个分区可被拆分。N是可动态配置的。例如,它可以是系统中的当前分区数的函数,诸如基于该当前分区数的对数,或者它可以是系统中的最大可允许分区数的函数。另外地或作为替换,每一服务器的负载是通过将服务器的分区负载加在一起来计算的。这些服务器可随后依据负载来排序,并且具有比平均数的某个可配置倍数大的负载的前N个服务器被选择来在服务器间移动分区。类似地,具有小于平均负载的负载的多个服务器被选为从较高负载服务器处接收分区。优选地,将分区从第一服务器移动到第二服务器被执行来将第一服务器的负载降低到较接近平均负载的值,而不会导致第一服务器的负载小于平均负载。这在所有分区具有相当类似的负载的情况下较容易完成。如上所述,拆分分区可用于降低各分区之间的负载的差另1J。
[0075]如上所述,分区的负载可以从由服务器角色实例收集的统计数据中导出。该信息是以规律间隔诸如经由心跳消息被传递给主机角色实例的。优选地,定义负载统计数据,使得负载度量是可加性的。这允许服务器的负载基于将该服务器上的各个体分区的负载相加来确定。用于确定分区和/或服务器的负载的一个或多个公式可被存储在分开的团块或其他存储区域中。用于进行分区的规则或表达可以是由通用分区环境提供的默认规则,或者用户可提供规则和/或表达。此外,构想了表达还可包括由应用使用GP系统提交的一段代码。
[0076]对于由用户提供的负载平衡规则和/或表达,用户可首先标识所需的一个或多个度量作为负载平衡度量。合适度量示例包括CPU用量、网络带宽用量、每时间段处理的请求数、或任何其他方便的度量。一些度量可以是一分区专用的,而其他度量可以对应于分区服务器上的所有分区的值。基于所需度量,用户随后在每一服务器上提供用于收集所需度量的一个或多个接口。可任选地,可以提供诸如CPU用量或每时间段的请求数之类的常见度量作为仅由用户访问的标准接口。随后使用消息(诸如,被服务器用来向主机验证服务器的当前状态的心跳消息)将收集到的度量从分区服务器传递到相应的主机。
[0077]对于用户标识出的每一度量,可计算出由通用分区系统来识别的一系列值。作为示例,通用分区系统可将“维度”识别为用户定义的变量。通用分区系统中的维度可具有预期格式。该维度可包括分区度量(Partit1n Metric)的表达,该分区度量对应于涉及一分区的度量的值。另一表达可针对服务器度量(Server Metric),该服务器度量对应于涉及服务器上的所有分区的度量的值。又一表达可针对定义采取动作的情形的度量的条件(Condit1n)值。
[0078]在简单情形下,CPU用量可被用户定义成维度。在这个示例中,CPU用量维度用于确定服务器何时足够繁忙以致分区应该被移动到另一服务器。在该用户定义的维度中,虚拟机上专用于处理对给定分区的请求的CPU用量百分比被定义为分区度量。涉及虚拟机上的所有分区的CPU用量百分比之和可被定义为服务器度量。在这个示例中,该条件可被定义成大于总CPU用量的80%的服务器度量用量。当这个条件发生时,分区可被移动到另一服务器。要移动的分区是基于分区度量来选择的。注意,分区度量和服务器度量两者都由用户定义。因此,用户不需要具有与服务器度量类似的分区度量。例如,服务器度量可以是(PU用量和网络带宽用量的组合,而分区度量仅与请求率有关。
[0079]除了定义用于重分派分区的维度外,用户还可定义用于触发分区拆分的维度。用于触发分区拆分的维度的定义可以与用于重分派分区的维度相似,或者可使用不同的维度格式。例如,服务器度量表达对于用于触发分区拆分的维度而言可能不是必须的,因为分区度量表达对于确定何时拆分分区而言将可能更有用。此外,用于触发分区拆分的维度可包括关于在拆分分区的条件满足时如何拆分该分区的维度。注意,用于触发分区拆分的维度可能对标识何时合并两个分区也有用。作为替换,用户可定义分开的用于分区合并的维度。
[0080]更一般地,可为确定负载平衡动作何时应发生指定任何方便数目的条件。这些条件可以与对应于一个或多个维度的度量(诸如,对应于多个维度的度量)合并。这些条件可被排序,使得以用于执行负载平衡的特定次序来对这些条件进行求值。例如,与用于将分区移动到不同的分区服务器的条件相比,与拆分分区有关的条件可被置于该次序中的更早处。在这样的示例中,如果分区服务器上的一个分区负责该负载的较大百分比,则移动其他分区可能不会对在多个服务器间进行负载平衡有效。通过首先检查是否要拆分分区,导致该问题的分区可被拆分成(可能)具有较少负载的各部分.类似地,较早地以条件的排序合并各分区可能是合乎需要的。例如,具有大量小负载分区的分区服务器可能由于过多的分区而看上去不可用,即使服务器上的总负载低于平均值。在移动分派之前合并分区允许这样的服务器变得对接收附加分区分派可用。
[0081]当指定用于发起负载平衡活动的条件时,任何方便类型的度量可被包括在一条件中。因此,可按需一起或分开使用针对单个分区上的负载、多个分区上的负载、一服务器上的负载、或多个服务器上的负载的度量。对于与多个分区或多个服务器有关的度量,简单示例是确定跨所有服务器的负载以便定义平均负载。因此用于执行负载平衡的条件可以与服务器上的负载对照平均服务器负载之间的差异(诸如服务器负载的绝对值对照平均负载中的差异、或服务器负载与距平均服务器负载的标准偏差的比较)相关。在使用多个分区负载时,考虑关于服务器上的各最高加载分区相对于彼此的数目的负载可能是合乎需要的。与仅具有一个高负载分区的分区服务器相比,所需的负载平衡动作对于具有含类似负载的多个分区的分区服务器而言可能是不同的。
[0082]除了定义用于分区重分派、拆分和合并的维度外,用户还可定义用于基于这些维度来约束对分区的动作的一个或多个过滤器。例如,在服务器具有多于70%的CPU用量服务器度量(ServerMetric)或分区数大于10时,防止服务器接收新分区分派可能是合乎需要的。可以定义防止这样的分派的分派过滤器(Assignment Filter)值。潜在过滤器的其他示例包括用于防止从现有分区服务器移走分区、用于防止拆分分区、或用于防止合并分区的过滤器。取决于过滤器类型,过滤器可防止负载平衡动作发生。作为替换,过滤器可以修改考虑条件的次序,或者该过滤器可导致在负载平衡计算周期期间完全忽略一条件。
[0083]作为示例,考虑其中所有服务器请求消费相同量的资源的假想系统的情况。在这样的系统中,合理的负载度量可基于请求率。在这个示例中,每一服务器角色实例收集请求率在较长时间段内的平均值(RR_SlowMA)以及请求率在较短的时间段内的平均值(RR_FastMA)。这些请求率平均值作为性能包中的名称/值对被传送回主机角色实例。随后,简单的负载度量可被定义成负载平衡规则中的公式,为分区度量=max (RR_FastMA, RR_SlowMA)。该维度“负载”的左手侧的分区度量对应于由分区系统中的主机组件识别出的标识符。在这种情况下,维度“负载”将被用户预先标识出。右手侧可以是生成向分区度量分派的负载值的任何任意表达。在这种情况下,该负载对应于基于多个移动平均数之一的请求数。基于该分区负载(Partit1n Load)值和/或其他值,可定义关于分区是否应该被拆分、合并或在服务器之间移动的一个或多个条件。
[0084]更一般地,用户可定义用于作出负载平衡决策的度量和表达(诸如条件)的任何组合。由用户定义的用于作出负载平衡决策的表达还可包括条件逻辑和/或支持多维度约束/优化目标。因此,用户可定义决策树或使用其他条件逻辑来提供关于如何及何时对表达进行求值的排序。例如,用户可使第一表达被求值,并随后基于第一表达的值在多个潜在的附加表达中选择以进行求值。这可基于“if-then-else (如果-则-否则)”类型的条件逻辑、基于所确定的值的下一表达的查找表、或者任何其他方便类型的条件逻辑。结果,用户具有指定供在负载平衡中使用的度量和表达的类型的灵活性,包括给定表达是否被求值以及提供用于对这样的表达进行求值的次序。注意,各表达的求值次序还可基于之前已求值的表达的值来动态地确定。
[0085]由用户定义的用于作出负载平衡决策的表达的另一示例可包括多维约束/优化目标。例如,用户可定义多个维度(例如,两个),并且对于每一维度,用户可定义分开的优化目标或约束。CPU利用率和请求等待时间是两个示例性维度。用户可指定规则,使得分区服务器的CPU用量低于第一阈值(例如,90% ),并在同时最小化跨所定义的分区服务器集合(例如,所有分区服务器)的平均请求等待时间。该方法可不同于其中用户明确指定要做什么的if-then-else类型的逻辑。在这个模型中,用户定义限制和优化目标,这些限制和优化目标允许系统自动寻找到解决方案。
[0086]在另一假想系统中,用户可提供多个条件或表达来进行求值。这些表达基于针对服务于给定命名空间的分区服务器的各种CPU用量度量。第一表达对是否有任何分区服务器具有与大于60%的命名空间有关的CPU用量进行求值。对于这个用户,如果没有CPU具有大于60%的用量,则该用户不需要负载平衡。因此,如果第一表达的结果为假(即,没有分区服务器具有大于60%的CPU用量),则进一步的表达都不被求值,因为不需要进行负载平衡。如果至少一个分区服务器具有大于60%的CPU用量,则一系列表达可随后被求值以确定要执行的负载平衡动作。
[0087]在负载平衡导致移动分区的情形中,可通过使该主机角色实例发出两个分派请求来将分区从第一服务器移动到第二服务器。给第一服务器的分派请求不包括该分区,其导致第一服务器停止针对该分区的服务。给第二服务器的第二分派请求包括该分区。
[0088]在分区被拆分成两个或更多个分区的情形中,主机角色实例可通过确定拆分密钥来发起拆分,该拆分密钥对应于将形成新分区之一的包括性范围的结束的密钥值。拆分密钥可以按任何方便的方式来选择。主机或服务器角色实例可基于该分区(诸如通过选择在该分区的范围中间处或附近的密钥值)来选择拆分密钥。作为替换,服务器可基于关于该分区的附加统计数据来选择拆分密钥。例如,基于采样的桶机制可用于以与确定该整个分区的负载类似的方式来跟踪该分区的各个部分的负载。随后,拆分密钥可被选择,以使得该负载对于向新分区分派的桶而言是类似的。
[0089]在给定角色内,(活跃)主机负责将负载散布在各分区服务器上。优选地,主机将防止一个或多个服务器变得过载,并由此无法处理请求。在替换实施例中,对负载的调整可通过保持每服务器一个分区/范围并调整这些范围来完成。通过不是移动分区,可执行对负载的调整同时影响较少数目的服务器。
[0090]具有最小的每服务器分区数以使得负载可经由分区重分派被平滑地到处移动通常是合乎需要的。当分区数降到最小等级时,不执行其他合并器。类似地,避免具有太多分区通常也是合乎需要的。随着接近服务器的最大分区数,合并分区的可能性可增加。作为示例,维护每服务器5到8之间个分区可能是合乎需要的。当然,本发明的各实施例可与每服务器任何数目的分区一起工作,诸如从少至每服务器I个分区到每服务器成百个或更多个分区。
[0091]优选地,拆分和合并协议两者都是无状态的。主机或相关的服务器可在任何时间进行故障转移,而不会导致分区系统的错误。换言之,如果主机或服务器在拆分或合并过程期间失效了,则下一主机或服务器将能够构造分区分派的有效列表,而不管该失效何时发生。在无状态的拆分协议中,不要求参与服务器执行拆分动作中的任何一个。作为示例,分区表可包括服务器SI上范围从低密钥值D到高密钥值H的分区。在这个示例中,该分区的时期号为2。基于用户定义的负载平衡等式,确定该分区应该被拆分,以使得该分区的部分可被分派给另一服务器。主机角色实例问服务器SI要拆分密钥。服务器SI返回密钥G作为拆分密钥。主机随后修改分区表。代替以上提到的单个条目,该表现包含两个分区。一个分区具有低密钥值D和高密钥值G,而第二分区具有低密钥值G和高密钥值H。如上所述,基于低密钥值和高密钥值的分区范围定义包括该低密钥值并排除该高密钥值。分区表的改变可通过以下方式发生:修改现有条目并添加新条目、移除现有条目并添加两条新条目、或任何其他方便的方法。
[0092]在下一心跳周期处,主机检测到由服务器SI服务的分区和分区表中的信息之间的冲突。由于拆分刚发生,因此主机不会终止服务器Si的团块租用。相反,主机向服务器SI发送具有分区范围D到G和时期号3的分派。这修改了 SI处的分区分派以匹配分区表中的经拆分分区之一。在从服务器SI接收到对新分派的确认后,主机可向另一服务器分派第二经拆分分区。第二经拆分分区也将具有时期号3。作为替换,两个经拆分分区最初都可被分派给服务器SI,其中一个或两个分区在稍后的时间被移动,以执行负载平衡。
[0093]合并两个分区也可以按无状态的方式来处理。在合并分区时,作为初始步骤,从当前服务器中解除用于合并器的各分区的分派。例如,服务器S2上的第一分区可具有低密钥值K和高密钥值M。在该示例中,第一分区的时期号为7。服务器S4上的第二分区可具有低密钥值M和高密钥值N。在该示例中,第二分区的时期号为9。作为初始步骤,可将这些分区从其相应的服务器中解除分派,使得该分区表示出该服务器的未被分派的值。两个分区条目可随后被具有低密钥值K和高密钥值N的单个条目代替。向这个分区分派的时期号是大于经合并分区的最高值(在该示例中该最高值对应于10)的一个时期号。该新分区随后可被分派给服务器。
[0094]其它示例
[0095]为了提供用于描述本发明的上下文,提供了组织分布式网络或云计算环境中的计算资源的示例。以下对云计算环境的描述是作为说明性示例来提供的。本领域的技术人员将意识到所要求保护的发明可结合分布式网络环境以及替换类型的组织来使用。以下定义被用在说明性示例中。
[0096]“客户机”被定义成发出由应用定义的接口对命名空间或域执行动作的一个或多个请求的角色。客户机可对应于用户或对应于代表用户发起的过程。例如,查找特定账户的请求对应于涉及以下应用的请求:用于相对于具有与所需账户相对应的密钥的所有账户的域作出的账户查找的应用。
[0097]“工作项”是要在云计算环境中运行的作业的静态表示。工作项可以指定作业的各个方面,包括作业二进制代码、指向要处理的数据的指针、以及可任选的启动用于执行该作业的任务的命令行。此外,工作项可以指定重现时间表、优先级和约束。例如,工作项可指定在每天下午5点启动。
[0098]“作业”是工作项的运行实例。作业包含携手执行分布式计算的任务集合。这些任务可在云计算环境中的一个或多个虚拟机上运行。
[0099]“任务”是作业的基础执行单元。每个任务都在虚拟机上运行。用户可以为每个任务指定给命令行的附加输入以及到输入数据的指针。在任务的执行过程期间,该任务可以在其在执行该任务的虚拟机上的工作目录下创建文件的分层结构(hierarchy)。
[0100]云计算环境的用户通常希望使用云计算资源来执行作业。这些作业通常涉及对存储在可经由云计算环境来访问的各位置中的数据执行作业。供运营者提供云计算环境的一种方式是将该环境作为多个层来提供。图1示意性地示出适于执行云计算环境中的任务的系统的示例。图1中的系统包括任务运行时层110、第三方任务运行时层120、资源管理层130以及调度和执行层140。
[0101]在图1中示出的实施例中,任务运行时层110负责为来自用户105的任务设置执行环境以及安全上下文。任务运行时层110还可启动任务并监视任务的状态。任务运行时层110可采用在每个虚拟机上运行的系统代理的形式。该任务运行时层还可包括链接到用户的任务可执行代码的运行时库。具有作为任务运行时层110的一部分的运行时库可潜在地向由该系统代理执行的任务提供更丰富的能力。运行时库的示例包括:用于允许任务间的快速通信的一个或多个高效通信库;用于从其他虚拟机和/或其他任务读取文件的高效远程文件访问库支持;用于允许任务进行检查点(例如,进入到二进制大对象中)和恢复的检查点库;日志记录库;以及用于提供跨虚拟机池内的执行给定任务的虚拟机使用的分布式文件系统的库。
[0102]第三方运行时层120允许附加的运行时被构建并在任务运行时层110之上运行。第三方任务运行时层120还可提供用于协调作业的各任务的运行的附加能力。示例可包括属于用于提供要跨执行虚拟机池内的给定任务的各虚拟机使用的分布式文件系统的库的MapReduce (映射减少)运行时。这允许用户按针对用户的作业或任务定制的方式组织云计算环境。在一些实施例中,作业管理器任务可促成允许用户使用第三方运行时层来运行和/或控制云计算资源。
[0103]资源管理层130涉及管理云计算环境中可用的计算资源。一个选项是使资源管理层130以三个不同的层级管理这些资源。在第一层级,资源管理层130管理与作业(S卩,工作项的执行)相关联的虚拟机的分配和解除分配以及存储在每个虚拟机上的与任务相关联的文件。在第二层级,将与作业相关联的虚拟机分组成各机器池。池可包含与一个或多个作业和/或工作项相关联的虚拟机。取决于该实施例,单个池可跨越多个虚拟机群集,诸如一数据中心中的所有虚拟机群集、跨一地理区中的多个数据中心的多个虚拟机群集,或跨多个地理区中的各数据中心的多个虚拟机群集。单个池可包含大量虚拟机,诸如数百万的虚拟机。所述虚拟机可被包含在大量的池中,诸如多达数十亿个池中。在第三层级,资源管理层管理给定池群组中可用于与各作业或工作项关联的虚拟机的量。这允许对基于系统的当前负载使用的计算资源的量进行动态调整。此外,未被当前池群组使用的虚拟机可被释放回云计算环境以供并入其他池群组。
[0104]在图1中示出的实施例中,调度和执行层140管理用户正执行的工作项、作业和任务。调度和执行层140做出调度决策并且负责启动作业和任务以及在故障时重试。这种调度和执行层140可包括用于以各个层级管理作业和/或任务的组件。
[0105]以上描述的层可以在多个地理位置处包括处理器的云计算环境中实现。图2示意性地示出不同位置处的处理器可如何被集成在单个云计算架构中的示例。
[0106]在图2中,一个或多个任务承租者215可被用来管理虚拟机池。任务承租者215可维持一组虚拟机。一个或多个用户的作业可在任务承租者215内作为一个或多个虚拟机池的一部分的虚拟机上运行。一个或多个任务承租者215可在给定地理区域中使用。任务承租者215的责任可包括维护该组虚拟机并基于该任务承租者内的资源利用来动态增长或收缩该任务承租者。这允许任务承租者215增加任务承租者内的虚拟机的数量以便容纳增加的顾客需求。这还允许任务承租者215释放未使用的虚拟机以便所述虚拟机能够被分配给数据中心中的处理其他顾客的服务的其他托管服务。任务承租者215的另一责任可以是实现池分配/解除分配/管理逻辑的一部分。这允许任务承租者215参与确定如何将虚拟机分派给与顾客的任务相关联的池。任务承租者215还可负责在该任务承租者内的各虚拟机上调度和执行任务。
[0107]在图2的实施例中,提供了控制多个任务承租者215的一个或多个任务位置服务225。此多个任务承租者可对应于给定地理区中的所有任务承租者、来自整个世界的各个任务承租者、或任务承租者的任何其他方便的分组。在图2中,示出了服务于被标记为“美国北部”和“美国南部”的区域的任务位置服务225。任务位置服务225的责任可包括管理该给定地理区域的任务帐户。任务位置服务225还可提供用于允许用户与该云计算环境交互的应用编程接口(API)。这些API可包括与虚拟机池、池管理逻辑、以及跨越给定地理区域中的任务承租者的池管理逻辑的协调相关联的处理API。这些API还可包括用于处理用户所提交的任务、以及用于维护、调度以及终止与该用户任务相关联的工作项或作业的API。这些API可进一步包括用于对地理位置中的所有工作项、作业、任务和池进行统计数据收集、聚集和报告的API。此外,这些API可包括用于允许基于虚拟机的现货市场短期地将可用虚拟机作为可抢占虚拟机向用户拍卖的API。这些API还可包括用于计量使用并且提供计费支持的API。
[0108]这些任务位置服务225可被全局位置服务235链接在一起。全局位置服务235可负责账户创建和账户管理,包括结合任务位置服务承租者225来管理任务账户。这包括在存在主要数据中心灾难的情况下,负责灾难恢复并负责工作项和作业的可用性。这可包括由于数据中心出于任何原因不可用而在不同的位置运行工作项或作业。这还可包括允许顾客将他们的工作项、作业和池从一个数据中心迁移到另一数据中心。通常,将仅存在一个活跃的全局位置服务235。该活跃全局位置服务235与各个任务位置服务225以及各用于管理数据存储的服务组件(未示出)通信。全局位置服务可维护全局账户命名空间237。
[0109]图3示出了对任务位置服务的潜在配置。在图3中示出的配置中,任务位置服务可包括一个或多个账户服务器321。该账户服务器处理针对给定地理区域中的帐户的帐户管理,包括创建、删除、或属性更新。帐户前端322用作账户服务的前端节点。账户前端322在该图中所示出的账户虚拟IP地址324后。帐户前端322处理来自全局位置服务的帐户API请求,诸如用于创建帐户或删除帐户的API请求
[0110]图3中的配置还包括一个或多个池服务器331。池服务器331处理针对给定地理区域中的虚拟机池的池管理和池事务。池服务器331处理池创建、删除和属性更新。池服务器331还管理跨多个任务承租者的高级虚拟机分配算法。虚拟机分配可将虚拟机与给定用户的存储的连接性纳入考虑。池服务器还可执行与虚拟机的分配有关的其他任务。
[0111]图3的配置还包括一个或多个工作项或作业服务器(WIJ) 336。WIJ服务器336处理对工作项和作业的创建、删除和更新。此外,如果用户请求了在工作项或作业开始或结束时对池的自动创建和/或破坏,则WIJ服务器336可发起对与这些工作项或作业相关联的池的创建和删除。WIJ服务器336还使用用于缩放的通用分区机制。在一实施例中,在每个任务位置服务中存在多个WIJ服务器336,并且每个WIJ服务器处理一定范围的工作项。
[0112]池服务器331和WIJ服务器336经由任务位置服务前端338接收来自用户的请求。任务位置服务前端338还负责调用相应的组件来处理来自用户的请求。任务位置服务前端338在如该图中所示出的账户虚拟IP地址334后。
[0113]图3中的配置还包括任务位置服务主机342。在一实施例中,任务位置服务主机342具有两个主要的责任。首先,任务位置服务主机325用作用于为任务位置服务225中的相应服务器实现分区逻辑的主机系统。此外,任务位置服务主机342可负责在每一现货时段的开始处为该任务位置服务的整个地理区域计算可抢占虚拟机的新市场价。可以从各池服务器和任务承租者处收集当前投标和资源可用性信息,并据此计算该新市场价。或者,任务位置服务主机可向现货价格市场服务发送该投标和资源可用性信息。它还作出对池服务器的关于跨地理区域中的所有任务承租者的可抢占虚拟机的高级分配指南。
[0114]为了跟踪计算环境的活动和行为,任务位置服务主机342可与一个或多个统计数据聚集服务器355通信。统计数据聚集服务器负责收集和聚集任务、作业、工作项和池的详细统计数据。该系统中的其他组件发出任务和虚拟机的精细粒度的统计数据。统计聚集服务器将来自任务层或虚拟机层统计数据的这些精细粒度的统计数据聚集为工作项、帐户层、和/或池层统计数据。所述统计数据可被披露以经由API使用。此外,统计数据聚集服务器可负责为每个帐户生成每小时计量记录以供计费使用。
[0115]作为更具体的示例,通用分区可被应用于在图3中示出的任务位置服务中的角色和子角色。图3中示范出的顶层角色是任务位置服务或承租者。如果存在任务位置服务的多个实例,则这些实例之一将对应于任务位置服务主机(或命令器)342。在承租者内的是账户服务器角色321、池服务器角色331和工作项作业服务器角色336。这些角色中的每一个还表示任务位置服务的实例,但这些角色实例处理整个承租者内的一组功能。例如,对账户信息的请求由该承租者内的账户服务器角色来处理。如果存在任务位置服务或承租者的多个实例,则该承租者内的角色中的每一个的主机可对应于不同的实例。
[0116]图6示出了可如何为多个主机角色提供冗余的常规示例。在这个常规示例中,每一主机角色需要具有两个附加实例,以便改善可用性。错误域包括具有共同失效模式的节点,并且它们可一起失效。例如,共享同一电源的同一机架上的各节点可处于共同错误域,因为它们可能由于共同问题的结果而失效。升级域对应于在系统升级期间的同一时间离线获得的一组节点。这些角色散布在如图6所示的不同“错误域”和“升级域”上,以便不会在共同时间由于升级或失效的原因而停机。
[0117]在该常规方法下,提供任务位置服务内的三个角色所需的附加实例将要求具有针对每一角色的分开的附加实例。在图6中,这通过具有为每一类型的主机提供附加实例的显式机器来示出。由此,用于账户服务器的主机621将需要附加实例622和623。类似地,用于池服务器的主机632具有备份实例631和633。用于WIJ服务器的主机643具有备份实例642和641。
[0118]图8示出了使用通用分区的分布式计算环境内的虚拟机如何被组织以为角色提供各种实例和主机的示例。在图8中,示出了分别用于账户服务器、池服务器和WIJ服务器的分开的GP主机821、831和841。由于GP主机模块和任何固定接口是相同的,而不管正被管理的角色为何,因此备份服务器需要GP主机821、831和841可被组合在单个机器上。因此,可提供单个备份852作为这三个GP主机的备份。如果GP主机821、831或841之一经历了失效,则可使用同一 GP主机模块和固定接口。在该示例中,故障转移备份需要来接管经历了失效的GP主机角色的唯一附加信息类型是相应命名空间的密钥和任何应用定义的接口。类似地,单个第二备份852可用于所有三个GP主机821、831和841。因此,在这个示例中,仅两个GP主机备份服务器(852和853)用于此至少三个GP主机角色。虽然示出了如由共同机器备份的三个GP主机角色,但可使用共同机器来备份属于同一用户或账户的任何方便数目的GP主机角色。
[0119]图11示出了根据本发明的各方面的相对于错误域和升级域为主机角色提供备份机器的示例性方面。类似于本文中以上相对于图8讨论的那些概念,可将多个GP主机角色备份在较少数量的服务器上。例如,图11描绘了第一错误域和第一升级域中的账户GP主机1202、第二错误域和第二升级域中的池GP主机1204、第三错误域和第三升级域中的WIHGP主机1210、第一 GP备份1206和第二 GP备份1208。第一 GP备份1206和第二 GP备份1208各自在各GP主机角色中的不同错误域和升级域中。在这个说明性示例中,单个通用分区系统在该示例中仅需要五个服务器(或潜在地具有单个备份的四个服务器)来为这三个角色托管所有这些主机。在图6所示的示例中,可需要用于那三个相同的主机角色的9个不同的服务器。图8中示出的方法可通过利用可用于由该系统托管的任何类型的角色的两个附加服务器来完成。因此,如果这些主机角色中的一个或多个不可用来处理错误域或不可用升级域中的失效时,可使用备份服务器(例如,GP备份1206)。尽管(如与相对于图6讨论的那个示例相比)在本示例中可能需要较少数目的服务器,但构想了附加错误域和升级域可被实现来确保备份服务器的可用性。如以上参考图8所讨论的,在一示例性方面中,构想了任何数目的主机角色可由共同的机器来备份。
[0120]在简要描述了本发明的各实施例的概览后,现在描述适于执行本发明的示例性操作环境。概括地参考附图,并首先具体参考图7,示出了用于实现本发明的各实施例的示例性操作环境,并将其概括地指定为计算设备700。计算设备700只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应该将计算设备700解释为对所示出的任一组件或其组合有任何依赖性或要求。
[0121]本发明的各实施例可以在由计算机或诸如个人数据助理或其它手持式设备之类的其它机器执行的计算机代码或机器可使用指令(包括诸如程序模块之类的计算机可执行指令)的一般上下文中描述。一般而言,包括例程、程序、对象、组件、数据结构等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。本发明可以在各种系统配置中实施,这些系统配置包括手持式设备、消费电子产品、通用计算机、更专用计算设备等等。本发明也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。
[0122]继续参考图7,计算设备700包括直接或间接耦合以下设备的总线710:存储器712、一个或多个处理器714、一个或多个呈现组件716、输入/输出(I/O)端口 718、I/O组件720、和说明性电源722。总线710表示可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。虽然为了清楚起见利用线条示出了图7的各框,但是实际上,各组件的轮廓并不是那样清楚,并且比喻性地来说,线条更精确地将是灰色的和模糊的。例如,可以将诸如显示设备等呈现组件认为是I/O组件。另外,许多处理器具有存储器。发明人关于此点认识到这是本领域的特性,并重申,图7的图示只是可以结合本发明的一个或多个实施例来使用的示例性计算设备的例示。诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”等分类之间没有区别,因此它们全部都被认为是在图7的范围之内的并且被称为“计算设备”。
[0123]计算设备700通常包括各种计算机可读介质。计算机可读介质可以是可由计算设备700访问的任何可用介质,而且包含易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它全息存储器、磁带盒、磁带、磁盘存储或其它磁性存储设备或可用于编码所需信息且可以由计算设备700访问的任何其它介质。在一个实施例中,计算机存储介质可以从有形计算机存储介质中选择。在另一实施例中,计算机存储介质可以从非临时性计算机存储介质中选择。
[0124]通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,且包含任何信息传递介质。术语“已调制数据信号”指其一个或多个特征以这样的方式设置或改变以便在信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包括在计算机可读介质的范围之内。
[0125]存储器712可包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的,不可移动的,或两者的组合。示例性硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等。计算设备700包括从诸如存储器712或I/O组件720等各种实体读取数据的一个或多个处理器。呈现组件716向用户或其他设备呈现数据指示。示例性呈现组件包括显示设备、扬声器、打印组件、振动组件等等。
[0126]I/O端口 718可允许计算设备700逻辑上耦合至包括I/O组件720的其它设备,这些I/O组件中的一些可以是内置的。说明性组件可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、打印机、无线设备等等。
[0127]图9示出了根据本发明的方法的示例。在图9中,从应用或用户接收910 —个或多个应用定义的分区系统接口。例如,基于来自应用或用户的请求,创建920包括接收到的应用定义的分区系统接口的多个主机角色实例。这多个主机角色实例对应于主机存储对象。将对该主机存储对象930的租用分派给主机角色实例之一。多个主机角色实例为了获得该租用的分派而竞争。被分派该租用的主机角色实例变成命令器主机角色实例。命令器主机角色实例随后将一分区群组分派940给多个分区服务器。随后使用这多个分区服务器来执行950与一应用相对应的作业。。
[0128]图10示出了根据本发明的方法的另一示例。在图10中,接收1010对计算的请求。该计算请求包括彼此不同的多个命名空间和至少两个主机角色实例。创建1020此至少两个主机角色实例。分派1030为所创建的多个主机角色实例提供故障转移服务的至少一个机器。该故障转移服务可对应于主机角色实例停止操作的任何方便的理由,诸如未计划的故障转移、经调度的更新、计划的维护事件或其他理由。检测1040针对所创建的主机角色实例之一的故障转移事件。在所分派的机器上创建1050与该故障转移事件相对应的主机角色的附加实例。
[0129]参考具体实施例描述了本发明的实施例,具体实施例在所有方面都旨在是说明性的而非限制性的。不偏离本发明范围的情况下,各替换实施例对于本发明所属领域的技术人员将变得显而易见。
[0130]在一实施例中,提供了用于在分布式环境中执行计算的方法。该方法包括:接收一个或多个应用定义的分区系统接口 ;创建包括该一个或多个应用定义的分区系统接口的多个主机角色实例,这些主机角色实例对应于主机存储对象;分派对该主机存储对象的租用,每一主机角色实例为了获得该租用而竞争,被分派该租用的主机角色实例是命令器主机角色实例;由命令器主机角色实例将分区群组分派给多个分区服务器;以及使用多个分区服务器来执行与应用相对应的作业。
[0131]在另一实施例中,提供了用于在分布式环境中执行计算的方法。该方法包括:接收对计算的请求,该请求包括多个命名空间和至少两个主机角色实例;创建这至少两个主机角色实例;分派为所创建的多个主机角色实例提供故障恢复服务的至少一个机器;检测所创建的一个或多个主机角色实例的故障恢复事件;以及,在所分派的机器上创建与检测到的故障恢复事件相对应的主机角色的附加实例。
[0132]在又一实施例中,提供了一种用于在分布式计算环境中执行计算任务的系统。该系统包括执行计算机可使用指令的多个处理器,所述计算机可使用指令在被执行时,提供一种系统,该系统包括:多个分区服务器,该分区服务器具有用于管理与分区服务器相关联的存储对象的至少一个分区系统接口以及一个或多个应用定义的分区系统接口,分区服务器具有用于存储关于所分派的分区的信息的关联存储对象;分区表,所述分区表包含基于应用定义的命名空间的分区,该分区对应于来自跨越该命名空间的应用定义的命名空间的密钥范围,该分区表能被分区系统访问;第一主机角色实例,该第一主机角色实例包括固定分区系统接口,该固定分区系统接口用于管理分区到分区服务器虚拟机的分派并维护分区到分区服务器虚拟机的分区表分派;以及具有至少一个固定分区系统接口的客户机组件,该至少一个固定分区系统接口用于从命名空间接收包含密钥值的客户机请求并返回与该密钥值相对应的分区服务器的地址。
[0133]从前面的描述可以看出,本发明很好地适用于实现上文所阐述的所有目的和目标,并且具有对于该结构是显而易见且固有的其他优点。
[0134]可以理解,某些特征和子组合是有用的,并且可以加以利用而无需参考其它特征和子组合。这由权利要求所构想的,并在权利要求的范围内。
【权利要求】
1.一种用于在分布式计算环境中执行计算的方法,包括: 接收一个或多个应用定义的分区系统接口; 创建包括所述一个或多个应用定义的分区系统接口的多个主机角色实例,所述主机角色实例对应于主机存储对象; 分派对所述主机存储对象的租用,每一主机角色实例竞争所述租用,被分派所述租用的主机角色实例是命令器主机角色实例; 通过所述命令器主机角色实例来将分区群组分派给多个分区服务器;以及 使用所述多个分区服务器来执行与应用相对应的一个或多个计算。
2.如权利要求1所述的方法,其特征在于,进一步包括通过所述命令器主机角色实例来将心跳消息发送给所述多个分区服务器,其中一个或多个度量是响应于心跳消息从所述分区服务器接收的,并且其中所述一个或多个度量中的至少一个度量是应用定义度量。
3.如权利要求2所述的方法,其特征在于,还包括: 在所述命令器主机角色实例维护对所述主机存储对象的租用时,通过所述命令器主机角色实例来发送将一个或多个分区分派给多个分区服务器中的一个分区服务器的消息,来自所述命令器主机角色实例的所述消息包括时期号;以及 通过所述多个分区服务器中的所述分区服务器来维护从所述命令器主机角色实例处接收到的分区分派。
4.如权利要求3所述的方法,其特征在于,还包括: 通过所述命令器主机角色实例来将分派标识符与所述一个或多个分区的分派相关联,所述命令器主机角色实例将所述分派标识符以及所述消息发送给所述分区服务器; 由所述分区服务器来更新相应的存储对象的内容以存储所述分派标识符;以及 由所述分区服务器来将确认消息发送给所述命令器主机角色实例。
5.如权利要求3所述的方法,其特征在于,还包括: 通过所述命令器主机角色实例来将分派标识符与所述一个或多个分区的分派相关联,所述命令器主机角色实例将所述分派标识符以及所述消息发送给所述分区服务器; 由所述分区服务器来从所述命令器主机角色实例接收所述消息,而无需向所述命令器主机发送确认消息; 由所述命令器主机角色实例来中断所述分区服务器对相应存储对象的租用; 由所述命令器主机角色实例来删除与所述分区服务器相对应的存储对象;以及由所述分区服务器来检测所述租用的中断,所述分区服务器响应于检测到中断所述租用而终止。
6.如权利要求3所述的方法,其特征在于,还包括: 通过所述命令器主机角色实例来将分派标识符与所述一个或多个分区的分派相关联,所述命令器主机角色实例将所述分派标识符以及所述消息发送给所述分区服务器; 由所述分区服务器从所述命令器主机角色实例接收所述消息,而无需更新相应存储对象的内容; 由所述命令器主机角色实例来中断所述分区服务器对所述相应存储对象的租用; 由所述命令器主机角色实例来删除与所述分区服务器相对应的存储对象;以及 由所述分区服务器来检测所述租用的中断,所述分区服务器响应于检测到中断所述租用而终止。
7.一种用于在分布式计算环境中执行计算的方法,包括: 执行包括至少两个命名空间和至少两个主机角色实例的计算,每一主机角色实例对应于不同的命名空间,每一主机角色实例是命令器,并保持对相应命名空间的主机存储对象的命令器租用; 分派为多个命令器主机角色实例提供故障恢复服务的至少一个机器; 检测所述命令器主机角色实例之一的故障恢复事件;以及 在所分派的机器上创建与检测到的故障恢复事件相对应的主机角色的附加实例,所述附加实例是作为与所述故障恢复事件相对应的命名空间的命令器来分派的。
8.一种用于在分布式计算环境中执行计算任务的系统,所述系统包括: 多个处理器执行的计算机可使用指令,所述计算机可使用指令在被执行时,提供一种系统,该系统包括: 多个分区服务器,所述分区服务器具有用于管理与分区服务器相关联的存储对象的至少一个分区系统接口以及一个或多个应用定义的分区系统接口,分区服务器具有用于存储关于所分派的分区的信息的关联存储对象; 分区表,所述分区表包含基于应用定义的命名空间的分区,所述分区对应于来自跨越所述命名空间的应用定义 的命名空间的密钥范围,所述分区表能被分区系统访问; 第一主机角色实例,所述第一主机角色实例包括固定分区系统接口,所述固定分区系统接口用于管理分区到分区服务器虚拟机的分派并维护分区到分区服务器虚拟机的分区表分派;以及 具有至少一个固定分区系统接口的客户机组件,所述至少一个固定分区系统接口用于从所述命名空间接收包含密钥值的客户机请求并返回与所述密钥值相对应的分区服务器的地址。
9.如权利要求8所述的系统,其特征在于,进一步包括针对所述主机角色实例的至少一个应用定义的接口。
10.如权利要求8所述的系统,其特征在于,进一步包括用于向所述分区表分派租用并向所述活跃主机角色实例分派主机存储对象的租用接口。
【文档编号】G06F9/50GK104081354SQ201380007805
【公开日】2014年10月1日 申请日期:2013年2月1日 优先权日:2012年2月3日
【发明者】J·王, B·G·卡尔德, A·E·绍尔斯沃德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1