一种资源分配的方法、装置及计算机存储介质转让专利

申请号 : CN202011116476.3

文献号 : CN112261115B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 钱瀚李亚坤辛朝晖

申请人 : 北京字节跳动网络技术有限公司

摘要 :

本公开提供了一种资源分配的方法、装置及计算机存储介质,应用于进行集群资源分配的资源管理器中的任一调度器,该资源管理器中包含多个进行集群资源分配的调度器,该方法包括:接收目标作业的资源分配请求;获取多个节点的可分配资源,并基于所述可分配资源,确定满足资源分配请求的目标节点;获取目标节点的资源锁;响应于取得目标节点的资源锁,在目标节点上,基于资源分配请求为目标作业分配资源,并更新目标节点的剩余资源信息。本公开实施例中通过为集群中每个节点添加资源锁,使多个调度器通过抢占目标节点的资源锁的方式,获取更新目标节点的资源信息的权限,从而实现事务的串行执行,提高资源分配的准确性。

权利要求 :

1.一种资源分配的方法,其特征在于,应用于进行集群资源分配的资源管理器中的任一调度器,所述资源管理器中包含多个进行集群资源分配的调度器,所述方法包括:接收目标作业的资源分配请求;

获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点;

获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点的资源信息更新权限;

响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。

2.根据权利要求1所述的方法,其特征在于,基于所述可分配资源,确定满足所述资源分配请求的目标节点,包括:基于所述可分配资源,确定待分配的至少一个容器分别对应的目标节点。

3.根据权利要求2所述的方法,其特征在于,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,包括:将为所述目标作业分配的容器添加到所述目标作业对应的容器列表中,以便下次接收到针对目标作业的心跳时,从所述容器列表中为所述目标作业提取上次分配的容器并反馈给所述目标作业对应的用户端。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点。

5.根据权利要求4所述的方法,其特征在于,若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点,包括:若未成功取得所述目标节点的所述资源锁,则在经过预设时长后,返回重新确定满足所述资源分配请求的目标节点;或者,若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的其它目标节点。

6.根据权利要求1所述的方法,其特征在于,为所述目标作业分配资源,并更新所述目标节点的剩余资源信息之后,还包括:释放所述目标节点的所述资源锁。

7.一种资源分配的装置,其特征在于,所述装置包括:

接收模块,用于接收目标作业的资源分配请求;

确定模块,用于获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点;

获取模块,用于获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点的资源信息更新权限;

资源分配模块,用于响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。

8.根据权利要求7所述的装置,其特征在于,所述确定模块,具体用于基于所述可分配资源,确定待分配的至少一个容器分别对应的目标节点。

9.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至6任一所述的资源分配的方法的步骤。

10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至6任意一项所述的资源分配的方法的步骤。

说明书 :

一种资源分配的方法、装置及计算机存储介质

技术领域

[0001] 本公开涉及计算机网络技术领域,具体而言,涉及一种资源分配的方法、装置及计算机存储介质。

背景技术

[0002] 目前,在Hadoop YARN集群资源管理和调度基础平台中,用户可以根据不同场景下各种作业对资源的需求情况,选择不同的调度器为作业分配节点资源。
[0003] 根据用户提交的作业对应的作业类型以及资源需求条件,可能存在一个作业需要多个调度器分配同一节点的资源的情况,在上述情况中,当多个调度器同时为同一个作业分配该节点的资源时,可能会出现当调度器A成功为该作业分配资源后,由于此时调度器B可能会更新节点资源信息,因此会造成调度器A扣除该节点资源失败,导致调度器A更新节点资源失败,并导致用户获取到的该作业资源分配情况为脏数据的情况。

发明内容

[0004] 本公开实施例至少提供一种资源分配的方法、装置及计算机存储介质。
[0005] 第一方面,本公开实施例提供了一种资源分配的方法,应用于进行集群资源分配的资源管理器中的任一调度器,所述资源管理器中包含多个进行集群资源分配的调度器,所述方法包括:
[0006] 接收目标作业的资源分配请求;
[0007] 获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点;
[0008] 获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点上的资源信息更新权限;
[0009] 响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。
[0010] 在一种可能的实施方式中,基于所述可分配资源,确定满足所述资源分配请求的目标节点,包括:
[0011] 基于所述可分配资源,确定待分配的至少一个容器分别对应的目标节点。
[0012] 在一种可能的实施方式中,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,包括:
[0013] 将为所述目标作业分配的容器添加到所述目标作业对应的容器列表中,以便下次接收到针对目标作业的心跳时,从所述容器列表中为所述目标作业提取上次分配的容器并反馈给所述目标作业对应的用户端。
[0014] 在一种可能的实施方式中,所述方法还包括:
[0015] 若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点。
[0016] 在一种可能的实施方式中,若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点,包括:
[0017] 若未成功取得所述目标节点的所述资源锁,则在经过预设时长后,返回重新确定满足所述资源分配请求的目标节点;或者,
[0018] 若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的其它目标节点。
[0019] 在一种可能的实施方式中,为所述目标作业分配资源,并更新所述目标节点的剩余资源信息之后,所述方法还包括:
[0020] 释放所述目标节点的所述资源锁。
[0021] 第二方面,本公开实施例还提供一种资源分配的装置,所述装置包括:
[0022] 接收模块,用于接收目标作业的资源分配请求。
[0023] 确定模块,用于获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点。
[0024] 获取模块,用于获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点的资源信息更新权限。
[0025] 资源分配模块,用于响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。
[0026] 在一种可能的实施方式中,所述确定模块,具体用于:
[0027] 基于所述可分配资源,确定待分配的至少一个容器分别对应的目标节点。
[0028] 在一种可能的实施方式中,所述资源分配模块,具体用于:
[0029] 将为所述目标作业分配的容器添加到所述目标作业对应的容器列表中,以便下次接收到针对目标作业的心跳时,从所述容器列表中为所述目标作业提取上次分配的容器并反馈给所述目标作业对应的用户端。
[0030] 在一种可能的实施方式中,所述确定模块,还具体用于:
[0031] 若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点。
[0032] 在一种可能的实施方式中,所述确定模块,还具体用于:
[0033] 若未成功取得所述目标节点的所述资源锁,则在经过预设时长后,返回重新确定满足所述资源分配请求的目标节点;或者,若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的其它目标节点。
[0034] 在一种可能的实施方式中,所述装置还包括,资源锁释放模块,用于释放所述目标节点的所述资源锁。
[0035] 第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0036] 第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0037] 本公开实施例提供的一种资源分配的方法、装置及计算机存储介质,根据接收到的资源分配请求,确定满足该资源分配请求的目标节点,获取目标节点的资源锁,在获取到目标节点的资源锁后,基于该资源分配请求为目标作业分配目标节点的资源,并更新该目标节点的剩余资源信息,这里,通过为集群中每个节点添加资源锁,使多个调度器通过抢占目标节点的资源锁的方式,获取更新目标节点的资源信息的权限,从而实现事务的串行执行,保证任一调度器在更新目标节点的资源信息时,其他调度器不能操作该目标节点的资源信息,提高资源分配的准确性。
[0038] 为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

[0039] 为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0040] 图1示出了本公开实施例所提供的一种资源分配的方法的流程图;
[0041] 图2示出了本公开实施例所提供的一种资源分配的装置的结构示意图;
[0042] 图3示出了本公开实施例所提供的一种计算机设备的结构示意图。

具体实施方式

[0043] 为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0044] 经研究发现,在Hadoop YARN集群资源管理和调度基础平台中,根据用户提交的作业对应的作业类型以及资源需求条件,可能存在一个作业需要多个调度器分配同一节点的资源的情况,在上述情况中,当多个调度器同时为同一个作业分配该节点的资源时,可能会出现当调度器A成功为该作业分配资源后,由于此时调度器B可能会更新节点资源信息,因此会造成调度器A扣除该节点资源失败,导致调度器A更新节点资源失败,并导致用户获取到的该作业资源分配情况为脏数据的情况。
[0045] 基于上述研究,本公开实施例提供了一种资源分配的方法、装置及计算机存储介质,根据接收到的资源分配请求,确定满足该资源分配请求的目标节点,获取目标节点的资源锁,在获取到目标节点的资源锁后,基于该资源分配请求为目标作业分配目标节点的资源,并更新该目标节点的剩余资源信息,这里,通过为集群中每个节点加资源锁,使多个调度器通过抢占目标节点的资源锁的方式,获取更新目标节点的资源信息的权限,从而实现事务的串行执行,保证任一调度器在更新目标节点的资源信息时,其他调度器不能操作该目标节点的资源信息,提高资源分配的准确性。
[0046] 针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
[0047] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0048] 为便于对本实施例进行理解,首先对本公开实施例所公开的一种资源分配的方法进行详细介绍,本公开实施例所提供的资源分配的方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该资源分配的方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
[0049] 下面以执行主体为服务器为例对本公开实施例提供的资源分配的方法加以说明。
[0050] 实施例一
[0051] 在Hadoop YARN集群资源管理和调度基础平台中,根据用户提交的作业对应的作业类型以及资源需求信息,可能存在不同作业需要多个调度器调度同一个节点的资源的情况,也可能存在一个作业需要多个调度器调度多个节点的资源的情况,还可能存在一个作业需要多个调度器调度一个节点资源的情况。
[0052] 在具体实施中,若根据用户提交的作业对应的作业类型以及资源需求信息,确定当前为不同作业需要多个调度器调度同一个节点的资源的情况或为一个作业需要多个调度器调度多个节点的资源的情况时,可以通过保证多个线程的安全性的方式,完成多个调度器为不同作业分配同一节点的资源或完成多个调度器为同一作业分配多个节点的资源。
[0053] 在具体实施中,若根据用户提交的作业对应的作业类型以及资源需求信息,确定当前为一个作业需要多个调度器调度一个节点资源的情况时,多个调度器中的每个调度器可以通过抢占目标节点的资源锁的方式,实现为目标作业分配目标节点资源,具体描述可以如以下步骤S101~S104所示。
[0054] 参见图1所示,为本公开实施例提供的一种资源分配的方法的流程图,所述方法包括步骤S101~S104,其中:
[0055] S101、接收目标作业的资源分配请求。
[0056] 其中,目标作业的资源分配请求中可以包含该目标作业进行集群资源分配所需的多个调度器、以及该目标作业所需的资源大小等信息;其中,多个调度器可以包含队列调度器、容器调度器、公平调度器等。
[0057] 这里,集群资源管理和调度平台中可以包含多个资源管理器,且每个资源管理器中可以包含多个进行集群资源分配的调度器。
[0058] 在具体实施中,用户端向集群资源管理和调度平台提交目标作业,并将该目标作业的资源分配请求发送给集群资源管理和调度平台中的一个资源管理器(Resource Manager,RM)后,该RM将该资源分配请求分别推送给该目标作业进行集群资源分配所需的调度器,调度器接收上述资源分配请求。
[0059] S102、获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点。
[0060] 这里,集群资源管理和调度平台一般包括多个服务器,每个服务器为一个节点。
[0061] 其中,满足资源分配请求的目标节点可以包含一个节点,也可以包含多个节点。
[0062] 在具体实施中,当调度器为目标作业进行集群资源分配时,该调度器所在的RM可以实时获取到集群中的每个节点的可分配资源,并在获取到集群中每个节点的可分配资源后,将每个节点的可分配资源实时推送给为目标作业分配集群资源的调度器,调度器获取到集群中每个节点的可分配资源后,可以根据每个节点的可分配资源以及基于步骤S101接收到的目标作业的资源分配请求中的目标作业所需的资源大小,将可分配资源大于或等于目标作业所需资源的节点,作为满足目标作业的资源分配请求的目标节点。
[0063] 具体的,调度器会根据目标作业所需的资源大小以及目标节点的可分配资源,确定目标节点上为目标作业分配的至少一个容器。
[0064] 其中,目标作业可以包括多个任务,任务为目标作业的执行单元。每个任务可以使用一个资源容器container;容器container可以包含不同资源的资源量,比如4核CPU和8GB内存。
[0065] 在具体实施中,在基于步骤S102确定满足目标作业的资源分配请求的目标节点,并确定该目标节点上为目标作业分配的至少一个容器后,执行下述步骤S103。
[0066] S103、获取所述目标节点的资源锁。
[0067] 其中,该资源锁用于锁定目标节点的资源信息更新权限。
[0068] 这里,为了解决多个调度器同时为同一作业分配同一节点的资源时产生的事务问题,采用为集群中的每个节点加资源锁,使得每个节点每次的资源分配处理过程均为一个操作原子;其中,每个节点的资源锁可以为Java语言中提供的各种类型的锁,比如,可以为自旋锁、适应性自旋锁、偏向锁、公平锁、可重入锁等。
[0069] 在具体实施中,为目标作业分配目标节点资源的多个调度器同时抢占目标节点的资源锁,成功抢占到目标节点的资源锁的调度器具有对目标节点的资源信息的操作权限。
[0070] 在具体实施中,为目标作业分配目标节点资源的调度器在基于步骤S103获取到目标节点的资源锁后,可以通过执行下述步骤S104,为目标作业分配目标节点的资源。
[0071] S104、响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。
[0072] 其中,目标节点的剩余资源信息可以包括目标节点当前剩余资源量。
[0073] 在具体实施中,成功获取到目标节点的资源锁的调度器,根据在对单个container分配过程中遵守的作业内部原子操作原则、节点内部原子操作原则以及通过调度器为目标作业分配容器资源的整体过程作为一个操作原子的原则,将为目标作业分配的至少一个container添加到目标作业对应的container列表中,并在成功增加该目标作业对应的可用container后,根据为目标作业分配的container数量以及每个container资源量大小,扣除该目标节点的当前剩余资源量,从而更新该目标节点的当前剩余资源信息。
[0074] 这里,作业内部原子操作原则可以包括:将分配的container加到该作业已分配container列表中,并将上述分配结果反馈给RM,以使RM在下次接收到用户端针对目标作业的心跳时,从上述已分配container列表中领取上次分配的container反馈给该目标作业对应的用户端。
[0075] 其中,用户端针对目标作业向RM发送的心跳中可以包含资源分配请求、资源释放请求以及请求拉黑的节点标识等信息;其中,资源分配请求中可以包含该目标作业所需的资源大小、以及该目标作业指定的为其分配集群资源的调度器标识信息等信息;资源释放请求中可以包含请求释放的容器的标识信息等。
[0076] 这里,节点内部原子操作原则可以为:根据为上述作业分配的单个container大小以及已分配的container数量,扣除节点的剩余资源量。
[0077] 这里,由于目标作业可能需要多个container,因此调度器需要花费一定的时间才能完成对目标作业所需container的分配,所以调度器在每次为目标作业分配完一个container后,会将该container添加到目标作业对应的container列表中,并将上述分配结果反馈给RM,以使RM在下次接收到用户端发送的针对目标作业的心跳时,从上述container列表中领取上次分配的container并反馈给该目标作业对应的用户端。
[0078] 其中,container列表中可以包含多个container和每个container对应的标识。
[0079] 在具体实施中,在调度器为目标作业成功分配目标节点的资源,并更新该目标节点的剩余资源信息后,释放该目标节点对应的资源锁,以使其他调度器可以根据上述步骤S103‑步骤S104,通过抢占目标节点的资源锁的方式,为目标作业分配该目标节点的资源。
[0080] 本公开实施例中,根据接收到的资源分配请求,确定满足该资源分配请求的目标节点,获取目标节点的资源锁,在获取到目标节点的资源锁后,基于该资源分配请求为目标作业分配目标节点的资源,并更新该目标节点的剩余资源信息,这里,通过为集群中每个节点加资源锁,使多个调度器通过抢占目标节点的资源锁的方式,获取更新目标节点的资源信息的权限,从而实现事务的串行执行,保证任一调度器在更新目标节点的资源信息时,其他调度器不能操作该目标节点的资源信息,提高资源分配的准确性。
[0081] 在一种可选的实施方式中,若为目标作业分配目标节点资源的调度器未抢占到目标节点的资源锁(即未成功获取到更新目标节点的资源信息的操作权限),可以在经过预设时长后,返回重新确定满足该资源分配请求的目标节点;也可以直接返回重新确定满足该目标作业的资源分配请求的其它目标节点。
[0082] 这里,若为目标作业分配目标节点资源的调度器未抢占到之前目标节点中的资源锁时,可以等待预设时长,在等待预设时长后,之前目标节点的资源锁可能已经释放,此时可以重新将之前目标节点作为候选节点进行选择,重新选择的目标节点可能是之前目标节点,也可能不是。
[0083] 另外,若为目标作业分配目标节点资源的调度器未抢占到之前目标节点的资源锁时,在预设时长之前,当前抢占到该目标节点的资源锁的调度器完成为目标作业分配该目标节点的资源的可能性较小(也即释放资源锁的可能性较小),此时,如果立即进行目标节点的重新确定,可以将之前目标节点排除在候选节点之外,以降低抢占失败率。
[0084] 比如,若根据目标作业a的资源分配请求,确定需要调度器1为目标作业a分配目标节点A的资源,若调度器1未成功获取到目标节点A的资源锁,则调度器1可以在等待预设时长后,重新确定目标节点,此时可能仍然将目标节点A作为当前资源分配的节点,并根据步骤S103获取目标节点A的资源锁,然后根据步骤S104为目标作业a分配该目标节点A的资源。
[0085] 再比如,若根据目标作业a的资源分配请求,确定需要调度器1为目标作业a分配目标节点B上的资源,若调度器1未成功获取到目标节点B的资源锁,不等待预设时长,直接将除目标节点B外的其它节点作为候选节点,从中选择满足资源分配请求的目标节点,比如选择目标节点C作为当前资源分配的节点,并根据步骤S103获取目标节点C的资源锁,然后根据步骤S104为目标作业a分配目标节点C的资源。
[0086] 本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0087] 基于同一发明构思,本公开实施例中还提供了与资源分配的方法对应的资源分配的装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述资源分配的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
[0088] 实施例二
[0089] 参照图2所示,为本公开实施例提供的一种资源分配的装置200的结构示意图,所述装置包括:接收模块201、确定模块202、获取模块203和资源分配模块204;其中,接收模块201,用于接收目标作业的资源分配请求。
[0090] 确定模块202,用于获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点。
[0091] 获取模块203,用于获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点的资源信息更新权限。
[0092] 资源分配模块204,用于响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。
[0093] 本公开实施例中,根据接收到的资源分配请求,确定满足该资源分配请求的目标节点,获取目标节点的资源锁,在获取到目标节点的资源锁后,基于该资源分配请求为目标作业分配目标节点的资源,并更新该目标节点的剩余资源信息,这里,通过为集群中每个节点添加资源锁,使多个调度器通过抢占目标节点的资源锁的方式,获取更新目标节点的资源信息的权限,从而实现事务的串行执行,保证任一调度器在更新目标节点的资源信息时,其他调度器不能操作该目标节点的资源信息,提高资源分配的准确性。
[0094] 一种可能的实施方式中,确定模块202,具体用于基于所述可分配资源,确定待分配的至少一个容器分别对应的目标节点。
[0095] 一种可能的实施方式中,资源分配模块204,具体用于将为所述目标作业分配的容器添加到所述目标作业对应的容器列表中,以便下次接收到针对目标作业的心跳时,从所述容器列表中为所述目标作业提取上次分配的容器并反馈给所述目标作业对应的用户端。
[0096] 一种可能的实施方式中,确定模块202,还具体用于若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的目标节点。
[0097] 一种可能的实施方式中,确定模块202,还具体用于若未成功取得所述目标节点的所述资源锁,则在经过预设时长后,返回重新确定满足所述资源分配请求的目标节点;或者,若未成功取得所述目标节点的所述资源锁,则返回重新确定满足所述资源分配请求的其它目标节点。
[0098] 一种可能的实施方式中,资源分配的装置200还包括资源锁释放模块,用于释放所述目标节点的所述资源锁。
[0099] 关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
[0100] 基于同一技术构思,本申请实施例还提供了一种计算机设备。参照图3所示,为本申请实施例提供的计算机设备300的结构示意图,包括处理器301、存储器302、和总线303。其中,存储器302用于存储执行指令,包括内存3021和外部存储器3022;这里的内存3021也称内存储器,用于暂时存放处理器301中的运算数据,以及与硬盘等外部存储器3022交换的数据,处理器301通过内存3021与外部存储器3022进行数据交换,当计算机设备300运行时,处理器301与存储器302之间通过总线303通信,使得处理器301执行以下指令:
[0101] 接收目标作业的资源分配请求;获取多个节点的可分配资源,并基于所述可分配资源,确定满足所述资源分配请求的目标节点;获取所述目标节点的资源锁;其中,所述资源锁用于锁定所述目标节点的资源信息更新权限;响应于取得所述目标节点的所述资源锁,在所述目标节点上,基于所述资源分配请求为所述目标作业分配资源,并更新所述目标节点的剩余资源信息。
[0102] 其中,处理器301的具体处理流程可以参照上述方法实施例的记载,这里不再赘述。
[0103] 本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的资源分配的方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
[0104] 本公开实施例所提供的资源分配的方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的资源分配的方法的步骤,具体可参见上述方法实施例,在此不再赘述。
[0105] 本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
[0106] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0107] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0108] 另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0109] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read‑Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0110] 最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。