一种资源分配的方法及设备与流程

文档序号:16930033发布日期:2019-02-22 20:11阅读:125来源:国知局
一种资源分配的方法及设备与流程

本申请涉及计算机领域,尤其涉及一种资源分配的方法及设备。



背景技术:

实例在云计算中为一个能够提供特定服务的独立对象,比如一台云数据库实例,提供数据存储查询等功能,在云计算中,用户往往有批量申请实例的需求,比如用户有申请能够提供数据读写功能的实例的需求,每个实例拥有的数据都互相独立,互不影响,且要求整个批量申请的动作作为一个原子性操作,仅允许同时申请成功,或者同时失败。在云计算中,能够提供计算存储功能的服务器为主机,如物理服务器、云服务器等,以往的资源调度器仅能保证单个实例计算主机资源申请的原子性,不支持批量实例主机资源申请,需要资源调度器的上层循环进行单个实例申请,同时遇到申请失败将已申请成功的主机资源释放掉,释放过程涉及已生成数据的回滚等,成本较高。

对于批量实例的资源申请,涉及到多个实例可能分配在不同或相同主机上,在多个实例申请过程中可能出现无可用主机资源的情况,对于资源申请成功的主机,已分配资源要进行相应的回滚,来保证批量实例主机资源分配的原子性。

现有技术中,在进行资源分配时,首先对内存中缓存的整个集群的所有主机信息m进行完整的拷贝m'。资源分配过程中,对可用资源的判断、主机已分配资源的更新均在m'中进行。在资源分配成功后,对发生资源分配的主机,将m中的主机信息使用m'进行替换/更新。若资源分配失败,则直接将拷贝的主机信息m'丢弃,以达到回滚的目的。而在现有技术中,因为事先无法判断实例主机会分配在哪些机器上,所以每一次资源申请的请求都需要对内存中整个集群的主机信息进行完整拷贝,请求消耗的内存与集群中缓存的主机信息数量成正比。同时内存拷贝需要一定的cpu运算及内存消耗,从而导致资源调度器的cpu、内存使用率波动较大,同时会影响请求的响应时间,集群中主机数量越大表现越明显。



技术实现要素:

本申请的一个目的是提供一种资源分配的方法及设备,解决现有技术中请求消耗的内存与集群中缓存的主机信息数量成正比,资源调度器的cpu、内存使用率波动较大,影响请求的响应时间的问题。

根据本申请的一个方面,提供一种资源分配的方法,所述方法包括:

从资源分配请求中获取各实例的资源需求量;

根据各实例的资源需求量,为各实例分配对应的主机;

为所述资源分配请求创建缓存;

将各实例的资源需求量添加至所分配的主机对应的缓存中;

针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

进一步地,根据各实例的资源需求量,为各实例分配对应的主机,包括:

根据各实例的资源需求量、各主机的剩余资源量和各主机对应的缓存中记录的资源需求量,为各实例分配对应的主机。

进一步地,根据各实例的资源需求量、各主机的剩余资源量和各主机对应的缓存中记录的资源需求量,为各实例分配对应的主机,包括:

根据各主机的剩余资源量和各主机对应的缓存中记录的已分配的实例的资源需求量,计算各主机的可分配资源量;

根据各主机的可分配资源量和各实例的资源需求量,为各实例分配对应的主机。

进一步地,根据各实例的资源需求量,为各实例分配对应的主机包括:

获取有资源剩余的主机列表,迭代分配主机,直至当前实例的资源需求量大于当前选取的主机的可分配资源量,结束迭代分配主机。

进一步地,所述迭代分配主机包括:

从所述主机列表中选取一主机,根据当前选取的主机的剩余资源量及其对应的缓存中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量;

判断当前实例的资源需求量是否小于或等于当前选取的主机的可分配资源量,若是,则将当前选取的主机分配给当前实例,并将当前实例的资源需求量添加至当前选取的主机对应的缓存中。

进一步地,从所述主机列表中选取一主机,根据当前选取的主机的剩余资源量及其对应的缓存中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量,包括:

从所述主机列表中选取一主机,判断所选取的主机是否有对应的缓存,

若有,将当前选取的主机的剩余资源量及其对应的缓存中记录的已分配的实例的资源需求量的差值,作为当前选取的主机的可分配资源量。

进一步地,判断所选取的主机是否有对应的资源分配请求的缓存之后,还包括:

若无,将当前选取的主机的剩余资源量作为当前选取的主机的可分配资源量。

进一步地,将当前选取的主机分配给当前实例,并将当前实例的资源需求量添加记录至当前选取的主机对应的缓存中,包括:

将当前选取的主机分配给当前实例,并为当前选取的主机创建对应的缓存后,将当前实例的资源需求量记录至当前选取的主机对应的缓存中。

进一步地,针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量之后,还包括:

删除各主机对应的同一资源分配请求的缓存。

根据本申请另一个方面,还提供了一种资源分配的设备,所述设备包括:

获取装置,用于从资源分配请求中获取各实例的资源需求量;

分配装置,用于根据各实例的资源需求量,为各实例分配对应的主机;

创建装置,用于为所述资源分配请求创建缓存;

添加装置,用于各实例的资源需求量添加至所分配的主机对应的缓存中;

更新装置,用于针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

进一步地,所述分配装置用于:

根据各实例的资源需求量、各主机的剩余资源量和各主机对应的缓存中记录的资源需求量,为各实例分配对应的主机。

进一步地,所述分配装置用于:

根据各主机的剩余资源量和各主机对应的缓存中记录的资源需求量,计算各主机的可分配资源量;

根据各主机的可分配资源量和各实例的资源需求量,为各实例分配对应的主机。

进一步地,所述分配装置用于:

获取有资源剩余的主机列表,迭代分配主机,直至当前实例的资源需求量大于当前选取的主机的可分配资源量,结束迭代分配主机。

进一步地,所述迭代分配主机包括:

从所述主机列表中选取一主机,根据当前选取的主机的剩余资源量及其对应的缓存中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量;

判断当前实例的资源需求量是否小于或等于当前选取的主机的可分配资源量,若是,则将当前选取的主机分配给当前实例,并将当前实例的资源需求量添加至当前选取的主机对应的缓存中。

进一步地,所述分配装置用于:

从所述主机列表中选取一主机,判断所选取的主机是否有对应的存,

若有,将当前选取的主机的剩余资源量及其对应的缓存中记录的已分配的实例的资源需求量的差值,作为当前选取的主机的可分配资源量。

进一步地,判断所选取的主机是否有对应的缓存之后,所述分配装置还用于:

若无,则将当前选取的主机的剩余资源量作为当前选取的主机的可分配资源量。

进一步地,所述分配装置用于:

将当前选取的主机分配给当前实例,并为当前选取的主机创建对应的缓存后,将当前实例的资源需求量记录至当前选取的主机对应的缓存中。

进一步地,所述设备还包括:

删除装置,用于删除各主机对应的同一资源分配请求的缓存。

根据本申请另一个方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,其中,该计算机可执行指令被处理器执行时使得该处理器:

从资源分配请求中获取各实例的资源需求量;

根据各实例的资源需求量,为各实例分配对应的主机;

为所述资源分配请求创建缓存;

将各实例的资源需求量添加至所分配的主机对应的缓存中;

针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

根据本申请再一个方面,还提供了一种基于计算的设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

从资源分配请求中获取各实例的资源需求量;

根据各实例的资源需求量,为各实例分配对应的主机;

为所述资源分配请求创建缓存;

将各实例的资源需求量添加至所分配的主机对应的缓存中;

针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

本申请通过对于每一次资源分配的请求引入一个资源需求缓存的概念,从资源分配请求中获取各实例的资源需求量;根据各实例的资源需求量,为各实例分配对应的主机;为所述资源分配请求创建缓存;将各实例的资源需求量添加至所分配的主机对应的缓存中;针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。从而资源分配过程中的缓存中的资源需求不会更新到主机的已分配资源的信息中,以避免主机信息遭到污染,在资源分配失败时,直接删除缓存从而轻松进行回滚;进一步地,能够更轻量级的实现批量实例主机资源申请时的原子性,无需对集群主机信息进行拷贝,仅有少量的内存消耗,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出本申请的一实施例中资源分配的一场景应用示意图;

图2示出本申请的一实施例中资源调度器内存中缓存的主机信息模型示意图;

图3示出本申请的一实施例中主机对应的缓存队列中记录资源需求量的示意图;

图4示出本申请一实施例中内存中缓存的主机信息的一种分布示意图;

图5示出本申请一实施例中批量实例的资源分配的流程示意图;

图6示出根据本申请另一个方面提供的一种资源分配的设备结构示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

本申请所述的资源分配的方法应用于云计算服务中,如图1示出的本申请的一实施例中资源分配的一场景应用示意图;云计算服务中的资源调度器,作为一个基础组件主要负责主机资源的管理与调度,直接影响着云产品的售卖。用户购买云产品实例时,购买请求到达后,售卖系统会首先进行资源申请确定实例所在主机,然后在相应的主机上进行实例的安装等操作。图1中整个流程为同步操作,对资源调度器的响应时间有一定的要求,为了管理集群下大量主机的资源调度,资源调度器会将主机信息缓存在内存中,进行主机资源申请时仅需要使用内存缓存的主机信息进行相应的计算,可大大提高资源分配效率。

如图2示出的本申请的一实施例中资源调度器内存中缓存的主机信息模型示意图;主机中的资源可包括内存、磁盘、cpu、网络等,将它们统称为主机资源,资源调度器内存中缓存的主机信息可以包括主机元信息、主机总资源信息和主机已分配资源信息,其中,主机元信息可包括主机名称、主机机器型号、网络模式、主机地址等。

本申请一实施例中,提供了一种资源分配的方法,其中,所述方法包括步骤s11~步骤s15,可应用于图1场景中的批量实例的资源申请时,

在步骤s11中,从资源分配请求中获取各实例的资源需求量;在本申请一实施例中,一个待分配资源的实例列表中包括一个或多个实例,一个待分配资源的实例列表中各实例需要资源时,以待分配资源的实例列表作为一个单元发出一次资源分配的请求,对于每一次资源申请的请求会生成一个全局唯一的标识符。该标识符可以是uuid(universallyuniqueidentifier,通用唯一标识符),保证了同一时空中的所有资源申请的请求都是唯一的。基于uuid获取对应的待分配资源的实例列表中各实例的资源需求量,以便后续主机根据资源需求量进行分配资源。

接着,在步骤s12中,根据各实例的资源需求量,为各实例分配对应的主机;在此,批量实例的资源申请作为一个原子性操作,仅允许同时申请成功或者同时失败,因此,需要确保将各实例分配至合适的可用的主机上,根据各实例的资源需求量,为各实例分配对应的主机,可保证资源申请的原子性及高效地完成资源申请。

在步骤s13中,为所述资源分配请求创建缓存;在本申请一实施例中,根据分配的各实例的资源需求量,为所分配的主机创建缓存,所述缓存专用于所述资源分配请求;在此,引入了一个资源需求缓存(buffer)的概念,buffer为主机对应的资源分配请求uuid的缓存,例如,可能有三次资源分配请求:请求a、请求b、请求c,三次请求对应的uuid分别为:a-111,b-222,c-333,根据上述三次资源分配请求,主机1设有对应的三个缓存:a,b,c,其中,缓存a专用于uuid为a-111对应的资源分配请求,缓存b专用于uuid为b-222对应的资源分配请求,缓存c专用于uuid为c-333对应的资源分配请求。其中,缓存可以是缓存队列、缓存的堆栈等形式。通过引入具有临时内存功能的缓存(buffer),缓存对应于主机,且是基于资源请求的,当资源分配失败时,只需要销毁对应的缓存即可,实现了批量实例主机资源申请的原子性,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

在步骤s14中,将各实例的资源需求量添加至所分配的主机对应的缓存中。在此,通过将各实例的资源需求量添加至所分配的主机对应的缓存中,生成一个资源需求量的缓存队列,该缓存队列仅在主机发生资源分配时生成,以便后续更新缓存对应的主机的已分配资源量,从而对于每一次资源申请的请求无需再对内存中整个集群的主机信息进行完整拷贝,大大降低了内存的消耗,同时提高请求的响应时间。

在本申请一实施例中,在步骤s12中,根据各实例的资源需求量、各主机的剩余资源量和各主机对应的缓存队列中记录的已分配的实例的资源需求量,为各实例分配对应的主机;在此,可以理解,在主机进行资源分配时,设实例资源需求量为n,主机总资源量为t,主机已分配资源量为s,则主机可用资源量为:t-s,因此,判断主机是否满足资源需求的方式为:n<=t-s,只有满足资源需求,主机才可为实例分配资源;而为了避免每一次资源申请的请求都需要对内存中整个集群的主机信息都进行完整拷贝,造成的大量消耗内存的问题,在本申请上述实施例中,引入的缓存可以是缓存队列、缓存的堆栈等形式,在本申请以下实施例中以缓存队列进行说明,此时,主机资源再进行分配时,不再是简单的使用n<=t-s来判断主机是否满足资源需求;而是需要根据各实例的资源需求量、各主机的剩余资源量和各主机对应的资源分配请求的缓存队列中记录的已分配的实例的资源需求量,为各实例分配对应的主机,其中,各主机的剩余资源量为各主机总资源量与主机已分配资源量的差值,当主机满足资源需求时,将实例的资源需求量放入到该主机对应的uuid的缓存队列buffer中。从而通过引入具有临时内存功能的buffer,使得进行批量实例主机资源申请时无需对集群主机信息进行拷贝,仅有少量的内存消耗,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

在步骤s15中,针对所述资源分配请求,根据各主机对应的缓存队列中记录的资源需求量,更新缓存对应的主机的已分配资源量。在本申请一实施例中,只有当同一uuid的资源分配请求中各实例资源均分配成功,此时,则将发生资源分配的主机对应的uuid的buffer中的所有资源需求量更新到主机已分配的资源中。需要说明的是,在批量实例的资源分配时,还会出现存在其中某个或某几个实例资源分配失败的情况,此时为了保证批量实例主机资源分配的原子性,可直接将发生资源分配的主机对应的uuid的buffer删除,完成数据回滚。

在此,本实施例中缓存对应于主机,且是基于资源分配请求的,从而:

1、确保了同一资源分配请求的资源分配操作原子性。例如,如果同一请求资源分配操作失败,只要销毁这个资源分配请求对应的主机上的缓存就好;

2、避免了对内存中整个集群的主机信息进行完整拷贝,保证不会因为内存中整个集群的主机信息的增大而增大缓存大小。因为,本申请的缓存是基于资源分配请求的,资源分配请求的资源大小是一定的(例如,请求100个资源),那么无论内存中整个集群的主机信息多大,本申请只会创建最多100个主机的buffer(一个资源挂在一台主机上),有可能会创建更少的buffer(例如,多个资源挂在同一个主机上)。

在本申请一实施例中,在步骤s12中,根据各主机的剩余资源量和各主机对应的缓存队列中记录的已分配的实例的资源需求量,计算各主机的可分配资源量;根据各主机的可分配资源量和各实例的资源需求量,为各实例分配对应的主机。具体地,假设每个实例的资源需求量分别为n1、n2、n3……,在资源分配过程中,假设资源需求n1分配到某主机1上,则将该资源需求n1放入到该主机对应的uuid的buffer队列中,该buffer队列仅在主机发生资源分配时生成,如图3所示,对于主机1,目前可分配的资源量=t1-s1-n1,同时,对于任意主机其可分配的资源量=ti-si-(na+nb+……),其中,na+nb+……为主机对应的uuid的buffer队列中的资源需求信息,ti为主机总资源量,si为主机的已分配资源量,i=1,2,……。在对同一uuid下的资源分配请求中多个实例进行资源分配后,内存中缓存的主机信息可能如图4所示,其中,n1和n3分配在主机1上,n4分配在主机2上,n2分配在主机4上,主机3无资源分配。

具体地,在步骤s13中,获取有资源剩余的主机列表,重复迭代分配主机,直至当前实例的资源需求量大于当前选取的主机的可分配资源量,结束迭代分配主机。其中,所述迭代分配主机包括:从所述主机列表中选取一主机,根据当前选取的主机的剩余资源量及其对应的缓存队列中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量;判断当前实例的资源需求量是否小于或等于当前选取的主机的可分配资源量,若是,则将当前选取的主机分配给当前实例,并将当前实例的资源需求量添加至当前选取的主机对应的缓存中。

在本申请一实施例中,首先获取有资源剩余的主机列表,如主机列表a中包括主机1、主机2、主机3和主机4,各主机都有剩余资源,用m1、m2、m3和m4分别表示各主机的剩余资源量,从主机列表a中选取一主机,比如是主机1,通过以下方式进行迭代分配主机,根据当前选取的主机1的剩余资源量m1以及其对应的uuid的buffer队列中记录的已分配的实例的资源需求量na,计算当前选取的主机1的可分配资源量,此时可分配资源量=m1-na,若当前实例1的资源需求量n1<=m1-na,则将当前选取的主机1分配给当前实例1,并将当前实例1的资源需求量n1添加记录至当前选取的主机1对应的uuid的buffer队列中,此时buffer中的资源需求量为na+n1;若当前实例1的资源需求量n1>m1-na,则需要重新从主机列表a中选取下一主机,将实例1的资源需求量与新选取的主机的可分配资源量进行比较,即重复根据当前选取的主机的剩余资源量及其对应的资源分配请求的缓存队列中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量这一步骤,直至选取的当前主机满足实例1的资源需求量,可将实例1的资源需求分配在满足条件的当前主机上。

在本申请一实施例中,在步骤s12中,还需要从所述主机列表中选取一主机,判断所选取的主机是否有对应的缓存队列,若有,将当前选取的主机的剩余资源量及其对应的缓存队列中记录的已分配的实例的资源需求量的差值,作为当前选取的主机的可分配资源量。在本申请一实施例中,可能并不是所有主机列表中的主机都有对应的uuid的buffer,对于从主机列表中选取出来的主机,需要判断主机是否有对应的uuid的buffer,若所取出的当前主机存在对应的buffer,则需要根据将当前选取的主机的剩余资源量m及其对应的buffer中记录的已分配的实例的资源需求量(na+nb+……)的差值,作为当前选取的主机的可分配资源量,此时再判断该当前选取的主机是否可为实例分配资源,需要满足实例的资源需求量n<=ti-si-(na+nb+……),ti为当前主机总资源量,si为当前主机的已分配资源量,i=1,2,……,此时当前主机的剩余资源量m=ti-si,(na+nb+……)为主机对应的uuid的buffer队列中的资源需求信息,当主机的可分配资源量满足实例的资源需求量时,将资源需求量放入该主机对应的uuid的buffer队列中。

在本申请一实施例中,判断所选取的主机是否有对应的资源分配请求的缓存队列之后,还包括:若无,将当前选取的主机的剩余资源量作为当前选取的主机的可分配资源量。在此,当所选取的主机没有对应的uuid的buffer时,此时当前选取的主机的剩余资源量m作为当前选取的主机的可分配资源量,接着,将当前选取的主机分配给当前实例,并为当前选取的主机创建对应的资源分配请求的缓存队列后,将当前实例的资源需求量记录至当前选取的主机对应的资源分配请求的缓存队列中。在本申请一实施例中,若当前选取的主机不存在对应uuid的buffer时,只有当前选取的主机的可分配资源量大于或等于当前待分配资源的实例的资源需求量时,才为当前选取的主机创建对应的uuid的buffer,从而减少了cpu的占用,且能够确定实例主机会分配在哪些机器上,大大提高了资源申请的请求的响应时间。

在本申请一实施例中,从所述主机列表中选取一主机,包括:根据预设的主机优先级从所述主机列表中选取一主机。在此,为待分配资源的实例列表中某一实例进行资源分配时,获取按优先级排序后的主机列表,按照优先级顺序逐一取出主机为当前实例进行分配资源,例如,主机列表中优先级排序为主机1、主机2和主机3,首先取出主机1,判断主机1是否可为当前实例1进行分配资源,若没有足够的可分配资源满足实例1的资源需求量,则再从主机列表中取出主机2,再进行判断,直至所取出的主机的可分配资源量满足实例1的资源需求量,若主机列表中所有的主机都不满足实例1的资源需求量,则会存在实例1资源申请失败的情况。

需要说明的是,待分配资源的实例列表中的不同实例需要资源分配时,所获取的主机列表可能会相同也可能会不同,比如,实例1时获取的主机列表为按优先级排序后的主机列表1,包括的主机按优先级排序为主机1、主机2和主机3,而在实例2时获取的主机列表为按优先级排序后的主机列表2,包括的主机按优先级排序为主机2、主机3和主机1,还可以为主机1、主机2、主机4,主机列表中包括的主机可以为当前集群中所有的主机,也可以为集群中部分的主机。

在本申请一实施例中,步骤s15之后,还包括:步骤s16,删除各主机对应的同一资源分配请求的缓存队列。在此,资源分配过程中可能发生两种情况:第一种情况,同一资源分配请求下的全部实例资源分配均成功,此时,则将发生资源分配的主机对应的uuid的buffer中的所有资源需求n更新到主机已分配的资源中,即s=s+(na+nb+……),同时将uuid的buffer队列删除。第二种情况,存在实例资源分配失败,因不同的资源分配申请的uuid不同,则直接将发生资源分配的主机对应的uuid的buffer删除即可完成数据回滚。

图5示出本申请一实施例中批量实例的资源分配的流程示意图;首先,获取待分配资源的实例列表,判断该列表是否为空,若否,则从该列表中取出一实例,获取该实例资源需求量ni,接着,获取按优先级排序后的主机列表,判断该列表是否为空,若否,则取出主机列表中一主机,判断是否存在该主机对应的uuid的buffer,若是,则判断是否满足分配条件ni<=t-s-(na+nb+……),若满足上述分配条件,则将资源需求ni放入到该主机对应的uuid的buffer中,若不满足,则判断主机列表是否为空,从还有主机的主机列表中取出下一主机,重复上述步骤;当所选取的主机不存在对应的uuid的buffer时,需要判断创建buffer的条件,即判断是否满足ni<=t-s,若是,则新建buffer,将资源需求ni放入该主机对应的新建的buffer中。若循环上述步骤,主机列表为空时,表示主机列表中没有主机的可分配资源量足以满足当前实例的资源需求量,为当前实例进行分配资源,存在实例资源申请失败,则将发生资源分配的主机对应的uuid的buffer删除,完成资源申请的回滚。当待分配资源的实例列表为空时,表示该实例列表中所有的实例的资源申请均已完成,则将发生资源分配的主机对应的uuid的buffer中的资源需求队列更新到主机已分配的资源中,即:s=s+(na+nb+……),同时将同一uuid的buffer删除。

综上所述,通过本申请所述的资源分配的方法,资源分配过程中的buffer中的资源需求不会更新到主机的已分配资源的信息中,以避免主机信息遭到污染,在资源分配失败时,直接删除buffer从而轻松进行回滚,本申请所述的资源分配的方法能够更轻量级的实现批量实例主机资源申请时的原子性,无需对集群主机信息进行拷贝,仅有少量的内存消耗,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

本申请所述的资源分配的设备应用于云计算服务中,如图1示出的本申请的一实施例中资源分配的一场景应用示意图;云计算服务中的资源调度器,作为一个基础组件主要负责主机资源的管理与调度,直接影响着云产品的售卖。用户购买云产品实例时,购买请求到达后,售卖系统会首先进行资源申请确定实例所在主机,然后在相应的主机上进行实例的安装等操作。图1中整个流程为同步操作,对资源调度器的响应时间有一定的要求,为了管理集群下大量主机的资源调度,资源调度器会将主机信息缓存在内存中,进行主机资源申请时仅需要使用内存缓存的主机信息进行相应的计算,可大大提高资源分配效率。

如图2示出的本申请的一实施例中资源调度器内存中缓存的主机信息模型示意图;主机中的资源可包括内存、磁盘、cpu、网络等,将它们统称为主机资源,资源调度器内存中缓存的主机信息可以包括主机元信息、主机总资源信息和主机已分配资源信息,其中,主机元信息可包括主机名称、主机机器型号、网络模式、主机地址等。

图6示出根据本申请另一个方面提供的一种资源分配的设备结构示意图,其中,所述设备包括获取装置11、分配装置12、创建装置13、添加装置14和更新装置15,可应用于图1场景中的批量实例的资源申请时,

获取装置11,用于从资源分配请求中获取各实例的资源需求量;在本申请一实施例中,一个待分配资源的实例列表中包括一个或多个实例,一个待分配资源的实例列表中各实例需要资源时,以待分配资源的实例列表作为一个单元发出一次资源分配的请求,对于每一次资源申请的请求会生成一个全局唯一的标识符。该标识符可以是uuid(universallyuniqueidentifier,通用唯一标识符),保证了同一时空中的所有资源申请的请求都是唯一的。基于uuid获取对应的待分配资源的实例列表中各实例的资源需求量,以便后续主机根据资源需求量进行分配资源。

接着,分配装置12,用于根据各实例的资源需求量,为各实例分配对应的主机;在此,批量实例的资源申请作为一个原子性操作,仅允许同时申请成功或者同时失败,因此,需要确保将各实例分配至合适的可用的主机上,根据各实例的资源需求量,为各实例分配对应的主机,可保证资源申请的原子性及高效地完成资源申请。

创建装置13,用于为所述资源分配请求创建缓存;在本申请一实施例中,根据分配的各实例的资源需求量,为所分配的主机创建缓存,所述缓存专用于所述资源分配请求;在此,引入了一个资源需求缓存(buffer)的概念,buffer为主机对应的资源分配请求uuid的缓存,例如,可能有三次资源分配请求:请求a、请求b、请求c,三次请求对应的uuid分别为:a-111,b-222,c-333,根据上述三次资源分配请求,主机1设有对应的三个缓存:a,b,c,其中,缓存a专用于uuid为a-111对应的资源分配请求,缓存b专用于uuid为b-222对应的资源分配请求,缓存c专用于uuid为c-333对应的资源分配请求。其中,缓存可以是缓存队列、缓存的堆栈等形式。通过引入具有临时内存功能的缓存(buffer),缓存对应于主机,且是基于资源请求的,当资源分配失败时,只需要销毁对应的缓存即可,实现了批量实例主机资源申请的原子性,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

添加装置14,用于将各实例的资源需求量添加至所分配的主机对应的缓存中。在此,通过将各实例的资源需求量添加至所分配的主机对应的缓存中,生成一个资源需求量的缓存队列,该缓存队列仅在主机发生资源分配时生成,以便后续更新缓存对应的主机的已分配资源量,从而对于每一次资源申请的请求无需再对内存中整个集群的主机信息进行完整拷贝,大大降低了内存的消耗,同时提高请求的响应时间。

在本申请一实施例中,分配装置12,用于根据各实例的资源需求量、各主机的剩余资源量和各主机对应的缓存队列中记录的已分配的实例的资源需求量,为各实例分配对应的主机;在此,可以理解,在主机进行资源分配时,设实例资源需求量为n,主机总资源量为t,主机已分配资源量为s,则主机可用资源量为:t-s,因此,判断主机是否满足资源需求的方式为:n<=t-s,只有满足资源需求,主机才可为实例分配资源;而为了避免每一次资源申请的请求都需要对内存中整个集群的主机信息都进行完整拷贝,造成的大量消耗内存的问题,在本申请上述实施例中,引入的缓存可以是缓存队列、缓存的堆栈等形式,在本申请以下实施例中以缓存队列进行说明,此时,主机资源再进行分配时,不再是简单的使用n<=t-s来判断主机是否满足资源需求;而是需要根据各实例的资源需求量、各主机的剩余资源量和各主机对应的资源分配请求的缓存队列中记录的已分配的实例的资源需求量,为各实例分配对应的主机,其中,各主机的剩余资源量为各主机总资源量与主机已分配资源量的差值,当主机满足资源需求时,将实例的资源需求量放入到该主机对应的uuid的缓存队列buffer中。从而通过引入具有临时内存功能的buffer,使得进行批量实例主机资源申请时无需对集群主机信息进行拷贝,仅有少量的内存消耗,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

更新装置15,用于针对所述资源分配请求,根据各主机对应的缓存队列中记录的资源需求量,更新缓存对应的主机的已分配资源量。在本申请一实施例中,只有当同一uuid的资源分配请求中各实例资源均分配成功,此时,则将发生资源分配的主机对应的uuid的buffer中的所有资源需求量更新到主机已分配的资源中。需要说明的是,在批量实例的资源分配时,还会出现存在其中某个或某几个实例资源分配失败的情况,此时为了保证批量实例主机资源分配的原子性,可直接将发生资源分配的主机对应的uuid的buffer删除,完成数据回滚。

在此,本实施例中缓存对应于主机,且是基于资源分配请求的,从而:

1、确保了同一资源分配请求的资源分配操作原子性。例如,如果同一请求资源分配操作失败,只要销毁这个资源分配请求对应的主机上的缓存就好;

2、避免了对内存中整个集群的主机信息进行完整拷贝,保证不会因为内存中整个集群的主机信息的增大而增大缓存大小。因为,本申请的缓存是基于资源分配请求的,资源分配请求的资源大小是一定的(例如,请求100个资源),那么无论内存中整个集群的主机信息多大,本申请只会创建最多100个主机的buffer(一个资源挂在一台主机上),有可能会创建更少的buffer(例如,多个资源挂在同一个主机上)。

在本申请一实施例中,分配装置12用于,根据各主机的剩余资源量和各主机对应的缓存队列中记录的已分配的实例的资源需求量,计算各主机的可分配资源量;根据各主机的可分配资源量和各实例的资源需求量,为各实例分配对应的主机。具体地,假设每个实例的资源需求量分别为n1、n2、n3……,在资源分配过程中,假设资源需求n1分配到某主机1上,则将该资源需求n1放入到该主机对应的uuid的buffer队列中,该buffer队列仅在主机发生资源分配时生成,如图3所示,对于主机1,目前可分配的资源量=t1-s1-n1,同时,对于任意主机其可分配的资源量=ti-si-(na+nb+……),其中,na+nb+……为主机对应的uuid的buffer队列中的资源需求信息,ti为主机总资源量,si为主机的已分配资源量,i=1,2,……。在对同一uuid下的资源分配请求中多个实例进行资源分配后,内存中缓存的主机信息可能如图4所示,其中,n1和n3分配在主机1上,n4分配在主机2上,n2分配在主机4上,主机3无资源分配。

具体地,分配装置13用于,获取有资源剩余的主机列表,迭代分配主机,直至当前实例的资源需求量大于当前选取的主机的可分配资源量,结束迭代分配主机。其中,所述迭代分配主机包括:从所述主机列表中选取一主机,根据当前选取的主机的剩余资源量及其对应的缓存队列中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量;判断当前实例的资源需求量是否小于或等于当前选取的主机的可分配资源量,若是,则将当前选取的主机分配给当前实例,并将当前实例的资源需求量添加至当前选取的主机对应的缓存中。

在本申请一实施例中,首先获取有资源剩余的主机列表,如主机列表a中包括主机1、主机2、主机3和主机4,各主机都有剩余资源,用m1、m2、m3和m4分别表示各主机的剩余资源量,从主机列表a中选取一主机,比如是主机1,通过以下方式进行迭代分配主机,根据当前选取的主机1的剩余资源量m1以及其对应的uuid的buffer队列中记录的已分配的实例的资源需求量na,计算当前选取的主机1的可分配资源量,此时可分配资源量=m1-na,若当前实例1的资源需求量n1<=m1-na,则将当前选取的主机1分配给当前实例1,并将当前实例1的资源需求量n1添加记录至当前选取的主机1对应的uuid的buffer队列中,此时buffer中的资源需求量为na+n1;若当前实例1的资源需求量n1>m1-na,则需要重新从主机列表a中选取下一主机,将实例1的资源需求量与新选取的主机的可分配资源量进行比较,即重复根据当前选取的主机的剩余资源量及其对应的资源分配请求的缓存队列中记录的已分配的实例的资源需求量,计算当前选取的主机的可分配资源量这一步骤,直至选取的当前主机满足实例1的资源需求量,可将实例1的资源需求分配在满足条件的当前主机上。

在本申请一实施例中,分配装置12还用于,从所述主机列表中选取一主机,判断所选取的主机是否有对应的缓存队列,若有,将当前选取的主机的剩余资源量及其对应的缓存队列中记录的已分配的实例的资源需求量的差值,作为当前选取的主机的可分配资源量。在本申请一实施例中,可能并不是所有主机列表中的主机都有对应的uuid的buffer,对于从主机列表中选取出来的主机,需要判断主机是否有对应的uuid的buffer,若所取出的当前主机存在对应的buffer,则需要根据将当前选取的主机的剩余资源量m及其对应的buffer中记录的已分配的实例的资源需求量(na+nb+……)的差值,作为当前选取的主机的可分配资源量,此时再判断该当前选取的主机是否可为实例分配资源,需要满足实例的资源需求量n<=ti-si-(na+nb+……),ti为当前主机总资源量,si为当前主机的已分配资源量,i=1,2,……,此时当前主机的剩余资源量m=ti-si,(na+nb+……)为主机对应的uuid的buffer队列中的资源需求信息,当主机的可分配资源量满足实例的资源需求量时,将资源需求量放入该主机对应的uuid的buffer队列中。

在本申请一实施例中,判断所选取的主机是否有对应的资源分配请求的缓存队列之后,分配装置12还用于:若无,将当前选取的主机的剩余资源量作为当前选取的主机的可分配资源量。在此,当所选取的主机没有对应的uuid的buffer时,此时当前选取的主机的剩余资源量m作为当前选取的主机的可分配资源量,接着,将当前选取的主机分配给当前实例,并为当前选取的主机创建对应的资源分配请求的缓存队列后,将当前实例的资源需求量记录至当前选取的主机对应的资源分配请求的缓存队列中。在本申请一实施例中,若当前选取的主机不存在对应uuid的buffer时,只有当前选取的主机的可分配资源量大于或等于当前待分配资源的实例的资源需求量时,才为当前选取的主机创建对应的uuid的buffer,从而减少了cpu的占用,且能够确定实例主机会分配在哪些机器上,大大提高了资源申请的请求的响应时间。

在本申请一实施例中,从所述主机列表中选取一主机,包括:根据预设的主机优先级从所述主机列表中选取一主机。在此,为待分配资源的实例列表中某一实例进行资源分配时,获取按优先级排序后的主机列表,按照优先级顺序逐一取出主机为当前实例进行分配资源,例如,主机列表中优先级排序为主机1、主机2和主机3,首先取出主机1,判断主机1是否可为当前实例1进行分配资源,若没有足够的可分配资源满足实例1的资源需求量,则再从主机列表中取出主机2,再进行判断,直至所取出的主机的可分配资源量满足实例1的资源需求量,若主机列表中所有的主机都不满足实例1的资源需求量,则会存在实例1资源申请失败的情况。

需要说明的是,待分配资源的实例列表中的不同实例需要资源分配时,所获取的主机列表可能会相同也可能会不同,比如,实例1时获取的主机列表为按优先级排序后的主机列表1,包括的主机按优先级排序为主机1、主机2和主机3,而在实例2时获取的主机列表为按优先级排序后的主机列表2,包括的主机按优先级排序为主机2、主机3和主机1,还可以为主机1、主机2、主机4,主机列表中包括的主机可以为当前集群中所有的主机,也可以为集群中部分的主机。

在本申请一实施例中,所述设备还包括:删除装置16,用于删除各主机对应的同一资源分配请求的缓存队列。在此,资源分配过程中可能发生两种情况:第一种情况,同一资源分配请求下的全部实例资源分配均成功,此时,则将发生资源分配的主机对应的uuid的buffer中的所有资源需求n更新到主机已分配的资源中,即s=s+(na+nb+……),同时将uuid的buffer队列删除。第二种情况,存在实例资源分配失败,因不同的资源分配申请的uuid不同,则直接将发生资源分配的主机对应的uuid的buffer删除即可完成数据回滚。

图5示出本申请一实施例中批量实例的资源分配的流程示意图;首先,获取待分配资源的实例列表,判断该列表是否为空,若否,则从该列表中取出一实例,获取该实例资源需求量ni,接着,获取按优先级排序后的主机列表,判断该列表是否为空,若否,则取出主机列表中一主机,判断是否存在该主机对应的uuid的buffer,若是,则判断是否满足分配条件ni<=t-s-(na+nb+……),若满足上述分配条件,则将资源需求ni放入到该主机对应的uuid的buffer中,若不满足,则判断主机列表是否为空,从还有主机的主机列表中取出下一主机,重复上述步骤;当所选取的主机不存在对应的uuid的buffer时,需要判断创建buffer的条件,即判断是否满足ni<=t-s,若是,则新建buffer,将资源需求ni放入该主机对应的新建的buffer中。若循环上述步骤,主机列表为空时,表示主机列表中没有主机的可分配资源量足以满足当前实例的资源需求量,为当前实例进行分配资源,存在实例资源申请失败,则将发生资源分配的主机对应的uuid的buffer删除,完成资源申请的回滚。当待分配资源的实例列表为空时,表示该实例列表中所有的实例的资源申请均已完成,则将发生资源分配的主机对应的uuid的buffer中的资源需求队列更新到主机已分配的资源中,即:s=s+(na+nb+……),同时将同一uuid的buffer删除。

综上所述,通过本申请所述的设备应用于资源分配,资源分配过程中的buffer中的资源需求不会更新到主机的已分配资源的信息中,以避免主机信息遭到污染,在资源分配失败时,直接删除buffer从而轻松进行回滚,本申请所述的资源分配的方法能够更轻量级的实现批量实例主机资源申请时的原子性,无需对集群主机信息进行拷贝,仅有少量的内存消耗,且消耗的内存大小与集群内主机数量无关,可显著提高批量实例资源申请的效率以及请求响应时间的稳定性。

此外,本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机可执行指令,其中,该计算机可执行指令被处理器执行时使得该处理器:

从资源分配请求中获取各实例的资源需求量;

根据各实例的资源需求量,为各实例分配对应的主机;

为所述资源分配请求创建缓存;

将各实例的资源需求量添加至所分配的主机对应的缓存中;

针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

根据本申请再一个方面,还提供了一种基于计算的设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

从资源分配请求中获取各实例的资源需求量;

根据各实例的资源需求量,为各实例分配对应的主机;

为所述资源分配请求创建缓存;

将各实例的资源需求量添加至所分配的主机对应的缓存中;

针对所述资源分配请求,根据各主机对应的缓存中记录的资源需求量,更新缓存对应的主机的已分配资源量。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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