本公开涉及计算机,尤其涉及一种令牌处理方法、装置、服务器及存储介质。
背景技术:
1、目前,基于远程字典服务(remote dictionary server,redis)的分布式限流算法,第一服务器收到请求的每秒查询率(queries-per-second,qps)为n,限流qps为q;由于第一服务器收到访问请求后同时调用redis获取令牌,因此redis收到的请求qps=n,请求压力为n,在大流量系统中,n远大于q,由此导致令牌服务器申请压力过高。
技术实现思路
1、本公开提供一种令牌处理方法、装置、服务器及存储介质,以至少解决通过现有技术的分布式限流方法易导致令牌服务器申请压力过高的问题。本公开的技术方案如下:
2、根据本公开实施例的第一方面,提供了一种令牌处理方法,应用于第一设备,所述第一设备是由多个设备组成的第一服务器中的其中一个设备;所述方法包括:
3、在一个周期内,若满足预设条件,则向令牌服务器获取k个令牌以及所述令牌服务器的第一剩余令牌数,k大于1或k等于0;
4、在所述k大于1的情况下,根据所述k个令牌以及所述第一剩余令牌数,更新所述第一设备中的缓存数据,所述缓存数据包括:所述第一设备当前持有令牌以及所述令牌服务器的第二剩余令牌数。
5、在一种可能实施方式中,所述向令牌服务器获取k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
6、向所述令牌服务器发送第一请求信息,所述第一请求信息包括:获取令牌以及所述令牌服务器的第一剩余令牌数;
7、接收所述令牌服务器返回的k个令牌以及所述第一剩余令牌数。
8、在一种可能实施方式中,所述在一个周期内,若满足预设条件,则向令牌服务器获取k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
9、在一个周期内,若接收到访问请求,则将所述第一设备当前持有令牌数量与所述第二剩余令牌数分别与0进行大小对比,得到第一对比结果;
10、若所述第一对比结果为所述第一设备当前持有令牌数量小于或等于0、且所述第二剩余令牌数大于0,则确定满足预设条件,向所述令牌服务器发送第一请求信息。
11、在一种可能实施方式中,所述若接收到访问请求,则将所述第一设备当前持有令牌数量与所述第二剩余令牌数分别与0进行大小对比,得到第一对比结果之后,所述方法还包括:
12、若所述第一对比结果为所述第一设备当前持有令牌数量小于或等于0、且所述第二剩余令牌数小于或等于0,则拒绝访问所述第一服务器;
13、若所述第一对比结果为所述第一设备当前持有令牌数量大于0,则允许访问所述第一服务器。
14、在一种可能实施方式中,所述方法还包括:
15、在允许访问所述第一服务器的情况下,根据所述访问请求,消耗所述第一设备当前持有令牌中的至少一个令牌,并更新所述第一设备当前持有令牌数量。
16、根据本公开实施例的第二方面,提供了一种令牌处理方法,应用于令牌服务器,所述方法包括:
17、获取所述令牌服务器的已发放令牌数与所述第一设备限流值,所述已发放令牌数为一个周期内向第一设备所在的第一服务器发送的令牌数总和;
18、将所述已发放令牌数与所述第一设备限流值进行大小对比,得到第二对比结果;
19、根据所述第二对比结果,获取k个令牌以及所述令牌服务器的第一剩余令牌数,k大于1或k等于0;
20、向所述第一设备发送所述k个令牌以及所述第一剩余令牌数。
21、在一种可能实施方式中,所述根据所述第二对比结果,获取k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
22、若所述第二对比结果为所述已发放令牌数小于所述第一设备限流值,则判断所述第一设备是否为首次申请令牌,得到判断结果;
23、根据所述判断结果,获取所述k个令牌以及所述令牌服务器的第一剩余令牌数。
24、在一种可能实施方式中,所述根据所述判断结果,获取所述k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
25、若所述判断结果为首次申请令牌,则根据预设误差比例、所述第一设备限流值以及所述已发放令牌数,获取所述k个令牌以及所述令牌服务器的第一剩余令牌数。
26、在一种可能实施方式中,所述根据预设误差比例、所述第一设备限流值以及所述已发放令牌数,获取所述k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
27、将所述预设误差比例与所述第一设备限流值相乘,得到所述k;
28、将所述第一设备限流值减去所述k以及所述已发放令牌数,得到所述第一剩余令牌数。
29、在一种可能实施方式中,所述根据所述判断结果,获取所述k个令牌以及所述令牌服务器的第一剩余令牌数,包括:
30、若所述判断结果为非首次申请令牌,则获取所述第一设备已申请令牌数;
31、计算所述第一设备已申请令牌数在所述已发放令牌数中的第一比例;
32、根据预设误差比例、所述第一设备限流值、所述已发放令牌数以及所述第一比例,获取所述k个令牌以及所述第一剩余令牌数。
33、在一种可能实施方式中,所述根据预设误差比例、所述第一设备限流值、所述已发放令牌数以及所述第一比例,获取所述k个令牌以及所述第一剩余令牌数,包括:
34、将所述预设误差比例、所述第一设备限流值以及所述第一比例相乘,得到所述k;
35、将所述第一设备限流值减去所述k以及所述已发放令牌数,得到所述第一剩余令牌数。
36、根据本公开实施例的第三方面,提供一种令牌处理装置,应用于第一设备,所述第一设备是由多个设备组成的第一服务器中的其中一个设备;所述装置包括:
37、第一获取模块,被配置为在一个周期内,若满足预设条件,则向令牌服务器获取k个令牌以及所述令牌服务器的第一剩余令牌数,k大于1或k等于0;
38、更新模块,被配置为在所述k大于1的情况下,根据所述k个令牌以及所述第一剩余令牌数,更新所述第一设备中的缓存数据,所述缓存数据包括:所述第一设备当前持有令牌以及所述令牌服务器的第二剩余令牌数。
39、根据本公开实施例的第四方面,提供一种令牌处理装置,应用于令牌服务器,所述装置包括:
40、第二获取模块,被配置为获取所述令牌服务器的已发放令牌数与所述第一设备限流值,所述已发放令牌数为一个周期内向第一设备所在的第一服务器发送的令牌数总和;
41、对比模块,被配置为将所述已发放令牌数与所述第一设备限流值进行大小对比,得到第二对比结果;
42、第三获取模块,被配置为根据所述第二对比结果,获取k个令牌以及所述令牌服务器的第一剩余令牌数,k大于1或k等于0;
43、第一发送模块,被配置为向所述第一设备发送所述k个令牌以及所述第一剩余令牌数。
44、根据本公开实施例的第五方面,提供一种服务器,该服务器包括:
45、处理器;
46、用于存储该处理器可执行指令的存储器;
47、其中,该处理器被配置为执行所述指令,以实现本公开提供的令牌处理方法。
48、根据本公开实施例的第六方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述令牌处理方法。
49、根据本公开实施例的第七方面,提供一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现本公开提供的令牌处理方法。
50、本公开的实施例提供的技术方案至少带来以下有益效果:
51、本公开的实施例提供的技术方案,在一个周期内,若满足预设条件,则向令牌服务器获取k个令牌以及所述令牌服务器的第一剩余令牌数,k大于1或k等于0。在所述k大于1的情况下,根据所述k个令牌以及所述第一剩余令牌数,更新所述第一设备中的缓存数据,所述缓存数据包括:所述第一设备当前持有令牌以及所述令牌服务器的第二剩余令牌数,通过第一设备向令牌服务器申请k个令牌,减少向令牌服务器的请求次数,由此减少令牌服务器的请求压力。并且,通过第一剩余令牌数可以得知令牌服务器中是否还有未发放令牌,由此减少不必要的申请次数。
52、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。