CN112286685A - 一种资源分配的方法及装置 - Google Patents
一种资源分配的方法及装置 Download PDFInfo
- Publication number
- CN112286685A CN112286685A CN202011187131.7A CN202011187131A CN112286685A CN 112286685 A CN112286685 A CN 112286685A CN 202011187131 A CN202011187131 A CN 202011187131A CN 112286685 A CN112286685 A CN 112286685A
- Authority
- CN
- China
- Prior art keywords
- resource
- application server
- allocated
- database
- resources
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013468 resource allocation Methods 0.000 title claims abstract description 67
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000012790 confirmation Methods 0.000 claims description 19
- 238000003860 storage Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 11
- 238000009826 distribution Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 241000282326 Felis catus Species 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种资源分配的方法及装置,包括:应用服务器获取用户客户端发起的资源获取请求,然后基于第一线程获取向用户客户端发送的第一资源并将第一资源在数据库的状态更改为已分配,其中,第一资源是应用服务器预先将数据库中的待分配资源加载至应用服务器的,应用服务器还基于第二线程确定资源队列中的资源数量不满足预设条件时,从数据库加载待分配资源至资源队列,应用服务器通过第一线程可以并行执行各用户客户端的资源获取请求,通过第二线程避免了应用服务器在为用户客户端提供资源时缺少资源的情况,进一步提高了分发资源的效率,需要说明的是,第一线程与第二线程异步同时进行,互不影响,确保了分发资源的及时性和高效性。
Description
技术领域
本发明涉及金融科技(Fintech)领域,尤其涉及一种资源分配的方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,大数据技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对大数据技术提出的更高的要求。
现有技术中,用户一般通过用户客户端发起领取券的请求,用户客户端再通过应用服务器从数据库(如MySQL)中获取为被领取的券,在用户领取券之后,由数据库登记领券人和领券时间,并修改券的状态为已领取。但这种方法在用户领券时,会抢占数据库的排他锁,使其他线程无法并行执行,即数据库每次只能给一个用户发放券,导致用户领取券的效率低下。
因此,现需要一种并行的领取券方法,提高用户领取券的效率。
发明内容
本发明实施例提供一种资源分配的方法及装置,用于提高分发资源的效率、及时性和高效性。
第一方面,本发明实施例提供一种资源分配的方法,包括:
应用服务器获取用户客户端发起的资源获取请求;
所述应用服务器基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配;所述第一资源是所述应用服务器预先将所述数据库中的待分配资源加载至所述应用服务器的;
所述应用服务器基于第二线程确定所述应用服务器的资源队列中的资源数量不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列;所述预设条件是根据所述应用服务器的吞吐量确定的。
上述技术方案中,由于应用服务器预先从数据库中加载了待分配资源,从而使得应用服务器内通过第一线程可以并行执行各用户客户端的资源获取请求,且应用服务器在确定向用户客户端提供的资源后,更改数据库中该资源的状态,避免了重复分配同一资源。同时,应用服务器通过第二线程确定是否需要继续向应用服务器加载待分配资源,避免了应用服务器在为用户客户端提供资源时缺少资源的情况,进一步提高了分发资源的效率,需要说明的是,第一线程与第二线程异步同时进行,互不影响,确保了分发资源的及时性和高效性。
可选的,所述应用服务器基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配,包括:
所述应用服务器基于所述第一线程,从所述应用服务器的资源队列获取第一资源;
所述应用服务器向所述数据库发送针对所述第一资源的更新状态请求;所述更新状态请求用于更新所述第一资源的分配状态;
所述应用服务器在接收到更新确认结果之后,将所述第一资源发送至所述用户客户端。
上述技术方案中,应用服务器基于第一线程在应用服务器的资源队列中确定出第一资源,应用服务器的资源队列是预先从数据库中加载的待分配资源,然后将第一资源的更新状态请求发送至数据库,并在接收到第一资源的更新确认结果之后,将第一资源发送至用户客户端,因为在向用户客户端发送资源时不需要加锁机制,也不需要向数据库获取第一资源,进而可以实现并行分发资源,且避免了重复分配同一资源,提高了分发资源的效率。
可选的,所述应用服务器的吞吐量包括所述应用服务器加载待分配资源的数量、加载时间和预设的分发待分配资源的速率;
所述预设条件是根据所述应用服务器的吞吐量确定的,包括:
所述应用服务器根据加载时间和预设的分发待分配资源的速率的乘积确定所述应用服务器加载待分配资源的数量;所述预设条件为所述应用服务器的资源队列中的资源数量大于所述应用服务器加载待分配资源的数量。
上述技术方案中,应用服务器是基于第二线程从数据库加载待分配资源至资源队列,与第一线程互不影响,在基于第一线程分发资源的同时,加载待分配资源的,以保证用户客户端在发起资源获取请求时,应用服务器加载待分配资源的数量大于加载时间和预设的分发待分配资源的速率的乘积,保证了每次加载待分配资源的数量大于在加载时间内分发的数量,应用服务器的资源队列中的资源数量大于应用服务器加载待分配资源的数量,保证了在加载过程中,应用服务器的资源队列中的待分配资源可以分发至用户客户端,周而复始,保证了资源队列中时刻存储有待分配资源,不影响对第一资源的分发,确保了分发资源的及时性。
可选的,所述应用服务器在不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列,包括:
所述应用服务器在不满足所述预设条件后,获取可重入锁;
所述应用服务器在获取所述可重入锁后,再次确定所述资源队列是否满足所述预设条件,若仍不满足,则从所述数据库加载待分配资源至所述资源队列。
上述技术方案中,通过应用服务器在获取可重入锁后再次确定所述资源队列是否满足所述预设条件,避免应用服务器在加载待分配资源之后,重复向数据库请求加载待分配资源。
可选的,继续从所述数据库加载待分配资源至所述应用服务器,包括:
所述应用服务器基于所述第二线程,获取所述数据库中资源分配表的分布式锁;所述资源分配表用于记录待分配资源的起始标识号;所述分布式锁用于排他读写所述资源分配表;
所述应用服务器基于所述分布式锁,从所述数据库的资源表中查询第一设定数量的待分配资源并加载所述第一设定数量的待分配资源至所述应用服务器;
所述应用服务器释放所述分布式锁。
上述技术方案中,应用服务器通过获取分布式锁之后才能加载待分配资源,确保各应用服务器有序加载待分配资源,且待分配资源不会重复地分配至不同的应用服务器,确保更新资源状态不冲突或不异常,并通过起始标识号提高查询待分配资源的效率,且因为分布式锁的锁定资源为资源分配表,不是数据库中待分配资源,降低了分布式锁的运行内存。
可选的,所述应用服务器确定所述数据库中待分配资源的数量少于第二预设数量,则减小所述第一预设数量;所述第二预设数量是根据所述第一预设数量和应用服务器的数量确定的。
上述技术方案中,应用服务器在确定数据库中的待分配资源的数量少于第二预设数量时,减小第一预设数量,即减少加载至资源队列中的为分配资源,防止其他应用服务器的资源队列在不满足预设条件时,数据库中出现无待分配资源的情况。
可选的,所述应用服务器接收到所述数据库发送的资源空标识,且所述资源队列为空,则向所述用户客户端发送停止资源获取请求。
上述技术方案中,通过停止资源获取请求,减少在无待分配资源时用户客户端发起的资源获取请求。
可选的,所述应用服务器若接收到针对所述数据库的重启指令,则清空所述资源队列;所述重启指令是所述数据库重启后将所述资源分配表中的起始标识号置为空之后发送的,所述数据库重启后,在发送重启指令之前不接收所述第一资源的更新状态请求和/或不发送所述第一资源的更新确认结果。
上述技术方案中,通过清空资源队列防止在数据库重启时不发送第一资源的更新确认结果,导致的因数据库重启之前,应用服务器基于第一线程将第一资源的更新状态请求发送至数据库,数据库重启时不发送第一资源的更新确认结果,是第一资源无法发送至用户客户端,进而无法使用,避免了资源浪费。
第二方面,本发明实施例提供一种资源分配的装置,包括:
获取模块,用于获取用户客户端发起的资源获取请求;
处理模块,用于基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配;所述第一资源是所述应用服务器预先将所述数据库中的待分配资源加载至所述应用服务器的;
基于第二线程确定所述应用服务器的资源队列中的资源数量不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列;所述预设条件是根据所述应用服务器的吞吐量确定的。
可选的,所述处理模块具体用于:
基于所述第一线程,从所述应用服务器的资源队列获取第一资源;
向所述数据库发送针对所述第一资源的更新状态请求;所述更新状态请求用于更新所述第一资源的分配状态;
在接收到更新确认结果之后,将所述第一资源发送至所述用户客户端。
可选的,所述应用服务器的吞吐量包括所述应用服务器加载待分配资源的数量、加载时间和预设的分发待分配资源的速率;
所述处理模块具体用于:
根据加载时间和预设的分发待分配资源的速率的乘积确定所述应用服务器加载待分配资源的数量;所述预设条件为所述应用服务器的资源队列中的资源数量大于所述应用服务器加载待分配资源的数量。
可选的,所述处理模块具体用于:
在不满足所述预设条件后,获取可重入锁;
在获取所述可重入锁后,再次确定所述资源队列是否满足所述预设条件,若仍不满足,则从所述数据库加载待分配资源至所述资源队列。
可选的,所述处理模块具体用于:
基于所述第二线程,获取所述数据库中资源分配表的分布式锁;所述资源分配表用于记录待分配资源的起始标识号;所述分布式锁用于排他读写所述资源分配表;
基于所述分布式锁,从所述数据库的资源表中查询第一设定数量的待分配资源并加载所述第一设定数量的待分配资源至所述应用服务器;
释放所述分布式锁。
可选的,所述处理模块还用于:
确定所述数据库中待分配资源的数量少于第二预设数量,则减小所述第一预设数量;所述第二预设数量是根据所述第一预设数量和应用服务器的数量确定的。
可选的,所述处理模块还用于:
接收到所述数据库发送的资源空标识,且所述资源队列为空,则向所述用户客户端发送停止资源获取请求。
可选的,所述处理模块还用于:
若接收到针对所述数据库的重启指令,则清空所述资源队列;所述重启指令是所述数据库重启后将所述资源分配表中的起始标识号置为空之后发送的,所述数据库重启后,在发送重启指令之前不接收所述第一资源的更新状态请求和/或不发送所述第一资源的更新确认结果。
第三方面,本发明实施例还提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述资源分配的方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述资源分配的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种分配券的方法的示意图;
图2为本发明实施例提供的一种***架构示意图;
图3为本发明实施例提供的一种资源分配的方法的流程示意图;
图4为本发明实施例提供的一种第一资源的示意图;
图5为本发明实施例提供的一种资源分配表的示意图;
图6为本发明实施例提供的一种资源分配的方法的示意图;
图7为本发明实施例提供的一种资源分配的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在现有技术中,分配资源一般通过以下两种方法,以分配券为例:
1、应用服务器在得到用户客户端发起的券请求之后,获取数据库的排他锁,并对数据库中所有未分配的券加锁,然后在数据库中选取状态为未分配的券,再得到券后,更新券的领券人和领券时间,然后将券发送至用户客户端。
2、图1示例性的示出了一种分配券的方法的示意图,如图1所示,应用服务器预先在数据库中查询出券,然后将券存入远程字典服务(如Redis,Remote DictionaryServer),然后在应用服务器得到用户客户端发起的请求券之后,在远程字典服务中领取券,然后再去数据库中更新券的状态,最后发送给用户客户端。
但上述方法中,方法1存在的弊端在于:应用服务器每次去数据库中获取券时,都要抢数据库的排他锁,以使其他线程无法并行执行,即所有券请求都是串行处理,无法并行处理。
方法2存在的弊端在于:应用服务器在同步数据库和远程字典服务之间的数据时,增加了复杂度和出错的可能性,例如,数据库中有100万张未分配券,应用服务器分成1000次的将数据同步到远程字典服务中,若在同步过程中,数据库重启,则有可能造成数据的丢失。且应用服务器在远程字典服务中领取券之后,远程字典服务将不会在存有该券,若数据库更新该券的状态失败,则无法在远程字典服务中再次领取该券,造成券的丢失。
因此需要一种资源分配的方法,降低资源浪费,提升资源分配的效率。
图2示例性的示出了本发明实施例所适用的一种***架构,该***架构包括用户客户端210、应用服务器220和数据库230。
其中,用户客户端210可以是在用户终端登录的,如用户在移动手机上登录的某宝,用户在平板电脑上登录的某猫,用户在个人电脑上登录的某东,用户客户端210用于发起资源获取请求,如优惠券的获取请求。
应用服务器220,用于获取资源获取请求,并在获取到资源获取请求之后,基于第一线程在应用服务器220的资源队列中获取向用户客户端210发送的第一资源,并向数据库230发送第一资源的更新状态请求,在得到数据库230发送的第一资源的更新确认结果之后,将第一资源发送至用户客户端210,需要说明的是,应用服务器220可以与多个用户客户端210进行数据连接,在此不做数量限定。
数据库230,用于为应用服务器220提供待分配的资源,并在接收到应用服务器220发送的第一资源的更新状态请求之后,更改数据库230内的第一资源的状态为已分配,并在更改之后,向应用服务器220发送第一资源的更新确认结果。
需要说明的是,上述图2所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图3示例性的示出了本发明实施例提供的一种资源分配的方法的流程,该流程可由资源分配的装置执行。
如图3所示,该流程具体包括:
步骤310,应用服务器获取用户客户端发起的资源获取请求。
本发明实施例中,用户在用户客户端点击请求事务,然后由用户客户端发起对应的资源获取请求,再由应用服务器获取用户客户端发起的资源获取请求,其中,资源获取请求可以是领取优惠券请求等。
步骤320,所述应用服务器基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配。
本发明实施例中,第一资源是应用服务器预先将数据库中的待分配资源加载至应用服务器的,第一资源是从应用服务器中获取的,应用服务器在获取第一资源后,会向数据库发送第一资源的更新状态请求,并接收数据库发送的更新确认结果。需要说明的是,第一资源的状态还包括分配人和分配时间,图4示例性的示出了一种第一资源的示意图,如图4所示,数据库在接收到应用服务器发送的第一资源的更新状态请求之后,数据库会更新分配人、分配时间和分配的状态。
进一步地,应用服务器基于第一线程,从应用服务器的资源队列获取第一资源,再向数据库发送针对第一资源的更新状态请求,其中,更新状态请求用于更新第一资源的分配状态,然后应用服务器在接收到更新确认结果之后,将第一资源发送至用户客户端。
本发明实施例中,应用服务器的资源队列可以是根据待分配资源的标识号进行排序得到的,如按照标识号由小到大规则排序待分配资源,应用服务器在获取第一资源时,可以将排序后的资源队列中的第一个(即标识号最小)待分配资源确定为第一资源,在确定第一资源之后,将第一资源在资源队列中弹出,示例性的,资源队列可以是根据其他规则对待分配资源进行排序得到的,也可以是无规则的。
步骤330,所述应用服务器基于第二线程确定所述应用服务器的资源队列中的资源数量不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列。
本发明实施例中,预设条件是根据所述应用服务器的吞吐量确定的,应用服务器在获取到用户客户端发起的资源获取请求之后,基于第二线程若确定出应用服务器的资源队列中的资源数量大于应用服务器加载待分配资源的数量,则从数据库中加载待分配资源至应用服务器。
进一步地,所述应用服务器的吞吐量包括应用服务器加载待分配资源的数量、加载时间和预设的分发待分配资源的速率,应用服务器根据加载时间和预设的分发待分配资源的速率的乘积确定应用服务器加载待分配资源的数量,预设条件为应用服务器的资源队列中的资源数量大于应用服务器加载待分配资源的数量。例如,应用服务器中可存在的待分配资源的最大数量值为1000,应用服务器每次加载待分配资源的数量为500,若应用服务器的资源队列中的资源数量大于500,则应用服务器满足预设条件,若应用服务器的资源队列中的资源数量不大于500,则应用服务器不满足预设条件。其中,应用服务器加载待分配资源的数量是根据加载时间和预设的分发待分配资源的速率的乘积确定的,例如加载时间为0.1秒,预设的分发待分配资源的速率为1000/秒(单位可根据具体资源进行确定,例如待分配资源为优惠券,则分发待分配资源的速率可以为1000张券/秒),则每0.1秒资源队列中分发的待分配资源的数量是100,因此应用服务器加载待分配资源的数量应大于100(如200),以保证每次加载待分配资源的数量大于在加载时间内分发的数量,否则会出现在分发待分配资源的过程中,应用服务器没有加载完成,资源队列中不存在待分配资源的情况。为了防止出现资源队列中无待分配资源,影响资源分配效率,一般设置缓冲,使应用服务器有足够的时间去加载待分配资源,可以增加应用服务器中可加载的待分配资源的最大数量值,增加预设条件的倍数等,如应用服务器加载待分配资源的数量为加载时间和预设的分发待分配资源的速率的乘积的n倍,n大于1。
应用服务器在确定不满足预设条件时,继续从数据库加载待分配资源至资源队列,具体的,应用服务器在不满足预设条件后,获取可重入锁,并在获取可重入锁后,再次确定资源队列是否满足预设条件,若仍不满足,则从数据库加载待分配资源至所述资源队列。
本发明实施例中,可重入锁包括计数功能,若当前的资源获取请求,应用服务器不满足预设条件,则应用服务器的第二线程获取可重入锁,然后从数据库加载待分配资源,在加载待分配资源过程中,应用服务器获取到了针对当前的下一个资源获取请求,则会再次触发第二线程获取可重入锁,此时可重入锁中的计数功能加1,即运行两次第二线程(运行第一次的第一线程在可重入锁释放后再对第二线程加锁,运行第二次第二线程),防止第一次运行的第二线程加载待分配资源失败,不再加载待分配资源的情况,同时,再次确定资源队列是否满足预设条件防止第二次运行的第二线程重复加载待分配资源的情况,例如第一次运行的第二线程加载待分配资源成功,则第二次运行的第二线程再次确定资源队列时,是满足预设条件的(因为加载待分配资源成功),则释放可重入锁。
进一步地,应用服务器基于第二线程,获取数据库中资源分配表的分布式锁,其中,资源分配表用于记录待分配资源的起始标识号,分布式锁用于排他读写资源分配表。然后应用服务器基于分布式锁,从数据库的资源表中查询第一设定数量的待分配资源并加载第一设定数量的待分配资源至应用服务器,加载完毕后,应用服务器释放分布式锁。
在本发明实施例中,图5示例性的示出了一种资源分配表的示意图,如图5所示,资源分配表用于记录访问资源分配表的应用服务器,资源分配表中的行锁用于对应用服务器的第二线程进行加锁,以使应用服务器查询数据库中的待分配资源,其中,行锁是分布式锁的具体实现方式,数据库中资源分配表的分布式锁用于实现多个应用服务器访问资源分配表。例如,a应用服务器访问资源分配表时,资源分配表对a应用服务进行记录,并在无其他应用服务器访问的情况下,资源分配表的行锁对a应用服务器的第二线程进行加锁,以使a应用服务器查询数据库中的待分配资源,并进行加载。在a应用服务器加载待分配资源的过程中,根据分布式锁,b应用服务器也可以访问资源分配表,且资源分配表会记录b应用服务器,并在a应用服务释放行锁之后,通过资源分配表中的行锁对b应用服务器的第二线程进行加锁,以使b应用服务器查询数据库中的待分配资源。
或者,根据分布式锁的应用程序协调服务(如ZooKeeper)记录多个访问的应用服务,并有序的加锁访问资源分配表的应用服务器,以使加锁后的应用服务器对资源分配表和数据库中的待分配资源进行读写,以及使其他线程置于等待队列中,待上一个线程释放分布式锁之后,按照等待队列中的其他线程访问顺序对线程进行加锁。例如,应用服务1的第二线程在分布式加锁过程(即加载待分配资源的过程)中,应用服务2的第二线程访问资源分配表,则分布式应用程序协调服务会记录应用服务2的第二线程为下一个加锁的线程,以此类推,根据访问的时间使其他线程有序排队访问,减少线程的碰撞。
需要说明的是,资源分配表中包括起始标识号和批次号,批次号包括待分配资源的类型,例如,10元的生活用品优惠券的批次号、100元的电子产品优惠券的批次号等。
具体的,应用服务器基于第二线程获取资源分配表的分布式锁之后,还需要确定资源分配表的起始标识号是否为空,若起始标识号为空,则按照数据库中的待分配资源的顺序,从首个待分配资源读取第一预设数量的待分配资源,其中,数据库中的待分配资源是根据待分配资源的标识号排序后得到的,例如,待分配资源的标识号为1-1000,第一预设数量为200,则应用服务器加载标识号为1-200的待分配资源。若确定起始标识号不为空,则按照始标识号的下一个待分配资源读取第一预设数量的待分配资源。例如,起始标识号为200,则应用服务器加载标识号为201-400的待分配资源。需要说明的是,应用服务器在加载待分配资源之后,修改起始标识号为加载的待分配资源最后一个标识号,如修改起始标识号为400。
示例性地,应用服务器确定数据库中待分配资源的数量少于第二预设数量,则减小第一预设数量,其中,第二预设数量是根据第一预设数量和应用服务器的数量确定的。
本发明实施例中,为了防止在数据库中的待分配资源的数量不足第一预设数量且大于0时,无法使应用服务器加载待分配资源,通过减少第一预设数量,使数据库中的待分配资源全部发送至应用服务器。例如,若应用服务器的第一预设数量为200,数据库向5个应用服务器提供待分配资源,则第二预设数量可以是1000,在应用服务器确定数据库中待分配资源的数量少于1000时,将第一预设数量设为上一个第一预设数量的一半,为100,以此类推,在应用服务器确定数据库中待分配资源的数量少于500时,第一预设数量设为50,在应用服务器确定数据库中待分配资源的数量少于250时,第一预设数量设为25,直至数据库中无待分配资源。
示例性的,应用服务器若接收到数据库发送的资源空标识,且资源队列为空,则向用户客户端发送停止资源获取请求。
本发明实施例中,停止资源获取请求还可以设置缓存时间,在缓存时间内,控制用户客户端不再发起资源获取请求。例如,缓存时间为5分钟,在应用服务器若接收到数据库发送的资源空标识,且资源队列为空之后,向用户客户端发送停止资源获取请求,则用户客户端在5分钟内无法发起资源获取请求。
示例性的,应用服务器若接收到针对数据库的重启指令,则清空资源队列,其中,重启指令是数据库重启后将资源分配表中的起始标识号置为空之后发送的,数据库重启后,在发送重启指令之前不接收第一资源的更新状态请求和/或不发送第一资源的更新确认结果。
具体的,应用服务器在接收到资源获取请求之后,基于第一线程从应用服务器的资源队列获取第一资源,然后向数据库发送第一资源的更新状态请求,而数据库接收到第一资源的更新状态请求且重启时,不发送第一资源的更新确认结果,和/或无法接收到后续第一资源的更新状态请求,因此应用服务器内的待分配资源无法发送至用户客户端,应用服务器在接收到重启指令之后,清空资源队列,避免了资源浪费。
本发明实施例中,由于应用服务器预先从数据库中加载了待分配资源,从而使得应用服务器内通过第一线程可以并行执行各用户客户端的资源获取请求,且应用服务器在确定向用户客户端提供的资源后,更改数据库中该资源的状态,避免了重复分配同一资源。同时,应用服务器通过第二线程确定是否需要继续向应用服务器加载待分配资源,避免了应用服务器在为用户客户端提供资源时缺少资源的情况,还通过应用服务器的可重入锁机制对第二线程加锁,避免应用服务器在加载待分配资源之后,重复向数据库请求加载待分配资源,又通过获取分布式锁之后才能加载待分配资源,确保各应用服务器有序加载待分配资源,且待分配资源不会重复地分配至不同的应用服务器,确保更新资源状态不冲突或不异常,进一步提高了分发资源的效率,需要说明的是,第一线程与第二线程异步同时进行,互不影响,确保了分发资源的及时性和高效性。
为了更好的解释上述技术方案,图6示例性的示出了本发明实施例所适用的一种资源分配的方法的示意图,如图6所示,该流程包括:
步骤610,获取资源获取请求。
资源获取请求可以是获取优惠券,优惠券包括标识号,应用服务器在得到用户发起的资源分配请求之后,同时执行步骤620和步骤630。
步骤620,获取第一资源。
应用服务器获取资源队列中的第一个优惠券,作为第一资源,然后删除该优惠券,然后执行步骤621,资源队列是按照优惠券的标识号由小到大的规则排序后得到的。
步骤621,发送更新状态请求。
应用服务器将第一资源的更新状态请求发送至数据库,以使数据库根据第一资源的更新状态请求对数据库中的第一资源的状态进行更新,如分配人、分配时间和分配的状态等,然后执行步骤622。
步骤622,接收更新确认结果。
应用服务器接收数据库返回的第一资源的更新确认结果,然后执行步骤623。
步骤623,发送第一资源。
应用服务器将第一资源发送至用户客户端。
步骤630,确定若满足预设条件,则获取可重入锁。
应用服务器中可加载的待分配资源的最大数量值为500,在获取到资源获取请求之后,判断资源队列中的待分配资源的数量是否大于250(预设条件),若是,则应用服务器基于第二线程获取可重入锁,并在获取可重入锁之后。执行步骤631。
步骤631,若再次确定满足预设条件,则获取分布式锁。
应用服务器再次判断资源队列中的待分配资源的数量是否大于250(预设条件),若是,则应用服务器基于第二线程获取资源分配表的分布式锁。
步骤632,接收起始标识号。
应用服务器基于第二线程获取资源分配表的分布式锁之后,接收数据库返回的资源分配表的起始标识号400。
步骤633,查询待分配资源。
应用服务器根据起始标识号400和第一设定数量(200),查询待分配资源的标识号为401-600。
步骤634,接收查询结果。
步骤635,加载待分配资源。
本发明实施例中,本发明实施例中,由于应用服务器预先从数据库中加载了待分配资源,从而实现可以并行执行各用户客户端的资源获取请求。同时,通过应用服务器的可重入锁机制对第二线程加锁,避免应用服务器在加载待分配资源之后,重复向数据库请求加载待分配资源,又通过获取分布式锁之后才能加载待分配资源,确保各应用服务器有序加载待分配资源,且待分配资源不会重复地分配至不同的应用服务器,确保更新资源状态不冲突或不异常,进一步提高了分发资源的效率,重要的是,第一线程与第二线程异步同时进行,互不影响,确保了分发资源的及时性和高效性。
基于相同的技术构思,图7示例性的示出了本发明实施例提供的一种资源分配的装置的结构,该装置可以执行资源分配的方法的流程。
如图7所示,该装置具体包括:
获取模块710,用于获取用户客户端发起的资源获取请求;
处理模块720,用于基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配;所述第一资源是所述应用服务器预先将所述数据库中的待分配资源加载至所述应用服务器的;
基于第二线程确定所述应用服务器的资源队列中的资源数量不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列;所述预设条件是根据所述应用服务器的吞吐量确定的。
可选的,所述处理模块720具体用于:
基于所述第一线程,从所述应用服务器的资源队列获取第一资源;
向所述数据库发送针对所述第一资源的更新状态请求;所述更新状态请求用于更新所述第一资源的分配状态;
在接收到更新确认结果之后,将所述第一资源发送至所述用户客户端。
可选的,所述应用服务器的吞吐量包括所述应用服务器加载待分配资源的数量、加载时间和预设的分发待分配资源的速率;
所述处理模块720具体用于:
根据加载时间和预设的分发待分配资源的速率的乘积确定所述应用服务器加载待分配资源的数量;所述预设条件为所述应用服务器的资源队列中的资源数量大于所述应用服务器加载待分配资源的数量。
可选的,所述处理模块720具体用于:
在不满足所述预设条件后,获取可重入锁;
在获取所述可重入锁后,再次确定所述资源队列是否满足所述预设条件,若仍不满足,则从所述数据库加载待分配资源至所述资源队列。
可选的,所述处理模块720具体用于:
基于所述第二线程,获取所述数据库中资源分配表的分布式锁;所述资源分配表用于记录待分配资源的起始标识号;所述分布式锁用于排他读写所述资源分配表;
基于所述分布式锁,从所述数据库的资源表中查询第一设定数量的待分配资源并加载所述第一设定数量的待分配资源至所述应用服务器;
释放所述分布式锁。
可选的,所述处理模块720还用于:
确定所述数据库中待分配资源的数量少于第二预设数量,则减小所述第一预设数量;所述第二预设数量是根据所述第一预设数量和应用服务器的数量确定的。
可选的,所述处理模块720还用于:
接收到所述数据库发送的资源空标识,且所述资源队列为空,则向所述用户客户端发送停止资源获取请求。
可选的,所述处理模块720还用于:
若接收到针对所述数据库的重启指令,则清空所述资源队列;所述重启指令是所述数据库重启后将所述资源分配表中的起始标识号置为空之后发送的,所述数据库重启后,在发送重启指令之前不接收所述第一资源的更新状态请求和/或不发送所述第一资源的更新确认结果。
基于相同的技术构思,本发明实施例还提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述资源分配的方法。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述资源分配的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种资源分配的方法,其特征在于,包括:
应用服务器获取用户客户端发起的资源获取请求;
所述应用服务器基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配;所述第一资源是所述应用服务器预先将所述数据库中的待分配资源加载至所述应用服务器的;
所述应用服务器基于第二线程确定所述应用服务器的资源队列中的资源数量不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列;所述预设条件是根据所述应用服务器的吞吐量确定的。
2.如权利要求1所述的方法,其特征在于,所述应用服务器基于第一线程获取向所述用户客户端发送的第一资源并将所述第一资源在数据库的状态更改为已分配,包括:
所述应用服务器基于所述第一线程,从所述应用服务器的资源队列获取第一资源;
所述应用服务器向所述数据库发送针对所述第一资源的更新状态请求;所述更新状态请求用于更新所述第一资源的分配状态;
所述应用服务器在接收到更新确认结果之后,将所述第一资源发送至所述用户客户端。
3.如权利要求1所述的方法,其特征在于,所述应用服务器的吞吐量包括所述应用服务器加载待分配资源的数量、加载时间和预设的分发待分配资源的速率;
所述预设条件是根据所述应用服务器的吞吐量确定的,包括:
所述应用服务器根据加载时间和预设的分发待分配资源的速率的乘积确定所述应用服务器加载待分配资源的数量;所述预设条件为所述应用服务器的资源队列中的资源数量大于所述应用服务器加载待分配资源的数量。
4.如权利要求3所述的方法,其特征在于,所述应用服务器在不满足所述预设条件时,继续从所述数据库加载待分配资源至所述资源队列,包括:
所述应用服务器在不满足所述预设条件后,获取可重入锁;
所述应用服务器在获取所述可重入锁后,再次确定所述资源队列是否满足所述预设条件,若仍不满足,则从所述数据库加载待分配资源至所述资源队列。
5.如权利要求1至4任一项所述的方法,其特征在于,继续从所述数据库加载待分配资源至所述应用服务器,包括:
所述应用服务器基于所述第二线程,获取所述数据库中资源分配表的分布式锁;所述资源分配表用于记录待分配资源的起始标识号;所述分布式锁用于排他读写所述资源分配表;
所述应用服务器基于所述分布式锁,从所述数据库的资源表中查询第一设定数量的待分配资源并加载所述第一设定数量的待分配资源至所述应用服务器;
所述应用服务器释放所述分布式锁。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
所述应用服务器确定所述数据库中待分配资源的数量少于第二预设数量,则减小所述第一预设数量;所述第二预设数量是根据所述第一预设数量和应用服务器的数量确定的。
7.如权利要求5所述的方法,其特征在于,所述方法还包括:
所述应用服务器接收到所述数据库发送的资源空标识,且所述资源队列为空,则向所述用户客户端发送停止资源获取请求。
8.如权利要求5所述的方法,其特征在于,所述方法还包括:
所述应用服务器若接收到针对所述数据库的重启指令,则清空所述资源队列;所述重启指令是所述数据库重启后将所述资源分配表中的起始标识号置为空之后发送的,所述数据库重启后,在发送重启指令之前不接收所述第一资源的更新状态请求和/或不发送所述第一资源的更新确认结果。
9.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011187131.7A CN112286685A (zh) | 2020-10-30 | 2020-10-30 | 一种资源分配的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011187131.7A CN112286685A (zh) | 2020-10-30 | 2020-10-30 | 一种资源分配的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112286685A true CN112286685A (zh) | 2021-01-29 |
Family
ID=74352403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011187131.7A Pending CN112286685A (zh) | 2020-10-30 | 2020-10-30 | 一种资源分配的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286685A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590641A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 一种银行债券自动报价***的分布式处理方法及装置 |
CN115269207A (zh) * | 2022-09-29 | 2022-11-01 | 浙江省公众信息产业有限公司无线运营分公司 | 一种用于vCPE网元分配资源的方法和*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293946A (zh) * | 2016-08-16 | 2017-01-04 | 东软集团股份有限公司 | 资源获取的方法及服务器 |
CN110231992A (zh) * | 2019-06-06 | 2019-09-13 | 深圳前海微众银行股份有限公司 | 分布式资源分配方法、装置、设备及可读存储介质 |
CN111709723A (zh) * | 2020-07-20 | 2020-09-25 | 港胜技术服务(深圳)有限公司 | Rpa业务流程智能处理方法、装置、计算机设备和存储介质 |
CN111782391A (zh) * | 2020-06-29 | 2020-10-16 | 北京达佳互联信息技术有限公司 | 资源分配方法、装置、电子设备和存储介质 |
-
2020
- 2020-10-30 CN CN202011187131.7A patent/CN112286685A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293946A (zh) * | 2016-08-16 | 2017-01-04 | 东软集团股份有限公司 | 资源获取的方法及服务器 |
CN110231992A (zh) * | 2019-06-06 | 2019-09-13 | 深圳前海微众银行股份有限公司 | 分布式资源分配方法、装置、设备及可读存储介质 |
CN111782391A (zh) * | 2020-06-29 | 2020-10-16 | 北京达佳互联信息技术有限公司 | 资源分配方法、装置、电子设备和存储介质 |
CN111709723A (zh) * | 2020-07-20 | 2020-09-25 | 港胜技术服务(深圳)有限公司 | Rpa业务流程智能处理方法、装置、计算机设备和存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113590641A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 一种银行债券自动报价***的分布式处理方法及装置 |
CN115269207A (zh) * | 2022-09-29 | 2022-11-01 | 浙江省公众信息产业有限公司无线运营分公司 | 一种用于vCPE网元分配资源的方法和*** |
CN115269207B (zh) * | 2022-09-29 | 2022-12-23 | 浙江省公众信息产业有限公司无线运营分公司 | 一种用于vCPE网元分配资源的方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2465634C2 (ru) | Система обработки инструкций в режиме реального времени | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
CN106170016A (zh) | 一种处理高并发数据请求的方法和*** | |
US9448861B2 (en) | Concurrent processing of multiple received messages while releasing such messages in an original message order with abort policy roll back | |
CN107451853B (zh) | 一种红包实时派发的方法、装置、***及存储介质 | |
CN112286685A (zh) | 一种资源分配的方法及装置 | |
CN110008041B (zh) | 一种消息处理方法及装置 | |
US10108456B2 (en) | Accelerated atomic resource allocation on a multiprocessor platform | |
CN110806942B (zh) | 数据处理的方法和装置 | |
CN109150759B (zh) | 一种渐进式非阻塞机会资源预留方法及*** | |
CN113849320A (zh) | 开发方法、控制方法及计算设备 | |
CN113448701A (zh) | 一种多进程外呼控制方法、***、电子设备及存储介质 | |
CN111752961A (zh) | 一种数据处理方法及装置 | |
CN113760858B (zh) | 内存库数据动态迁移方法、装置、计算设备及存储设备 | |
JP2804478B2 (ja) | タスク制御方式及びオンライン・トランザクション・システム | |
CN114168626A (zh) | 一种数据库操作的处理方法、装置、设备及介质 | |
CN113849286A (zh) | 对账数据导入方法、***、设备及计算机可读存储介质 | |
CN110222016B (zh) | 一种文件处理方法及装置 | |
CN116547660A (zh) | 使用全局时间戳的分布式数据库事务的方法和装置 | |
CN113992684B (zh) | 发送数据的方法、装置、处理节点、存储介质及*** | |
CN115756768B (zh) | 基于saga的分布式事务处理方法、装置、设备及介质 | |
CN112671666B (zh) | Io处理方法及装置 | |
WO2024109003A1 (zh) | 一种任务处理方法、装置及节点 | |
CN117931427A (zh) | 基于本地内存锁和分布式锁的资源数据处理方法及*** | |
CN115328646A (zh) | 一种临界资源调度方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |