令牌的管理方法和装置、存储介质、电子装置

阅读: 评论:0

著录项
  • CN202010079130.4
  • 20200203
  • CN111314238A
  • 20200619
  • 网银在线(北京)科技有限公司
  • 孙红亮
  • H04L12/819
  • H04L12/819

  • 北京市海淀区北三环西路甲18号中鼎大厦A座719室
  • 北京(11)
  • 北京华夏泰和知识产权代理有限公司
  • 韩来兵;刘蔓莉
摘要
本申请公开了一种令牌的管理方法和装置、存储介质、电子装置。其中,该方法包括:在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;记录业务令牌的申请时间,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。本申请解决了相关技术中令牌桶中的令牌容易出现异常的技术问题。
权利要求

1.一种令牌的管理方法,其特征在于,包括:

在客户端向业务服务器发送业务请求时,在令牌桶中为所述业务请求申请令牌,其中,所述业务请求用于在申请到令牌的情况下被发送给所述业务服务器,所述令牌桶用于通过提供的令牌数量来限定所述业务服务器处理请求的并发量;

记录业务令牌的申请时间,其中,所述申请时间为从所述令牌桶中为所述业务请求申请到所述业务令牌的时间;

在根据所述申请时间确定所述业务令牌过期的情况下,归还所述业务令牌至所述令牌桶。

2.根据权利要求1所述的方法,其特征在于,根据所述申请时间确定所述业务令牌是否过期包括:

在当前时间与所述申请时间之间的差值达到目标阈值的情况下,确定所述业务令牌过期,其中,过期的所述业务令牌不允许被使用;

在所述当前时间与所述申请时间之间的差值未达到所述目标阈值的情况下,确定所述业务令牌未过期,其中,未过期的所述业务令牌允许被使用。

3.根据权利要求1所述的方法,其特征在于,在归还所述业务令牌至令牌桶的同时或之后,所述方法还包括:

将第一键值对中键值字符串中的第一子字符串的值加一,将所述键值字符串中的第二子字符串的值减一,其中,所述第一键值对为以所述业务服务器提供的业务服务的标识为关键字的键值对,所述第一子字符串用于表示未使用的令牌数量,所述第二子字符串用于表示已使用的令牌数量。

4.根据权利要求3所述的方法,其特征在于,在令牌桶中为所述业务请求申请业务令牌之前,所述方法还包括:

获取配置信息,其中,所述配置信息中配置有所述令牌桶中可用令牌的数量;

创建包括关键字和键值的所述第一键值对,并将所述第一键值对中关键字的值初始化为所述业务服务器提供的业务服务的标识、将所述第一键值对中键值字符串的第一子字符串的值初始化为所述令牌桶中可用令牌的数量、将所述第一键值对中键值字符串的第二子字符串的值初始化为零。

5.根据权利要求3所述的方法,其特征在于,所述方法还包括:

在所述业务服务器处理的业务服务的请求并发量发生变化的情况下,根据变化量调整所述第一键值对中关键字和键值的值。

6.根据权利要求1至5中任意一项所述的方法,其特征在于,在令牌桶中为所述业务请求申请业务令牌包括:

查以所述业务服务器提供的业务服务的标识为关键字的第一键值对;

从所述令牌桶中获取所述业务令牌,并将所述第一键值对中键值字符串中的第一子字符串的值减一,将所述键值字符串中的第二子字符串的值加一。

7.根据权利要求1至5中任意一项所述的方法,其特征在于,记录所述业务令牌的申请时间包括:

将第二键值对保存在目标数据结构中,其中,所述第二键值对以所述业务服务器提供的业务服务的标识为关键字、以所述申请时间为该关键字对应的键值,所述目标数据结构用于保存携带有令牌的申请时间的键值对。

8.根据权利要求7所述的方法,其特征在于,在归还所述业务令牌之后,所述方法还包括:

在成功归还所述业务令牌的情况下,从所述目标数据结构中删除所述第二键值对。

9.一种令牌的管理装置,其特征在于,包括:

申请单元,用于在客户端向业务服务器发送业务请求时,在令牌桶中为所述业务请求申请令牌,其中,所述业务请求用于在申请到令牌的情况下被发送给所述业务服务器,所述令牌桶用于通过提供的令牌数量来限定所述业务服务器处理请求的并发量;

记录单元,用于记录业务令牌的申请时间,其中,所述申请时间为从所述令牌桶中为所述业务请求申请到所述业务令牌的时间;

归还单元,用于在根据所述申请时间确定所述业务令牌过期的情况下,归还所述业务令牌至所述令牌桶。

10.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至8任一项中所述的方法。

11.一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述权利要求1至8任一项中所述的方法。

说明书
技术领域

本申请涉及互联网领域,具体而言,涉及一种令牌的管理方法和装置、存储介质、电子装置。

限流通常是指服务端的限流,为了避免瞬间的高并发调用导致后台提供服务的系统瘫痪,需要对接收调用请求的速度做控制,如每秒只能接收100次调用请求,实际每秒的调用请求是110次,则会有10次请求直接返回特定限流错误码,不予处理,通过错误码告诉调用发起方系统繁忙。因为实际处理调用请求的一般是由多个应用实例组成的一个集,所以需要对整个集能够处理的请求数做限流,这就是全局限流,只针对单个应用实例的限流称为单机限流。全局限流的典型场景就是大促期间(如双11、购物节等大促)用户通过商城App购物支付,这个场景下商城App就是客户端,用户的购物支付都需要发送请求给商城的服务端,服务端处理完请求后将结果返回给商城App,商城App再通过App的页面跳转等告知用户请求结果。因为活跃用户基数大,上千万用户可能会执行同一个操作(如将商品添加到购物车),提供将商品添加到购物车功能的服务端就必须对此做限流。

服务端可用的限流方案有三种,计数器算法、漏桶算法和令牌桶算法,其中令牌桶算法是最优的,既能保证服务端能够以一个相对固定的速率处理调用请求,也能应对一定范围内的瞬间高并发请求。这三种服务端限流算法都不适用于客户端限流,因为两者的场景完全不同,服务端限流是在服务端接收调用请求时限流,客户端限流是在客户端发起调用请求时限流。客户端限流可采用类似于信号量机制的改进的令牌桶算法。但是这些方案存在令牌桶中的令牌容易出现异常的问题。

针对上述的问题,目前尚未提出有效的解决方案。

本申请实施例提供了一种令牌的管理方法和装置、存储介质、电子装置,以至少解决相关技术中令牌桶中的令牌容易出现异常的技术问题。

根据本申请实施例的一个方面,提供了一种令牌的管理方法,包括:在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;记录业务令牌的申请时间,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

根据本申请实施例的另一方面,还提供了一种令牌的管理装置,包括:申请单元,用于在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,其中,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;记录单元,用于记录业务令牌的申请时间,其中,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;归还单元,用于在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。

根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方法。

在本申请实施例中,在根据所述申请时间确定所述业务令牌过期的情况下,归还所述业务令牌至所述令牌桶,避免了相关技术中同Redis多次交互,耗时长、令牌数量容易出现误差、过期令牌无法自动归还等相关技术中令牌桶中的令牌容易出现异常的技术问题,提供一种更加高效更加精准并支持过期令牌自动归还的客户端全局限流方案。

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的令牌的管理方法的硬件环境的示意图;

图2是根据本申请实施例的一种可选的令牌的管理方法的流程图;

图3是根据本申请实施例的一种可选的令牌的管理装置的示意图;

以及

图4是根据本申请实施例的一种终端的结构框图。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,在对本申请实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:

Redis(全称:Remote Dictionary Server远程字典服务)是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Lua脚本:Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。

相关技术中可采用信号量机制的改进令牌桶算法,大体实现步骤如下:

步骤1,应用启动时初始化两个令牌桶,一个表示已使用令牌的令牌桶,记为USED桶,一个表示未使用令牌的令牌桶,记为UNUSED桶,往UNUSED桶放入跟桶容量一致的令牌,此时USED桶是空的。

步骤2,客户端发起请求,从UNUSED桶拿出一个令牌,然后放到USED桶,USED桶成功增加一个令牌则表示客户端获取令牌成功,否则获取令牌失败。

步骤3,客户端成功拿到令牌后发起调用请求,调用结束后需要将该令牌从USED桶拿出放到UNUSED桶,UNUSED桶成功增加一个令牌则表示客户端归还令牌成功,否则归还令牌失败。

设置USED桶和UNUSED桶两个桶的目的是为了快速获取总的令牌数量、已使用的令牌数量和未使用的令牌数量,方便令牌数量变更时能够正确调整两个桶的令牌,具体如下:先分别获取USED桶和UNUSED桶的令牌数量,两者相加得到原来的令牌数量,调整后的令牌数量减去原来的令牌数量得到增加的令牌数量,记为A个;如果A大于0,即调大客户端发起请求的并发数,则往UNUSED桶逐一添加A个令牌,如果A小于0,则调小客户端发起请求的并发数,则需要从UNUSED桶逐一移除A个令牌,如果UNUSED桶的令牌数量小于A,则不足的部分从USED桶移除。

发明人经过对相关技术进行分析认识到,为了实现客户端的全局限流,上述令牌桶和令牌的获取、归还等操作都是通过第三方缓存组件Redis实现的。该方案技术的令牌桶中的令牌容易出现如下异常:

1)令牌归还和读取等都需要操作两个令牌桶,与缓存多次交互,整体耗时长,异常情况下(如请求缓存超时、缓存宕机等)会导致令牌数量错误,如获取令牌时,从UNUSED桶成功拿出了一个令牌,但是归还的时候因为网络问题导致Redis操作失败,该令牌没有成功加入到USED桶中,整体可用的令牌数量就会减少一个。

2)获取令牌的线程因为程序异常退出后无法归还令牌,导致该令牌无法被二次分配,总的可用令牌数减少,且无法准确确认此类令牌的数量。

3)在调整令牌数量时,需要获取2个令牌桶的令牌个数,在高并发的情形下获取的数量是不准确的,如有两个线程从UNUSED桶获取了两个令牌还未来得及放到USED桶中,此时获取的2个令牌桶的令牌个数就会少两个。

为了克服以上问题,根据本申请实施例的一方面,提供了一种令牌的管理方法的方法实施例。本方案中的限流是指发起调用请求的客户端自身做的限流,即客户端会主动控制请求外部系统的最大并发数,为了避免达到外部系统的限流阈值导致请求无效。典型的应用场景是向银行发起退款请求,为了保证退款请求的成功率,需要将请求的并发数严格控制在银行允许的能够承载的范围内。

可选地,在本实施例中,上述令牌的管理方法可以应用于如图1所示的由终端101和服务器103所构成的硬件环境中。如图1所示,服务器103通过网络与终端101进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库105,用于为服务器103提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端101并不限定于PC、手机、平板电脑等。

本申请实施例的令牌的管理方法可以由终端101来执行,还可以是由服务器103和终端101共同执行。其中,终端101执行本申请实施例的令牌的管理方法也可以是由安装在其上的客户端来执行,后续以由安装在其上的客户端来执行为例进行说明。

图2是根据本申请实施例的一种可选的令牌的管理方法的流程图,如图2所示,该方法可以包括以下步骤:

步骤S202,在客户端向业务服务器发送业务请求时,客户端在本地令牌桶中为业务请求申请令牌,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量。

上述令牌即标志、记号的意思,作为一种权限使用,如在本申请的实施例中,只有获得了令牌才允许访问业务服务器,即将对应的业务请求发送给业务服务器。

上述的令牌桶可以是实质存在的令牌桶,每个令牌桶中存在实际的令牌(即令牌数据),每次分配是从该令牌桶中取出一个令牌给申请者;上述的令牌桶可以是虚拟的令牌桶,可以利用记录该令牌桶状态的数据来表征,如每个业务服务的令牌桶的状态采用一个键值对(key-value对)来记录,键值对的关键字为业务的标识,键值对中的键值为令牌桶的状态,令牌桶的状态包括令牌桶的总令牌数量、可用数量以及已使用数量中的至少之二。

步骤S204,客户端在本地记录业务令牌的申请时间,申请时间为从令牌桶中为业务请求申请到业务令牌的时间。

步骤S206,在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶,此处的归还可以是指修改令牌桶中令牌的数量。

通过上述步骤,在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶,避免了相关技术中同Redis多次交互,耗时长、令牌数量容易出现误差、过期令牌无法自动归还等相关技术中令牌桶中的令牌容易出现异常的技术问题,提供一种更加高效更加精准并支持过期令牌自动归还的客户端全局限流方案。下面结合图2所示的步骤进一步详述本申请的技术方案。

在步骤S202提供的技术方案中,在客户端向业务服务器发送业务请求时,客户端在本地令牌桶中为业务请求申请令牌。

记录业务服务的令牌桶的状态采用一个key-value来记录时,关键字key是一个字符串,用来标识需要做并发控制的一类请求(即一种业务服务的请求),如REFUND_BOC表示对中行的退款请求,键值value也是一个字符串,用来记录令牌实时使用情况,如由三个数字拼接而成,三个数字依次是令牌总数,可用令牌数(即第一子字符串)和已用令牌数(即第二子字符串),如“10|2|8”,表示总的令牌数是10,其中可用令牌数是2,已用令牌数是8。

可选地,键值value也是一个字符串,用来记录令牌实时使用情况,包括三字部分,令牌总数、记录可用令牌的令牌标识的第一子字符串和记录已用令牌的令牌标识的第二子字符串。

可选地,在令牌桶中为业务请求申请业务令牌之前,可以按照如下方式初始化键值对:获取配置信息,配置信息中配置有令牌桶中可用令牌的数量;创建包括关键字和键值的第一键值对,并将第一键值对中关键字的值初始化为业务服务器提供的业务服务的标识、将第一键值对中键值字符串的第一子字符串的值初始化为令牌桶中可用令牌的数量、将第一键值对中键值字符串的第二子字符串的值初始化为零,如“10|10|0”。

在上述实施例中,在令牌桶中为业务请求申请业务令牌时:可在多个键值对中查以业务服务器提供的业务服务的标识为关键字的第一键值对;从令牌桶中获取业务令牌,并将第一键值对中键值字符串中的第一子字符串的值减一,将键值字符串中的第二子字符串的值加一,如将第一键值对“10|2|8”修改为“10|1|9”。

可选地,在业务服务器处理的业务服务的请求并发量发生变化的情况下,根据变化量调整第一键值中关键字和键值的值,如变化的数量为N(N的取值可以为正整数或者负整数,当为负整数时其绝对值不大于之前并发量),此时修改第一键值对时,将之前关键字的值加上N之后作为修改后的值,对于键值字符串的修改,可以将N与原第一子字符串的值相加得到修改后的第一子字符串的值,若相加后第一子字符串的值为负数,则将第一子字符串的值置零,同时将第二子字符串的值减去原第一子字符串的值后加上N得到修改后的第二子字符串的值;也可以将N与原第二子字符串的值相加得到修改后的第二子字符串的值,若相加后第二子字符串的值为负数,则将第二子字符串的值置零,同时将第一子字符串的值减去原第二子字符串的值后加上N,得到修改后的第一子字符串的值。

在步骤S204提供的技术方案中,客户端在本地记录业务令牌的申请时间。

可选地,记录业务令牌的申请时间包括:将第二键值对保存在目标数据结构中,第二键值对以业务服务器提供的业务服务的标识为关键字、以申请时间为该关键字对应的键值,目标数据结构用于保存携带有令牌的申请时间的键值对。

上述时间可以记录在一个支持value排序、支持范围查的map结构(即目标数据结构)中,该map用来存储所有已分配令牌的令牌分配时间,在此基础上实现过期自动归还。map结构的key是字符串,表示具体的令牌,可以由两部分组成,一部分标识该令牌所属的并发控制请求(即一种业务服务的请求),一部分是无意的随机字符串,如“REFUND_BOC_123ljlll”表示一个对中行的退款请求的令牌;map的value是一个时间戳数字,用来记录成功获取该令牌的时间,如“1572253409752”表示的时间是2019-10-28-17:03:29。

在步骤S206提供的技术方案中,在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

可选地,根据申请时间确定业务令牌是否过期包括:在当前时间与申请时间之间的差值达到目标阈值(如10分钟)的情况下,确定业务令牌过期,过期的业务令牌不允许被使用;在当前时间与申请时间之间的差值未达到目标阈值的情况下,确定业务令牌未过期,其中,未过期的业务令牌允许被使用。如,第一时间为“2019-12-12-11:50”,目标阈值为10分钟,当前时间为“2019-12-12-12:05”,二者之差为15分钟,显然就能依次判定对应的业务令牌过期。

可选地,在归还业务令牌至令牌桶的同时或之后,将第一键值对中键值字符串中的第一子字符串的值加一,将键值字符串中的第二子字符串的值减一,其中,第一键值对为业务服务器提供的业务服务的标识为关键字的键值对,第一子字符串用于表示未使用的令牌数量,第二子字符串用于表示已使用的令牌数量,如将键值字符串中的第二子字符串的值加一,如将第一键值对“10|4|6”修改为“10|5|5”。

可选地,为了节约存储空间,在归还业务令牌之后,在成功归还业务令牌的情况下,从目标数据结构中删除第二键值对。

本申请的上述方案可用于实现此客户端全局限流方案的创新数据结构及在此基础上实现的更加高效更加精准的客户端全局限流解决方案;还提供了一种自动回收过期未归还令牌的解决方案。

作为一种可选的实施例,下面结合具体的实施方式详述本申请提供的更加高效更加精准并支持过期令牌自动归还的客户端全局限流方案。本方案的具体流程如下:

步骤1,在应用启动时根据最大并发数初始化用来实现并发控制的key-value对,初始化逻辑通过Lua脚本(也可以由其它类型的脚本实现)实现,先查询当前缓存中是否存在对应的key,如果存在说明已经完成初始化,如果不存在则根据最大并发数在缓存中插入该key。比如key是“REFUND_BOC”,最大并发数是10,如果“REFUND_BOC”不存在则插入一个“REFUND_BOC-10|10|0”的key-value对,需要初始化的key-value对可以通过配置文件指定或者读取配置文件。

步骤2,客户端发起调用请求前获取表示并发控制请求的key的可用令牌,获取令牌逻辑通过Lua脚本实现,先查询当前缓存中是否存在对应的key,如果不存在说明未初始化返回特定错误码,获取失败;如果存在则校验可用令牌数量是否大于0,如果大于0则将可用令牌数量减1,已用令牌数量加1,然后更新value,返回表示成功的1;如果等于或者小于0则返回特定错误码,获取失败。如key是“REFUND_BOC”,获取令牌前value是“10|3|7”,成功获取令牌后,value被更新成“10|2|8”。

步骤3,成功获取令牌后,生成一个表示该令牌的字符串作为key,如“REFUND_BOC_123ljlll”,以当时的时间戳作为value,如“1572253409752”,将其保存到存储所有已分配令牌的令牌分配时间的map中。

上述步骤2和步骤3为一次完整的获取令牌的流程,其中步骤2成功后会执行步骤3,步骤3因为网络导致导致操作失败,仍然认为获取令牌成功。

步骤4,客户端完成调用请求后向表示并发控制请求的key归还令牌,归还令牌逻辑通过Lua脚本实现,先查询当前缓存中是否存在对应的key,如果不存在说明未初始化返回特定错误码,归还失败;如果存在则判断已用令牌数量是否大于0,如果大于0则将可用令牌数量加1,将已用令牌数量减1,然后更新value,返回表示成功的1;如果已用令牌数量等于0,说明该令牌已经归还过了,不增加未使用令牌数量,返回表示成功的1,这样做是为了避免令牌在异常情形下的重复归还。如key是“REFUND_BOC”,获取令牌前value是“10|3|7”,成功归还令牌后,value被更新成“10|4|6”。

步骤5,成功归还令牌后,将该令牌从存储所有已分配令牌的令牌分配时间的map中移除该令牌对应的key-value对。

上述步骤4和步骤5为一次完整的归还令牌的操作,其中步骤4操作成功后会执行步骤5,步骤5因为网络问题导致操作失败,仍然认为归还令牌成功。这种情形下,存储所有已分配令牌的令牌分配时间的map依然保存了这个已经成功归还的令牌的key,还会二次归还,但是因为归还时如果已用令牌数量为0则认为归还成功,不增加未使用令牌数量,即对结果无影响。

本方案的过期自动归还流程如下:

步骤1,根据令牌的有效期计算一个终止时间,从存储所有已分配令牌的令牌分配时间的map中出时间戳小于该终止时间的令牌,令牌的有效期根据完成一次调用请求的时间的最大值估算。比如有效期是10分钟,把当前时间往前推10分钟就是终止时间。

步骤2,从时间戳小于该终止时间的令牌key中取出该令牌所属的并发控制请求key,如令牌“keyREFUND_BOC_123ljlll”对应的并发控制请求key是“REFUND_BOC”,然后向并发控制请求key归还令牌,归还逻辑同上。

上述过期自动归还流程由一个定时任务周期性执行。本方案的令牌数量调整流程:令牌数量调整逻辑通过Lua脚本实现,将原来的令牌总数减去新令牌总数,得到的差值如果大于0则说明是增加令牌,如果小于0则说明是减少令牌,无论哪种情形都建未用令牌的数量加上该差值,更新令牌总数,最后更新表示令牌实时使用情况的value即可。如原来的令牌数是10,表示令牌实时使用情况的value是“10|2|8”,如果令牌数量调整为12,则差值是2,2+2=4,value变成“12|4|8”,如果令牌数量调整为6,则差值是-4,-4+2=-2,value变成“6|-2|8”,可用令牌为负数时获取可用令牌会获取失败,当归还令牌时会将负数逐步加回来变成正数。

上述方案中对两个令牌桶的多次操作被换成一次Lua脚本调用,整体耗时大幅缩减,因为Redis会保证Lua脚本执行过程中不会执行其他的Redis操作,所以不存在实际最大并发数出现误差的情形。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

根据本申请实施例的另一个方面,还提供了一种用于实施上述令牌的管理方法的令牌的管理装置。图3是根据本申请实施例的一种可选的令牌的管理装置的示意图,如图3所示,该装置可以包括:

申请单元301,用于在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,其中,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;

记录单元303,用于记录业务令牌的申请时间,其中,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;

归还单元305,用于在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

需要说明的是,该实施例中的申请单元301可以用于执行本申请实施例中的步骤S202,该实施例中的记录单元303可以用于执行本申请实施例中的步骤S204,该实施例中的归还单元305可以用于执行本申请实施例中的步骤S206。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。

通过上述模块,在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶,避免了相关技术中同Redis多次交互,耗时长、令牌数量容易出现误差、过期令牌无法自动归还等相关技术中令牌桶中的令牌容易出现异常的技术问题,提供一种更加高效更加精准并支持过期令牌自动归还的客户端全局限流方案。

可选地,归还单元还可用于按照如下方式根据申请时间确定业务令牌是否过期:在当前时间与申请时间之间的差值达到目标阈值的情况下,确定业务令牌过期,其中,过期的业务令牌不允许被使用;在当前时间与申请时间之间的差值未达到目标阈值的情况下,确定业务令牌未过期,其中,未过期的业务令牌允许被使用。

可选地,归还单元还可用于在归还业务令牌至令牌桶的同时或之后,将第一键值对中键值字符串中的第一子字符串的值加一,将键值字符串中的第二子字符串的值减一,其中,第一键值对为业务服务器提供的业务服务的标识为关键字的键值对,第一子字符串用于表示未使用的令牌数量,第二子字符串用于表示已使用的令牌数量。

可选地,本申请的装置还可包括:初始化单元,用于在令牌桶中为业务请求申请业务令牌之前,获取配置信息,其中,配置信息中配置有令牌桶中可用令牌的数量;创建包括关键字和键值的第一键值对,并将第一键值对中关键字的值初始化为业务服务器提供的业务服务的标识、将第一键值对中键值字符串的第一子字符串的值初始化为令牌桶中可用令牌的数量、将第一键值对中键值字符串的第二子字符串的值初始化为零。

可选地,本申请的装置还可包括:调整单元,用于在业务服务器处理的业务服务的请求并发量发生变化的情况下,根据变化量调整第一键值对中关键字和键值的值。

可选地,上述申请单元还可用于查以业务服务器提供的业务服务的标识为关键字的第一键值对;从令牌桶中获取业务令牌,并将第一键值对中键值字符串中的第一子字符串的值减一,将键值字符串中的第二子字符串的值加一。

可选地,本申请的记录单元还可用于:将第二键值对保存在目标数据结构中,其中,第二键值对以业务服务器提供的业务服务的标识为关键字、以申请时间为该关键字对应的键值,目标数据结构用于保存携带有令牌的申请时间的键值对。

可选地,归还单元还可用于在归还业务令牌之后,在成功归还业务令牌的情况下,从目标数据结构中删除第二键值对。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本申请实施例的另一个方面,还提供了一种用于实施上述令牌的管理方法的服务器或终端。

图4是根据本申请实施例的一种终端的结构框图,如图4所示,该终端可以包括:一个或多个(图4中仅示出一个)处理器401、存储器403、以及传输装置405,如图4所示,该终端还可以包括输入输出设备407。

其中,存储器403可用于存储软件程序以及模块,如本申请实施例中的令牌的管理方法和装置对应的程序指令/模块,处理器401通过运行存储在存储器403内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的令牌的管理方法。存储器403可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器403可进一步包括相对于处理器401远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置405用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置405包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置405为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器403用于存储应用程序。

处理器401可以通过传输装置405调用存储器403存储的应用程序,以执行下述步骤:

在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,其中,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;

记录业务令牌的申请时间,其中,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;

在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

处理器401还用于执行下述步骤:

获取配置信息,其中,配置信息中配置有令牌桶中可用令牌的数量;

创建包括关键字和键值的第一键值对,并将第一键值对中关键字的值初始化为业务服务器提供的业务服务的标识、将第一键值对中键值字符串的第一子字符串的值初始化为令牌桶中可用令牌的数量、将第一键值对中键值字符串的第二子字符串的值初始化为零。

采用本申请实施例,提供了一种“在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;记录业务令牌的申请时间,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶”的方案。在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶,避免了相关技术中同Redis多次交互,耗时长、令牌数量容易出现误差、过期令牌无法自动归还等相关技术中令牌桶中的令牌容易出现异常的技术问题,提供一种更加高效更加精准并支持过期令牌自动归还的客户端全局限流方案。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图4所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile InternetDevices,MID)、PAD等终端设备。图4其并不对上述电子装置的结构造成限定。例如,终端还可包括比图4中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图4所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。

本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行令牌的管理方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

在客户端向业务服务器发送业务请求时,在令牌桶中为业务请求申请令牌,其中,业务请求用于在申请到令牌的情况下被发送给业务服务器,以请求业务服务器提供业务服务,令牌桶用于通过提供的令牌数量来限定业务服务器处理请求的并发量;

记录业务令牌的申请时间,其中,申请时间为从令牌桶中为业务请求申请到业务令牌的时间;

在根据申请时间确定业务令牌过期的情况下,归还业务令牌至令牌桶。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

获取配置信息,其中,配置信息中配置有令牌桶中可用令牌的数量;

创建包括关键字和键值的第一键值对,并将第一键值对中关键字的值初始化为业务服务器提供的业务服务的标识、将第一键值对中键值字符串的第一子字符串的值初始化为令牌桶中可用令牌的数量、将第一键值对中键值字符串的第二子字符串的值初始化为零。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

本文发布于:2023-04-13 08:53:45,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/85923.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图