一种实现分布式限流器的方法、终端及存储介质与流程
未命名
08-22
阅读:76
评论:0

1.本发明涉及计算机技术领域,尤其涉及的是一种实现分布式限流器的方法、终端及存储介质。
背景技术:
2.程序中使用的api通常需要在规定的qps(queries per second,每秒请求数)以下请求。在单机实现限流较为容易。但是随着业务拓张,目前服务端程序经常部署在多台服务器上以提供高并发、高可用的服务。而多台服务器上的程序在一定时间内调用同一api的总量仍然需要限制在规定qps以下。利用单机限流器,通常采用人工划分单台机器qps份额的方式,但是在极端情况(如部分机器故障停止服务)下无法充分达到qps上限,影响服务效率。这种情况就需要使用分布式限流器。
3.然而传统限流方式的流量限制是在单机内存中,多台服务器无法共享限流数据,现有技术无法解决多服务器部署应用访问同一有限资源的问题。
4.因此,现有技术还有待改进。
技术实现要素:
5.本发明要解决的技术问题在于,针对现有技术缺陷,本发明提供一种实现分布式限流器的方法、终端及存储介质,以解决目前传统的限流方式无法解决多服务器部署应用访问同一有限资源的技术问题。
6.本发明解决技术问题所采用的技术方案如下:
7.第一方面,本发明提供一种实现分布式限流器的方法,包括:
8.初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;
9.获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;
10.对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。
11.在本发明的一种实现方式中,所述初始化限流器,配置限流器参数,包括:
12.其中所述限流器参数包括令牌生成速度,令牌桶大小,限流资源标识,白名单开关及白名单列表,黑名单开关及黑名单列表和单一身份单位时间申请令牌最大数量。
13.在本发明的一种实现方式中,所述生成资源令牌,存入分布式数据库,包括:
14.配置令牌生成速度参数,限流器在后台以所述令牌生成速度持续生成资源令牌,存入分布式数据库。
15.在本发明的一种实现方式中,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:
16.判断是否启用白名单开关,判断所述身份信息是否在白名单列表中;
17.若已启用白名单开关并且所述身份信息在白名单列表中,则继续进行其他参数判
断;
18.若已启用白名单开关并且所述身份信息不在白名单列表中,则拒绝资源令牌请求。
19.在本发明的一种实现方式中,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:
20.判断是否启用黑名单开关,判断所述身份信息是否在黑名单列表中;
21.若已启用黑名单开关并且所述身份信息不在黑名单列表中,则继续进行其他参数判断;
22.若已启用黑名单开关并且所述身份信息在黑名单列表中,则拒绝资源令牌请求。
23.在本发明的一种实现方式中,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:
24.若开启限制单一身份单位时间申请令牌最大数量,则判断所述身份信息已申请令牌数量是否超过所述单一身份单位时间申请令牌最大数量;
25.若所述身份信息已申请令牌数量已超过最大数量,则拒绝资源令牌请求;
26.若所述身份信息已申请令牌数量未超过最大数量,则继续进行其他参数判断。
27.在本发明的一种实现方式中,所述对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,包括:
28.对令牌加分布式锁,判断剩余令牌数;
29.若存在剩余令牌,则在分布式数据库扣减令牌,对令牌解除分布式锁;
30.若不存在剩余令牌,则对令牌解除分布式锁,并计算等待时间。
31.在本发明的一种实现方式中,所述若不存在剩余令牌,则对令牌解除分布式锁,并计算等待时间,包括:
32.所述等待时间为下一可用令牌出现所需时间;
33.经过所述等待时间后,重新进行限流器参数验证。
34.第二方面,本发明还提供一种终端,包括:处理器以及存储器,所述存储器存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被所述处理器执行时用于实现如第一方面所述的实现分布式限流器的方法的步骤。
35.第三方面,本发明还提供一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被处理器执行时用于实现如第一方面所述的实现分布式限流器的方法的步骤。
36.本发明采用上述技术方案具有以下效果:
37.本发明公开了一种实现分布式限流器的方法、终端及存储介质,包括:初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。本发明在单机限流器的基础上使用分布式数据库存储相关数据,并利用分布式锁解决了高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,有效地解决了多台服务器无法充分利用同一个限制资源的问题。
附图说明
38.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
39.图1是本发明的一种实现方式中实现分布式限流器的方法的流程图。
40.图2是本发明的一种实现方式中终端的功能原理图。
41.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
42.为了便于理解本技术,下面将参照相关附图对本技术进行更全面的描述。附图中给出了本技术的较佳实施方式。但是,本技术可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本技术的公开内容理解的更加透彻全面。
43.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中在本技术的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本技术。
44.示例性方法
45.程序中使用的api通常需要在规定的qps(queries per second,每秒请求数)以下请求。在单机实现限流较为容易。但是随着业务拓张,目前服务端程序经常部署在多台服务器上以提供高并发、高可用的服务。而多台服务器上的程序在一定时间内调用同一api的总量仍然需要限制在规定qps以下。利用单机限流器,通常采用人工划分单台机器qps份额的方式,但是在极端情况(如部分机器故障停止服务)下无法充分达到qps上限,影响服务效率。这种情况就需要使用分布式限流器。
46.然而传统限流方式的流量限制是在单机内存中,多台服务器无法共享限流数据,现有技术无法解决多服务器部署应用访问同一有限资源的问题。
47.针对上述技术问题,本发明实施例提供一种实现分布式限流器的方法,在单机限流器的基础上使用分布式数据库存储相关数据,并利用分布式锁解决了高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,有效地解决了多台服务器无法充分利用同一个限制资源的问题。
48.如图1所示,本发明实施例提供一种实现分布式限流器的方法,包括以下步骤:
49.步骤s100,初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库。
50.在本实施例中,使用分布式锁解决高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,解决多台服务器无法充分利用同一个限制资源的问题,通过配置限流器参数,并对资源令牌使用分布式锁,从而实现对资源的控制。
51.具体地,本实施例的一种实现方式中,步骤s100包括以下步骤:
52.步骤s101,其中所述限流器参数包括令牌生成速度,令牌桶大小,限流资源标识,白名单开关及白名单列表,黑名单开关及黑名单列表和单一身份单位时间申请令牌最大数量。
53.在初始化限流器时,需要配置一系列限流器参数,其中包括令牌生成速度v(每秒生成几个令牌),令牌桶大小n(最多可以存储多少令牌),限流资源标识x(用于区分资源类别,区分不同的限流资源),白名单开关及白名单列表(用于判断是否进行白名单验证以及存储白名单列表),黑名单开关及黑名单列表(用于判断是否进行黑名单验证以及存储黑名单列表),以及单一身份单位时间申请令牌最大数量m。
54.以上参数的具体数量可以根据实际业务场景按需配置,并且可以根据业务场景的改变对参数进行适应性修改。
55.步骤s102,配置令牌生成速度参数,限流器在后台以所述令牌生成速度持续生成资源令牌,存入分布式数据库。
56.在本实施例中,限流器在后台以速度v持续生成资源x的令牌,并且同时存入分布式数据库。通过控制资源x的令牌完成对资源数量的控制。
57.步骤s200,获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源。
58.使用方以身份i请求资源x的令牌,在进行资源分配之前,首先获取使用方的身份信息,根据身份信息进行限流器参数验证并根据验证结果处理令牌资源。
59.具体地,本实施例的一种实现方式中,步骤s200包括以下步骤:
60.步骤s201,判断是否启用白名单开关,判断所述身份信息是否在白名单列表中。
61.具体地,本实施例的一种实现方式中,步骤s201包括以下步骤:
62.步骤s201a,若已启用白名单开关并且所述身份信息在白名单列表中,则继续进行其他参数判断。
63.在本实施例中,预先统计并设置白名单列表,当白名单开关开启时,进行白名单验证,身份信息存在于白名单列表中时,则通过白名单验证,通过用户申请资源令牌的请求。
64.步骤s201b,若已启用白名单开关并且所述身份信息不在白名单列表中,则拒绝资源令牌请求。
65.若已启用白名单开关并且所述身份信息不在白名单列表中,则拒绝资源令牌请求,需要注意的是,如果没有启用白名单开关,则无需进行白名单验证,即使用户身份信息不在白名单之中也不影响白名单验证,不影响用户申请资源令牌的请求。
66.步骤s202,判断是否启用黑名单开关,判断所述身份信息是否在黑名单列表中。
67.具体地,本实施例的一种实现方式中,步骤s202包括以下步骤:
68.步骤s202a,若已启用黑名单开关并且所述身份信息不在黑名单列表中,则继续进行其他参数判断。
69.在本实施例中,预先统计并设置黑名单列表,当黑名单开关开启时,进行黑名单验证,身份信息不存在于黑名单列表中时,则通过黑名单验证,通过用户申请资源令牌的请求。
70.步骤s202b,若已启用黑名单开关并且所述身份信息在黑名单列表中,则拒绝资源令牌请求。
71.若已启用黑名单开关并且所述身份信息在黑名单列表中,则拒绝资源令牌请求。在本实施例中,如果没有启用黑名单开关,则无需进行黑名单验证,即使用户身份信息在黑名单之中也不影响黑名单验证,不影响用户申请资源令牌的请求。
72.步骤s203,若开启限制单一身份单位时间申请令牌最大数量,则判断所述身份信息已申请令牌数量是否超过所述单一身份单位时间申请令牌最大数量。
73.具体地,本实施例的一种实现方式中,步骤s203包括以下步骤:
74.步骤s203a,若所述身份信息已申请令牌数量已超过最大数量,则拒绝资源令牌请求。
75.步骤s203b,若所述身份信息已申请令牌数量未超过最大数量,则继续进行其他参数判断。
76.资源令牌申请存在等待时间,若申请数量超过一定限度,则需要进行控制,在本实施例中通过设置限制单一身份单位时间申请令牌最大数量来控制资源令牌申请数量,若所述身份信息已申请令牌数量已超过最大数量,则拒绝资源令牌请求,若所述身份信息已申请令牌数量未超过最大数量,则继续进行其他参数判断。
77.步骤s300,对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。
78.具体地,本实施例的一种实现方式中,步骤s300包括以下步骤:
79.步骤s301,对令牌加分布式锁,判断剩余令牌数。
80.步骤s302,若存在剩余令牌,则在分布式数据库扣减令牌,对令牌解除分布式锁。
81.步骤s303,若不存在剩余令牌,则对令牌解除分布式锁,并计算等待时间。
82.在本实施例中,对令牌资源加分布式锁。如果剩余令牌数大于0,则在分布式数据库扣减令牌,再对令牌解除分布式锁,返回令牌,允许使用方请求资源。如果剩余令牌数等于0,则对令牌解除分布式锁,计算等待时间t即下一可用令牌出现所需要的时间,使用方等待t时间后,再重新执行限流器参数验证步骤。
83.具体地,本实施例的一种实现方式中,步骤s303包括以下步骤:
84.步骤s303a,所述等待时间为下一可用令牌出现所需时间。
85.步骤s303b,经过所述等待时间后,重新进行限流器参数验证。
86.等待时间将会反馈给使用方,这样使用方可以根据等待时间,控制下次申请资源时的频率,从而提高业务处理的流畅度和效率。
87.在本实施例中,首先配置限流器的各种参数,并设置限流器在分布式数据库中以预设速度持续生成特定资源的令牌,当使用方请求资源时,获取使用方的身份信息,通过配置依次进行白名单限制验证、黑名单限制验证、单一身份最大申请数限制验证,再对生成的资源令牌加分布式锁,判断剩余令牌数量,根据令牌数量分别进行处理,若剩余令牌数量大于0,则在分布式数据库扣减令牌,再对令牌解除分布式锁,返回令牌,允许使用方请求资源。如果剩余令牌数等于0,则对令牌解除分布式锁,计算等待时间t即下一可用令牌出现所需要的时间,使用方等待t时间后,再重新执行限流器参数验证步骤。
88.本实施例通过上述技术方案达到以下技术效果:
89.本发明公开了一种实现分布式限流器的方法、终端及存储介质,包括:初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。本发明在单机限流器的基础上使用分布式数据库存储相关数据,并利用分布式锁解决
了高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,有效地解决了多台服务器无法充分利用同一个限制资源的问题。
90.示例性设备
91.基于上述实施例,本发明还提供一种终端,包括:通过系统总线连接的处理器、存储器、接口、显示屏以及通讯模块;其中,所述处理器用于提供计算和控制能力;所述存储器包括存储介质以及内存储器;所述存储介质存储有操作系统和计算机程序;所述内存储器为所述存储介质中的操作系统和计算机程序的运行提供环境;所述接口用于连接外部设备,例如,移动终端以及计算机等设备;所述显示屏用于显示相应的信息;所述通讯模块用于与云端服务器或移动终端进行通讯。
92.所述计算机程序被所述处理器执行时用以实现一种实现分布式限流器的方法的步骤。
93.本领域技术人员可以理解的是,图2中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
94.在一个实施例中,提供了一种终端,其中,包括:处理器和存储器,所述存储器存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被所述处理器执行时用于实现如上所述的实现分布式限流器的方法的步骤。
95.在一个实施例中,提供了一种存储介质,其中,所述存储介质存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被所述处理器执行时用于实现如上所述的实现分布式限流器的方法的步骤。
96.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。
97.综上,本发明公开了一种实现分布式限流器的方法、终端及存储介质,包括:初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。本发明在单机限流器的基础上使用分布式数据库存储相关数据,并利用分布式锁解决了高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,有效地解决了多台服务器无法充分利用同一个限制资源的问题。
98.应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
技术特征:
1.一种实现分布式限流器的方法,其特征在于,包括:初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。2.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述初始化限流器,配置限流器参数,包括:其中所述限流器参数包括令牌生成速度,令牌桶大小,限流资源标识,白名单开关及白名单列表,黑名单开关及黑名单列表和单一身份单位时间申请令牌最大数量。3.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述生成资源令牌,存入分布式数据库,包括:配置令牌生成速度参数,限流器在后台以所述令牌生成速度持续生成资源令牌,存入分布式数据库。4.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:判断是否启用白名单开关,判断所述身份信息是否在白名单列表中;若已启用白名单开关并且所述身份信息在白名单列表中,则继续进行其他参数判断;若已启用白名单开关并且所述身份信息不在白名单列表中,则拒绝资源令牌请求。5.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:判断是否启用黑名单开关,判断所述身份信息是否在黑名单列表中;若已启用黑名单开关并且所述身份信息不在黑名单列表中,则继续进行其他参数判断;若已启用黑名单开关并且所述身份信息在黑名单列表中,则拒绝资源令牌请求。6.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述获取请求资源令牌方的身份信息,对所述身份信息进行限流验证,根据验证结果处理令牌资源,包括:若开启限制单一身份单位时间申请令牌最大数量,则判断所述身份信息已申请令牌数量是否超过所述单一身份单位时间申请令牌最大数量;若所述身份信息已申请令牌数量已超过最大数量,则拒绝资源令牌请求;若所述身份信息已申请令牌数量未超过最大数量,则继续进行其他参数判断。7.根据权利要求1所述实现分布式限流器的方法,其特征在于,所述对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,包括:对令牌加分布式锁,判断剩余令牌数;若存在剩余令牌,则在分布式数据库扣减令牌,对令牌解除分布式锁;若不存在剩余令牌,则对令牌解除分布式锁,并计算等待时间。8.根据权利要求7所述实现分布式限流器的方法,其特征在于,所述若不存在剩余令牌,则对令牌解除分布式锁,并计算等待时间,包括:所述等待时间为下一可用令牌出现所需时间;
经过所述等待时间后,重新进行限流器参数验证。9.一种终端,其特征在于,包括:处理器以及存储器,所述存储器存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被所述处理器执行时用于实现如权利要求1-8中任意一项所述的实现分布式限流器的方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有实现分布式限流器的方法的执行程序,所述实现分布式限流器的方法的执行程序被处理器执行时用于实现如权利要求1-8中任意一项所述的实现分布式限流器的方法的步骤。
技术总结
本发明公开了一种实现分布式限流器的方法、终端及存储介质,包括:初始化限流器,配置限流器参数,生成资源令牌,存入分布式数据库;获取请求资源令牌方的身份信息,对所述身份信息进行限流器参数验证,根据验证结果处理令牌资源;对所述令牌资源加分布式锁,根据剩余令牌数量在分布式数据库扣减令牌,对令牌解除分布式锁,释放令牌资源。本发明在单机限流器的基础上使用分布式数据库存储相关数据,并利用分布式锁解决了高并发下的数据安全问题以及分布式事务问题,实现生产可用的分布式限流器,有效地解决了多台服务器无法充分利用同一个限制资源的问题。个限制资源的问题。个限制资源的问题。
技术研发人员:钦鹏 田灯友 李志铭 李晓明 黄瑞婷
受保护的技术使用者:重庆市易平方科技有限公司
技术研发日:2023.04.04
技术公布日:2023/8/21
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/