CN112860414B - 一种分布式系统并发控制的方法、装置、设备及存储介质 - Google Patents
一种分布式系统并发控制的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112860414B CN112860414B CN202110343473.1A CN202110343473A CN112860414B CN 112860414 B CN112860414 B CN 112860414B CN 202110343473 A CN202110343473 A CN 202110343473A CN 112860414 B CN112860414 B CN 112860414B
- Authority
- CN
- China
- Prior art keywords
- target account
- operation request
- serial number
- token serial
- token
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 72
- 230000015654 memory Effects 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000004622 sleep time Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本文提供了一种分布式系统并发控制的方法、装置、设备及存储介质,其中方法包括:根据目标账号操作请求的递增参数和目标账号的并发阈值,确定目标账号操作请求的起始令牌序号;判断目标账号操作请求的起始令牌序号是否被占用;如果目标账号操作请求的起始令牌序号未被占用,则目标账号操作请求占用该起始令牌序号,并执行目标账号操作请求;如果目标账号操作请求的起始令牌序号被占用,则目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行目标账号操作请求;目标账号操作请求执行完毕后,释放起始令牌序号或所述空闲令牌序号。本文提供的方法能够提高并发控制的精准度,减少热点账户的出现。
Description
技术领域
本申请涉及金融科技领域,特别地,涉及一种分布式系统并发控制的方法、装置、设备及存储介质。
背景技术
在银行或第三方支付系统的账务数据库的处理中,数据从一个账户转出,或者有数据转入一个账户,账户都会收到记账请求,并进行记账处理的过程。为了保证账户不被其他操作请求影响数据的准确性,在进行记账处理时,会先对账户的资源加锁,记账处理完毕后会自动释放锁。随着账务处理业务量的增大,账务数据库中的账户常常会在瞬间产生多个并发操作,但一个账户对应的所有并发线程中只有一个线程能够持有当前账户的资源锁,其他线程必须等待该锁被释放后再逐一进行记账处理,这样该账户将会被频繁加锁释锁,使该账户成为账务数据库的热点账户,热点账户会产生性能瓶颈点,严重影响账务数据库的性能。
在分布式架构体系中,经常要做一些并发控制来防止热点账户的出现,对同一账号的操作请求需要限制并发数,不产生性能瓶颈点的最大值,我们将这个值称为并发阈值。现有技术中,大多利用Redis(高性能标识号-value存储系统)缓存中的计数器功能来计数当前账号正在处理的并发数。在操作请求前计数器自增,判断此时计数器的值是否超过并发阈值,如果没有超过则处理操作请求,操作请求处理完毕后计数器自减;如果超过则计数器自减,然后经过短暂的sleep(睡眠)后重试或者立即重试。
但是,当线程数远远超过并发阈值,利用现有技术来控制并发时,如果设定短暂的sleep时间,计数器在自减释放时又有大量的线程使其自增,将会导致计数器很难降到并发阈值内;而如果sleep时间过长,会造成计数器的值大大低于并发阈值,无法做到合理的使用,导致并发控制失真,且实际操作中难以根据交易量实时调整sleep时间。
因此现在亟需一种分布式系统并发控制的方法,能够提高并发控制的精准度,减少热点账户的出现。
发明内容
本文实施例的目的在于提供一种分布式系统并发控制的方法、装置、设备及存储介质,以提高并发控制的精准度,减少热点账户的出现。
为达到上述目的,一方面,本文实施例提供了一种分布式系统并发控制的方法,所述方法包括:
根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号;
判断所述目标账号操作请求的起始令牌序号是否被占用;
如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求;
如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求;
所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号。
优选的,所述目标账号操作请求的递增参数,包括:
所述目标账号操作请求的业务序号数值或请求时刻数值。
优选的,所述根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号,包括:
根据所述目标账号操作请求的递增参数和所述目标账号的并发阈值,按照顺时针方式或逆时针方式计算所述目标账号操作请求的初始值Q;
将Q+N设置为所述目标账号操作请求的起始令牌序号。
优选的,所述冲突换令牌规则,包括:
根据所述起始令牌序号,开始轮询目标账号的令牌序号集合中的令牌序号,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号。
优选的,所述目标账号的令牌序号集合,包括:从0+N开始,直至0+(M-1)+N的所有整数;
其中,N为任意整数,M为目标账号的并发阈值。
优选的,若按照顺时针方式计算所述目标账号操作请求的初始值Q,则按照从0+(M-1)+N至0+N的方向逆时针轮询目标账号的令牌序号集合中的令牌序号,当0+N轮询完毕后,从0+(M-1)+N继续轮询;
若按照逆时针方式计算所述目标账号操作请求的初始值Q,则按照从0+N至0+(M-1)+N的方向顺时针轮询目标账号的令牌序号集合中的令牌序号,当0+(M-1)+N轮询完毕后,从0+N继续轮询。
优选的,还包括:
所述目标账号操作请求开始执行时开始计时;
当所述计时时间大于所述设定时间时,释放所述目标账号操作请求的所述起始令牌序号或所述空闲令牌序号。
另一方面,本文实施例提供了一种分布式系统并发控制的装置,所述装置包括:
确定模块:用于根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号;
判断模块:用于判断所述目标账号操作请求的起始令牌序号是否被占用;
未被占用模块:如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求;
被占用模块:如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求;
释放模块:所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号。
又一方面,本文实施例还提供了一种计算机设备,包括存储器、处理器、以及存储在所述存储器上的计算机程序,所述计算机程序被所述处理器运行时,执行上述任意一项所述方法的指令。
又一方面,本文实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被计算机设备的处理器运行时,执行上述任意一项所述方法的指令。
由以上本文实施例提供的技术方案可见,本文实施例通过每一个操作请求均对应一个起始令牌序号,尽可能使得每一个操作请求均能够占用一个空闲的令牌序号,当线程并发程度较低时,可以减少热点账户的产生几率。当线程并发程度较高时,其中某一操作请求对应的起始令牌序号可能已被其他操作请求占用,此时可以根据起始令牌序号和冲突换令牌规则,使得该操作请求占用空闲令牌序号,以此避免现有技术中目标账号进入sleep(睡眠)后重试时难以控制sleep时间的问题。通过上述方式,可以高效的分配令牌序号,进而提高并发控制的精准度,使得每一操作请求更快速高效的占用到令牌序号,减少热点账户的出现。
为让本文的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本文实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本文的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本文实施例提供的一种分布式系统并发控制的方法的流程示意图;
图2示出了本文实施例提供的第一确定方法的流程示意图;
图3示出了本文实施例提供的第二确定方法的流程示意图;
图4示出了本文实施例提供的目标账号的令牌序号集合的结构示意图;
图5示出了本文实施例提供的一种分布式系统并发控制的装置的模块结构示意图;
图6示出了本文实施例提供的计算机设备的结构示意图。
附图符号说明:
100、确定模块;
200、判断模块;
300、未被占用模块;
400、被占用模块;
500、释放模块;
602、计算机设备;
604、处理器;
606、存储器;
608、驱动机构;
610、输入/输出模块;
612、输入设备;
614、输出设备;
616、呈现设备;
618、图形用户接口;
620、网络接口;
622、通信链路;
624、通信总线。
具体实施方式
下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。
在分布式架构体系中,经常要做一些并发控制来防止热点账户的出现,对同一账号的操作请求需要限制并发数,不产生性能瓶颈点的最大值,我们将这个值称为并发阈值。现有技术中,大多利用Redis(高性能标识号-value存储系统)缓存中的计数器功能来计数当前账号正在处理的并发数。在操作请求前计数器自增,判断此时计数器的值是否超过并发阈值,如果没有超过则处理操作请求,操作请求处理完毕后计数器自减;如果超过则计数器自减,然后经过短暂的sleep(睡眠)后重试或者立即重试。
但是,当线程数远远超过并发阈值,利用现有技术来控制并发时,如果设定短暂的sleep时间,计数器在自减释放时又有大量的线程使其自增,将会导致计数器很难降到并发阈值内;而如果sleep时间过长,会造成计数器的值大大低于并发阈值,无法做到合理的使用,导致并发控制失真,且实际操作中难以根据交易量实时调整sleep时间。
为了解决上述问题,本文实施例提供一种分布式系统并发控制的方法。图1是本文实施例提供的一种分布式系统并发控制的方法的步骤示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或装置产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。
参照图1,一种分布式系统并发控制的方法,所述方法包括:
S101:根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号。
S102:判断所述目标账号操作请求的起始令牌序号是否被占用。
S103:如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求。
S104:如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求。
S105:所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号。
每一个目标账号操作请求均对应一个起始令牌序号,(目标账号操作请求即为对应一个目标账号中的一个操作请求,为使得实施例的描述更为简洁,在后文中均以操作请求来指代目标账号操作请求。)尽可能使得每一个操作请求均能够占用一个空闲的令牌序号,当线程并发程度较低时,可以减少热点账户的产生几率。当线程并发程度较高时,其中某一操作请求对应的起始令牌序号可能已被其他操作请求占用,此时可以根据起始令牌序号和冲突换令牌规则,使得该操作请求占用空闲令牌序号,以此避免现有技术中目标账号进入sleep(睡眠)后重试时难以控制sleep时间的问题。通过上述方式,可以高效的分配令牌序号,进而提高并发控制的精准度,使得每一操作请求更快速高效的占用到令牌序号,减少热点账户的出现。
其中,一个账号对应一个账户,账号是账户的唯一标志,目标账号即为正在进行记账处理的账户对应的账号。占用起始令牌序号或占用空闲令牌序号代表:起始令牌序号或空闲令牌序号对应一个操作请求,该操作请求可以执行,并且该起始令牌序号或空闲令牌序号无法被其他操作请求占用。释放起始令牌序号或空闲令牌序号代表:原来对应起始令牌序号或空闲令牌序号的操作请求执行结束,该起始令牌序号或空闲令牌序号处于空闲状态,可以被其他操作请求占用。
对于每一个目标账号来说,每一个目标账号均对应一个令牌序号集合,其中令牌序号集合是通过目标账号的并发阈值确定的。
在本文实施例中,所述目标账号的令牌序号集合,包括:从0+N开始,直至0+(M-1)+N的所有整数。
其中,N为任意整数,M为目标账号的并发阈值。
具体的,N可以为0、正整数或负整数。如果N为0,则目标账号的令牌序号集合包括从0开始,至并发阈值减一,令牌序号的个数与并发阈值的数值大小相同。对于每个目标账号来说,每个目标账号对应的N的取值可以相同也可以不同,多个目标账号之间N的取值没有相关性。
在本文实施例中,所述目标账号操作请求的递增参数,包括:
所述目标账号操作请求的业务序号数值或请求时刻数值。
其中在目标账号的任意两个操作请求中,所述请求时刻在后的操作请求对应的业务序号数值大于所述请求时刻在前的操作请求对应的业务序号数值。
具体的,递增参数是业务序号数值或请求时刻数值,其中业务序号数值可以是业务流水号,请求时刻数值可以是操作请求对应的纳秒或毫秒时刻,对于目标账号的任意两个操作请求来说,无论是业务序号数值还是请求时刻数值,都不会相同,并且都是递增的数值。这样的数值特征可以确保后续在确定起始令牌序号时,各个操作请求对应的起始令牌序号不相同且尽可能的均匀分散开,以此达到高效分配令牌序号的目的。
在本文实施例中,所述根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号,包括:
根据所述目标账号操作请求的递增参数和所述目标账号的并发阈值,按照顺时针方式或逆时针方式计算所述目标账号操作请求的初始值Q。
将Q+N设置为所述目标账号操作请求的起始令牌序号。
参照图2,具体的,按照顺时针方式计算所述目标账号操作请求的初始值Q为第一确定方法,所述第一确定方法,包括:
S201:通过所述操作请求的递增参数对所述并发阈值取模,得到所述操作请求的初始值Q;
S202:所述操作请求的起始令牌序号为Q+N;
参照图3,按照逆时针方式计算所述目标账号操作请求的初始值Q为第二确定方法,所述第二确定方法,包括:
S301:通过标定值减去所述操作请求的递增参数,得到所述操作请求的中间值,其中所述标定值大于所述操作请求的递增参数;
S302:通过所述操作请求的中间值对所述并发阈值取模,得到所述操作请求的初始值Q;
S303:所述操作请求的起始令牌序号为Q+N。
具体的,对于第一确定方法来说,由于递增参数和并发阈值均为正整数,所以,取模运算与取余运算相同,即通过操作请求的递增参数(业务序号数值或请求时刻数值)除以并发阈值求余数,将余数作为操作请求的初始值Q。由于令牌序号是从0+N开始的,因此操作请求的起始令牌序号为Q+N。
对于第二确定方法来说,标定值大于操作请求的递增参数,为了防止标定值减去递增参数出现负数,可以按照递增参数的实际情况,取标定值为远大于递增参数的值,假设递增参数为四位数(例如:5566),则标定值可以取999999。由于中间值和并发阈值均为正整数,所以,取模运算与取余运算相同,即通过操作请求的中间值除以并发阈值求余数,将余数作为操作请求的初始值Q。
参照图4,第一确定方法与第二确定方法对比来说,通过第一确定方法与第二确定方法来确定初始值Q的方向相反。例如对应同一个目标账号有两个操作请求A和B,目标账号的令牌序号集合为0、1、2……15,并发阈值为16,A的递增参数为1216,B的递增参数为1217,N为0。通过第一确定方法:1216除以16,取模为0,A占用起始令牌序号0,1217除以16,取模为1,B占用起始令牌序号1。由此得到A和B为按照0、1、2……15的方向顺时针进行起始令牌序号的占用。通过第二确定方法,可以取标定值为99999,A的中间值为98783,B的中间值为98782,98783除以16,取模为15,A占用起始令牌序号为15,98782除以16,取模为14,B占用起始令牌序号为14。由此得到A和B为按照15、14、13……0的方向逆时针进行起始令牌序号的占用。
在本文实施例中,所述冲突换令牌规则,包括:
根据所述起始令牌序号,开始轮询目标账号的令牌序号集合中的令牌序号,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号。
进一步的,若按照顺时针方式计算所述目标账号操作请求的初始值Q,则按照从0+(M-1)+N至0+N的方向逆时针轮询目标账号的令牌序号集合中的令牌序号,当0+N轮询完毕后,从0+(M-1)+N继续轮询;
若按照逆时针方式计算所述目标账号操作请求的初始值Q,则按照从0+N至0+(M-1)+N的方向顺时针轮询目标账号的令牌序号集合中的令牌序号,当0+(M-1)+N轮询完毕后,从0+N继续轮询。
参照图4,具体的,例如:目标账号的令牌序号集合为0、1、2……15,并发阈值为16,若按照顺时针方式计算所述目标账号操作请求的初始值Q,如上述所示,假设对应同一目标账号有两个操作请求A和B,A占用起始令牌序号0,B占用起始令牌序号1,N为0,M为16。此时若对应此目标账号还有一个操作请求C,C的递增参数为1233,1233除以16,取模为1,C的起始令牌序号为1,但是此时1被B占用。操作请求C会按照从15至0的方向轮询,当0轮询完毕后,从15继续轮询,形成闭环,为逆时针方向轮询。由此,C从起始令牌序号1开始逆时针轮询,轮询至令牌序号0时,发现此时令牌序号0被占用,则继续轮询至令牌序号15,发现令牌序号15未被占用为空闲令牌序号,则C会占用令牌序号15。
参照图4,针对第一确定方法(按照顺时针方式计算所述目标账号操作请求的初始值Q)来说,第一确定方法随着递增参数的增加,按照0、1、2……15的方向顺时针进行起始令牌序号的占用,而在操作请求抢占令牌冲突需要进行换令牌时,是按照逆时针的方向进行空闲令牌的查找。假设在查找空闲令牌时仍旧为顺时针方向,则会导致后续的操作请求按顺时针方向进行令牌序号占用时发现自己的起始令牌序号被前面的操作请求占用,使其只能占用后面操作请求的起始令牌序号,这将导致每一后续的操作请求的起始令牌序号均被占用,导致起始令牌序号的不能发挥应有的作用。因此起始令牌序号的占用方向与冲突换令牌规则中的方向相反,能够提高令牌分发的速度和效率,进而提高并发控制的精准度,提高并发处理的效率,减少热点账户的出现。
参照图4,若按照逆时针方式计算所述目标账号操作请求的初始值Q,如上述所示,假设对应同一目标账号有两个操作请求A和B,A占用起始令牌序号15,B占用起始令牌序号14,N为0,M为16,标定值为99999。此时若对应此目标账号还有一个操作请求C,C的递增参数为1233,C的中间值为98766,98766除以16,取模为14,C的起始令牌序号为14,但是此时14被B占用。操作请求C会按照从0至15的方向轮询,当15轮询完毕后,从0继续轮询,形成闭环,为顺时针方向轮询。由此,C从起始令牌序号14开始顺时针轮询,轮询至令牌序号15时,发现此时令牌序号15被占用,则继续轮询至令牌序号0,发现令牌序号0未被占用为空闲令牌序号,则C会占用令牌序号0。对于第二确定方法(按照逆时针方式计算所述目标账号操作请求的初始值Q)来说,起始令牌序号的占用方向为逆时针方向,与冲突换令牌规则中的方向相反。
在本文实施例中,还包括:
所述目标账号操作请求开始执行时开始计时;
当所述计时时间大于所述设定时间时,释放所述目标账号操作请求的所述起始令牌序号或所述空闲令牌序号。
具体的,设定时间可以根据不同的实际需要进行设定,为了防止操作请求僵死,当操作请求长时间占用起始令牌序号或空闲令牌序号后,将会强制释放起始令牌序号或空闲令牌序号,使得后续的操作请求可以执行。
基于上述所述的一种分布式系统并发控制的方法,本文实施例还提供一种分布式系统并发控制的装置。所述的装置可以包括使用了本文实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本文实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本文实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
具体地,图5是本文实施例提供的一种分布式系统并发控制的装置一个实施例的模块结构示意图,参照图5所示,本文实施例提供的一种分布式系统并发控制的装置包括:确定模块100、判断模块200、未被占用模块300、被占用模块400、释放模块500。
确定模块100:用于根据目标账号操作请求的递增参数和目标账号的并发阈值,确定所述目标账号操作请求的起始令牌序号;
判断模块200:用于判断所述目标账号操作请求的起始令牌序号是否被占用;
未被占用模块300:如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求;
被占用模块400:如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求;
释放模块500:所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号。
本文一实施例中,参照图6所示,还提供一种计算机设备602。计算机设备602可以包括一个或多个处理器604,诸如一个或多个中央处理单元(CPU)或图形处理器(GPU),每个处理单元可以实现一个或多个硬件线程。计算机设备602还可以包括任何存储器606,其用于存储诸如代码、设置、数据等之类的任何种类的信息,一具体实施方式中,存储器606上并可在处理器604上运行的计算机程序,所述计算机程序被所述处理器604运行时,可以执行根据上述方法的指令。非限制性的,比如,存储器606可以包括以下任一项或多种组合:任何类型的RAM,任何类型的ROM,闪存设备,硬盘,光盘等。更一般地,任何存储器都可以使用任何技术来存储信息。进一步地,任何存储器可以提供信息的易失性或非易失性保留。进一步地,任何存储器可以表示计算机设备602的固定或可移除部件。在一种情况下,当处理器604执行被存储在任何存储器或存储器的组合中的相关联的指令时,计算机设备602可以执行相关联指令的任一操作。计算机设备602还包括用于与任何存储器交互的一个或多个驱动机构608,诸如硬盘驱动机构、光盘驱动机构等。
计算机设备602还可以包括输入/输出模块610(I/O),其用于接收各种输入(经由输入设备612)和用于提供各种输出(经由输出设备614)。一个具体输出机构可以包括呈现设备616和相关联的图形用户接口618(GUI)。在其他实施例中,还可以不包括输入/输出模块610(I/O)、输入设备612以及输出设备614,仅作为网络中的一台计算机设备。计算机设备602还可以包括一个或多个网络接口620,其用于经由一个或多个通信链路622与其他设备交换数据。一个或多个通信总线624将上文所描述的部件耦合在一起。
通信链路622可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等、或其任何组合。通信链路622可以包括由任何协议或协议组合支配的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。
对应于图1-图3中的方法,本文实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法的步骤。
本文实施例还提供一种计算机可读指令,其中当处理器执行所述指令时,其中的程序使得处理器执行如图1至图3所示的方法。
应理解,在本文的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本文实施例的实施过程构成任何限定。
还应理解,在本文实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本文的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本文所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本文实施例方案的目的。
另外,在本文各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本文的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本文各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本文中应用了具体实施例对本文的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本文的方法及其核心思想;同时,对于本领域的一般技术人员,依据本文的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本文的限制。
Claims (7)
1.一种分布式系统并发控制的方法,其特征在于,所述方法包括:
设置与目标账号一一对应的令牌序号集合,所述令牌序号集合中所有令牌序号按圆环状结构依序排列;
根据所述目标账号操作请求的递增参数和所述目标账号的并发阈值,按照顺时针方式或逆时针方式计算所述目标账号操作请求的初始值Q,其中目标账号的任意两个操作请求的递增参数不同;
将Q+N设置为所述目标账号操作请求的起始令牌序号;
判断所述目标账号操作请求的起始令牌序号是否被占用;
如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求;
如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求;
所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号;
所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,包括:
根据所述起始令牌序号,若按照顺时针方式计算所述目标账号操作请求的初始值Q,则按照从0+(M-1)+N至0+N的方向逆时针轮询目标账号的令牌序号集合中的令牌序号,当0+N轮询完毕后,从0+(M-1)+N继续轮询,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号;
根据所述起始令牌序号,若按照逆时针方式计算所述目标账号操作请求的初始值Q,则按照从0+N至0+(M-1)+N的方向顺时针轮询目标账号的令牌序号集合中的令牌序号,当0+(M-1)+N轮询完毕后,从0+N继续轮询,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号。
2.根据权利要求1所述的一种分布式系统并发控制的方法,其特征在于,所述目标账号操作请求的递增参数,包括:
所述目标账号操作请求的业务序号数值或请求时刻数值。
3.根据权利要求1所述的一种分布式系统并发控制的方法,其特征在于,所述目标账号的令牌序号集合,包括:从0+N开始,直至0+(M-1)+N的所有整数;
其中,N为任意整数,M为目标账号的并发阈值。
4.根据权利要求1所述的一种分布式系统并发控制的方法,其特征在于,还包括:
所述目标账号操作请求开始执行时开始计时;
当所述计时时间大于设定时间时,释放所述目标账号操作请求的所述起始令牌序号或所述空闲令牌序号。
5.一种分布式系统并发控制的装置,其特征在于,所述装置包括:
确定模块:用于设置与目标账号一一对应的令牌序号集合,所述令牌序号集合中所有令牌序号按圆环状结构依序排列;根据所述目标账号操作请求的递增参数和所述目标账号的并发阈值,按照顺时针方式或逆时针方式计算所述目标账号操作请求的初始值Q,其中目标账号的任意两个操作请求的递增参数不同;将Q+N设置为所述目标账号操作请求的起始令牌序号;
判断模块:用于判断所述目标账号操作请求的起始令牌序号是否被占用;
未被占用模块:如果所述目标账号操作请求的起始令牌序号未被占用,则所述目标账号操作请求占用该起始令牌序号,并执行所述目标账号操作请求;
被占用模块:如果所述目标账号操作请求的起始令牌序号被占用,则所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,并执行所述目标账号操作请求;
释放模块:所述目标账号操作请求执行完毕后,释放所述起始令牌序号或所述空闲令牌序号;
所述目标账号操作请求根据所述起始令牌序号和冲突换令牌规则,确定并占用空闲令牌序号,包括:
根据所述起始令牌序号,若按照顺时针方式计算所述目标账号操作请求的初始值Q,则按照从0+(M-1)+N至0+N的方向逆时针轮询目标账号的令牌序号集合中的令牌序号,当0+N轮询完毕后,从0+(M-1)+N继续轮询,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号;
根据所述起始令牌序号,若按照逆时针方式计算所述目标账号操作请求的初始值Q,则按照从0+N至0+(M-1)+N的方向顺时针轮询目标账号的令牌序号集合中的令牌序号,当0+(M-1)+N轮询完毕后,从0+N继续轮询,直至查询到第一个未被占用的令牌序号,则该令牌序号为所述空闲令牌序号。
6.一种计算机设备,包括存储器、处理器、以及存储在所述存储器上的计算机程序,其特征在于,所述计算机程序被所述处理器运行时,执行根据权利要求1-4任意一项所述方法的指令。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机设备的处理器运行时,执行根据权利要求1-4任意一项所述方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343473.1A CN112860414B (zh) | 2021-03-30 | 2021-03-30 | 一种分布式系统并发控制的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343473.1A CN112860414B (zh) | 2021-03-30 | 2021-03-30 | 一种分布式系统并发控制的方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112860414A CN112860414A (zh) | 2021-05-28 |
CN112860414B true CN112860414B (zh) | 2024-04-26 |
Family
ID=75993270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110343473.1A Active CN112860414B (zh) | 2021-03-30 | 2021-03-30 | 一种分布式系统并发控制的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112860414B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113935659B (zh) * | 2021-11-25 | 2024-06-28 | 四川新网银行股份有限公司 | 一种信贷审批工单的分布式派单方法、系统、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109412967A (zh) * | 2018-09-28 | 2019-03-01 | 江苏满运软件科技有限公司 | 基于令牌的系统流控方法、装置、电子设备、存储介质 |
CN112272093A (zh) * | 2020-10-12 | 2021-01-26 | 深圳市欢太科技有限公司 | 一种令牌管理的方法、电子设备及可读存储介质 |
-
2021
- 2021-03-30 CN CN202110343473.1A patent/CN112860414B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109412967A (zh) * | 2018-09-28 | 2019-03-01 | 江苏满运软件科技有限公司 | 基于令牌的系统流控方法、装置、电子设备、存储介质 |
CN112272093A (zh) * | 2020-10-12 | 2021-01-26 | 深圳市欢太科技有限公司 | 一种令牌管理的方法、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112860414A (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110276182B (zh) | Api分布式限流的实现方法 | |
US9736034B2 (en) | System and method for small batching processing of usage requests | |
US9158597B2 (en) | Controlling access to shared resource by issuing tickets to plurality of execution units | |
EP3252617A1 (en) | Transaction processing method, processing node, central node and cluster | |
EP2983089B1 (en) | Method, device, and chip for implementing mutually exclusive operation of multiple threads | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
US20080288689A1 (en) | Opportunistic granting arbitration scheme for fixed priority grant counter based arbiter | |
KR20000006264A (ko) | 확률적큐로크 | |
CN114253673A (zh) | 一种分布式系统的事务处理方法和事务处理装置 | |
CN108572876A (zh) | 一种读写锁的实现方法及装置 | |
CN112860414B (zh) | 一种分布式系统并发控制的方法、装置、设备及存储介质 | |
CN113112344B (zh) | 业务处理方法、设备、存储介质及计算机程序产品 | |
US20240187351A1 (en) | Stream allocation using stream credits | |
CN111367694B (zh) | 事件处理方法、服务器及计算机存储介质 | |
US10268604B2 (en) | Adaptive resource management in a pipelined arbiter | |
CN112596801B (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
CN103475520B (zh) | 一种分布式网络中的事务处理控制方法及装置 | |
CN117370046A (zh) | 进程间通信方法、系统、设备和存储介质 | |
CN109558241A (zh) | 一种获取自旋锁的方法及装置 | |
CN112099934A (zh) | 一种批处理方法、系统、计算机设备及存储介质 | |
CN111353766A (zh) | 分布式业务系统的业务流程处理系统及方法 | |
CN115907949A (zh) | 银行交易数据处理方法及装置 | |
CN107689979B (zh) | 一种下载请求处理方法和处理设备 | |
CN116248272A (zh) | 区块链的共识方法、装置、区块链及计算机设备 | |
CN116107952A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |