1.本技术涉及计算机通信技术领域,具体而言,涉及一种基于令牌桶的分布式限流方法和分布式限流装置。
背景技术:2.随着计算机技术的发展,越来越多的技术应用在金融领域或it技术等领域,但由于各行业的安全性及实时性要求,也对技术提出了更高的要求。其中,在数据流量管理方面,为了防止某一服务器访问量或某一应用访问量过大而导致系统瘫痪,常常采用限流的方式来对服务器或应用后台进行保护。限流,即服务或者应用对自身保护的一种手段,通过限制或者拒绝调用方的流量,来保证自身的负载。传统的限流方式流量限制是在单机内存中,多台网关服务器无法共享限流流量,而随着开放网关使用的数量越来越多,如何能够实现多机分布式限流对当前技术提出了更高要求。
技术实现要素:3.有鉴于此,本技术的目的在于提供一种基于令牌桶的分布式限流方法和分布式限流装置,根据用户的请求来源地址确定该用户对应的限流策略,并根据该用户所属的限流策略向令牌桶中放入对应的令牌,以对该用户进行限流。每个用户均有所属的限流策略,使用对应的限流策略对用户进行限流,解决了现有技术中无法实现分布式限流的问题,提高了对于用户限流的准确性和实时性,实现了对于不同用户进行分布式限流的目的。
4.第一方面,本技术实施例提供了一种基于令牌桶的分布式限流方法,所述分布式限流方法包括:
5.接收用户发送的接入请求,并确定所述用户的请求来源地址;
6.基于所述用户的请求来源地址,确定该用户所对应的限流策略;其中,所述限流策略用于表征所述用户在每个限流间隔时间内能够使用的令牌的数量;
7.基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌;
8.接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌;
9.若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求;
10.若否,则拒绝所述业务请求。
11.进一步的,在所述接收用户发送的接入请求之前,所述分布式限流方法还包括:
12.针对于每个不同的限流等级,为该限流等级对应的限流策略设置所述限流间隔时间、每一限流间隔时间内需要放入所述令牌桶中的令牌的数量和所述用户每次业务请求消耗的令牌的数量。
13.进一步的,所述基于所述用户的请求来源地址,确定该用户所对应的限流策略,包
括:
14.基于所述用户的请求来源地址,判断所述用户是否为白名单用户;
15.若否,则基于所述请求来源地址确定所述用户的限流等级,并基于所述限流等级确定该用户所对应的限流策略。
16.进一步的,通过以下步骤判断是否能够从令牌桶中为所述业务请求获取所述令牌:
17.在每一限流间隔时间内,判断所述令牌桶中当前令牌数量是否大于或等于所述业务请求消耗的令牌的数量;
18.若是,则能够从所述令牌桶中为所述业务请求获取所述令牌;
19.若否,则不能从所述令牌桶中为所述业务请求获取所述令牌。
20.进一步的,当判断能够从所述令牌桶中为所述业务请求获取所述令牌时,所述分布式限流方法还包括;
21.确定所述用户在当前限流间隔时间内的令牌消耗数量;
22.在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,向所述令牌桶中放入所述令牌消耗数量对应的令牌。
23.进一步的,当判断不能从所述令牌桶中为所述业务请求获取所述令牌时,所述分布式限流方法还包括;
24.在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,基于所述限流策略,向所述用户所属的令牌桶中放入所述限流策略对应的令牌。
25.进一步的,当拒绝所述业务请求之后,所述分布式限流方法还包括:
26.将所述用户确定为超额访问用户,并确定所述超额访问用户的用户信息;其中,所述用户信息包括请求来源地址、用户姓名、用户联系方式和api路径;
27.根据所述超额访问用户的用户联系方式,向所述超额访问用户发送每个不同限流等级对应的限流策略;
28.当检测到所述超额访问用户对于限流策略的下单操作时,则获取所述超额访问用户的下单等级,并将所述下单等级所对应的限流策略确定为所述超额访问用户所对应的限流策略,以使所述超额访问用户在下次发送业务请求时,根据所述超额访问用户所对应的限流策略为所述超额访问用户提供所述限流策略对应的令牌;其中,所述下单等级为所述限流等级中的任意一个。
29.第二方面,本技术实施例还提供了一种基于令牌桶的分布式限流装置,所述分布式限流装置包括:
30.接收模块,用于接收用户发送的接入请求,并确定所述用户的请求来源地址;
31.限流策略确定模块,用于基于所述用户的请求来源地址,确定该用户所对应的限流策略;其中,所述限流策略用于表征所述用户在每个限流间隔时间内能够使用的令牌数量;
32.令牌放置模块,用于基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌;
33.判断模块,用于接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌;
34.请求执行模块,用于若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求;
35.请求拒绝模块,用于若否,则拒绝所述业务请求。
36.第三方面,本技术实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如上述的基于令牌桶的分布式限流方法的步骤。
37.第四方面,本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述的基于令牌桶的分布式限流方法的步骤。
38.本技术实施例提供的基于令牌桶的分布式限流方法,首先,接收用户发送的接入请求,并确定所述用户的请求来源地址;然后基于所述用户的请求来源地址,确定该用户所对应的限流策略;其中,所述限流策略用于表征所述用户在每个限流间隔时间内能够使用的令牌的数量;基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌;最后,接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌;若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求;若否,则拒绝所述业务请求。
39.本技术提供的分布式限流方法与现有技术中的限流方法相比,根据用户的请求来源地址确定该用户对应的限流策略,并根据该用户所属的限流策略向令牌桶中放入对应的令牌,以对该用户进行限流。每个用户均有所属的限流策略,使用对应的限流策略对用户进行限流,解决了现有技术中无法实现分布式限流的问题,提高了对于用户限流的准确性和实时性,实现了对于不同用户进行分布式限流的目的。
40.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
41.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
42.图1为本技术实施例所提供的一种基于令牌桶的分布式限流方法的流程图;
43.图2为本技术实施例所提供的限流策略的确定方法的流程图;
44.图3为本技术实施例所提供的一种基于令牌桶的分布式限流装置的结构示意图;
45.图4为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
46.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实
施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的每个其他实施例,都属于本技术保护的范围。
47.随着计算机技术的发展,越来越多的技术应用在金融领域或it技术等领域,但由于各行业的安全性及实时性要求,也对技术提出了更高的要求。其中,在数据流量管理方面,为了防止某一服务器访问量或某一应用访问量过大而导致系统瘫痪,常常采用限流的方式来对服务器或应用后台进行保护。限流,即服务或者应用对自身保护的一种手段,通过限制或者拒绝调用方的流量,来保证自身的负载。传统的限流方式流量限制是在单机内存中,多台网关服务器无法共享限流流量,而随着开放网关使用的数量越来越多,如何能够实现多机分布式限流对当前技术提出了更高要求。
48.近年来,在高并发的应用中,用户限流是一个绕不开的话题。因为随着我们系统的用户数越来越多,api网关在安全,性能方面有了更高的要求,对代码的便于维护性、健壮性等存在极大挑战。请求量大网关系统每天需要扛几十亿的流量调用,接口的平稳运行、每一个接口在后端服务之后的性能耗损都非常重要。限流可以保障我们的api服务对所有用户的可用性,也可以防止网络攻击。
49.基于此,本技术实施例提供了一种基于令牌桶的分布式限流方法,每个用户均有所属的限流策略,使用对应的限流策略对用户进行限流,解决了现有技术中无法实现分布式限流的问题,提高了对于用户限流的准确性和实时性,实现了对于不同用户进行分布式限流的目的。
50.请参阅图1,图1为本技术实施例所提供的一种基于令牌桶的分布式限流方法的流程图。如图1中所示,本技术实施例提供的基于令牌桶的分布式限流方法,包括:
51.s101,接收用户发送的接入请求,并根据所述接入请求确定所述用户的请求来源地址。
52.需要说明的是,接入请求指的是用户在准备接入为用户提供业务需求的平台时,向平台发送的接入请求。请求来源地址指的是用户发送接入请求的地址,这里,请求来源地址可以是用户的ip地址(internet protocol address),对此不做具体限定。ip地址是互联网协议特有的一种地址,它是ip协议提供的一种统一的地址格式,ip地址为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
53.针对上述步骤s101,在具体实施时,当用户接入为用户提供业务需求的平台时,接收用户发送的接入请求,并根据用户发送的接入请求确定用户的请求来源地址。
54.s102,基于所述用户的请求来源地址,确定该用户所对应的限流策略。
55.需要说明的是,限流策略指的是用户在每个限流间隔时间能够请求的业务的数量,也就是,限流策略用于表征用户在每个限流间隔时间内能够使用的令牌的数量。具体的,限流间隔时间指的是预先设定好的一个间隔时间,在每个限流间隔时间内为用户提供令牌。例如,限流间隔时间可以设定为1分钟,对此本技术不做具体限定。令牌桶技术(token bucket)是一种常见的流量测量技术,常用于流量的限制和流量的整形,能够对流量的速率和突发进行测量。本技术所提供的分布式限流方法即是在令牌桶技术的基础上实现的。令牌即是存放在令牌桶中的,用于相应用户业务请求的令牌。令牌的数量指的是令牌桶中令
牌的数量。例如,可以设定用户在一分钟内可使用的令牌的数量为100个,对此本技术不做具体限定。
56.针对上述步骤s102,在具体实施时,当步骤s101确定出了用户的请求来源地址后,根据该用户的请求来源地址,确定该用户所对应的限流策略。延续上一实施例,限流策略可以是该用户在每一分钟内能够使用100个令牌。
57.作为一种可选的实施方式,在所述接收所述用户发送的接入请求之前,本技术提供的分布式限流方法还包括:
58.针对于每个不同的限流等级,为该限流等级对应的限流策略设置所述限流间隔时间、每一限流间隔时间内需要放入所述令牌桶中的令牌的数量和所述用户每次业务请求消耗的令牌的数量。
59.需要说明的是,限流等级指的是预先设定好的,不同的限流策略对应的等级。根据本技术提供的实施例,限流等级可以包括第一限流等级、第二限流等级和第三限流等级等,对此本技术不做具体限定。每个不同的限流等级对应不同的限流策略。每一限流间隔时间内需要放入令牌桶中的令牌的数量指的是在每一限流间隔时间内,向令牌桶中放置的令牌的数量。例如,当限流间隔时间为1分钟时,每一分钟内需要放入令牌桶中的令牌的数量可以是100个,对此本技术不做具体限定。用户每次业务请求消耗的令牌的数量指的是用户每发送一次业务请求,响应该业务请求时所消耗的令牌的数量。例如,可以设定用户每次业务请求消耗的令牌的数量为1个,对此本技术不做具体限定。
60.针对上述步骤,在具体实施时,针对于每个不同的限流等级,对该限流等级对应的限流策略设置限流间隔时间、每一限流间隔时间内需要放入令牌桶中的令牌的数量和用户每次业务请求消耗的令牌的数量。延续上一实施例,例如,针对于第一限流等级,为第一限流等级对应的限流策略设定限流间隔时间为1分钟,每一限流间隔时间内需要放入令牌桶中的令牌的数量为100个,用户每次业务请求消耗的令牌的数量为1个;针对于第二限流等级,为第二限流等级对应的限流策略设定限流间隔时间为1分钟,每一限流间隔时间内需要放入令牌桶中的令牌的数量为500个,用户每次业务请求消耗的令牌的数量为1个;针对于第三限流等级,为第三限流等级对应的限流策略设定限流间隔时间为1分钟,每一限流间隔时间内需要放入令牌桶中的令牌的数量为1000个,用户每次业务请求消耗的令牌的数量为1个。
61.这样,在用户接入平台前,可以为不同的限流等级设定不同的限流策略,根据用户的请求来源地址确定用户所属的限流策略,以使用对应的限流策略对用户进行限流,根据设置的限流策略来实时保障平台中对所有用户的可用性,也可以有效防止网络恶意攻击。
62.这里,应注意,上述对于限流等级以及限流等级对应的限流策略的例子仅为实例,实际中,限流等级以及限流等级对应的限流策略不限于上述例子。
63.请参阅图2,图2为本技术实施例所提供的限流策略的确定方法的流程图。如图2中所示,所述基于所述用户的请求来源地址,确定该用户所对应的限流策略,包括:
64.s201,基于所述用户的请求来源地址,判断所述用户是否为白名单用户。
65.需要说明的是,白名单用户指的是无需进行限流的用户。
66.针对上述步骤s201,在具体实施时,基于用户的请求来源地址,判断该用户是否为白名单用户。具体的,通过查询请求来源地址与nacos配置的白名单ip地址进行比对,判断
该用户的请求来源地址是否在白名单ip地址内。若在白名单ip地址内,则认为该用户为白名单用户;若不在白名单ip地址内,则认为该用户不是白名单用户。若该用户为白名单用户,则为该用户走正常的api调用流程,也就是无需为该用户设定限流策略,无需用令牌桶来限制该用户的业务请求数量,无论用户发送多少个业务请求,都可以为该用户正常执行。若该用户不是白名单用户,则执行步骤s202。
67.s202,若否,则基于所述请求来源地址确定所述用户的限流等级,并基于所述限流等级确定该用户所对应的限流策略。
68.针对上述步骤s202,在具体实施时,若用户不是白名单用户,则根据该用户的请求来源地址确定该用户的限流等级,并基于限流等级确定该用户所对应的限流策略。根据本技术提供的实施例,在具体实施时,如果根据用户的请求来源地址判断该用户首次接入用户提供业务需求的平台时,则默认该用户的限流等级为最低等级,也就是上述实施例中的第一限流等级。当用户不是首次接入用户提供业务需求的平台时,则根据该用户的请求来源地址,确定该用户对应的限流等级。例如,该用户在之前购买过第二限流等级的限流策略,则根据该用户的请求来源地址可以确定该用户的限流等级为第二限流等级。在用户的限流等级确定好后,根据限流等级确定该用户提供对应的限流策略,以根据该限流策略为用户提供限流服务。
69.s103,基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌。
70.需要说明的是,限流间隔时间的开始时刻指的是在每个限流间隔时间中,该间隔时间内的开始时刻。例如,当限流间隔时间为一分钟时,限流间隔时间的开始时刻为每一分钟的开始时刻。
71.针对上述步骤s103,在具体实施时,基于确定出的该用户的限流策略,在每一限流间隔时间的开始时刻向该用户所属的令牌桶中放入限流策略对应的令牌。延续上一实施例,当确定出该用户的限流等级为第一限流等级,该用户的限流策略为限流间隔时间1分钟,每一限流间隔时间内需要放入令牌桶中的令牌的数量为100个时,则在每个一分钟的开始时刻向该用户所述的令牌桶中放入100个令牌。具体的,在实现向令牌桶中放入令牌时,将令牌持久化到redisson缓存中,采用redis lua脚本实现逻辑,即通过lua脚本执行redis命令,lua是reids支持的可执行的动态脚本语言;能够保证操作原子性,实现集群环境中用户接口访问的原子限流,避免并发访问下令牌桶令牌数量设置错误的情况,保证多台网关服务共享流量限制。当令牌桶中放满了,就丢弃当前存入的令牌。
72.s104,接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌。
73.需要说明的是,业务请求指的是用户提出的想要进行业务服务的请求,例如,业务请求可以是用户提出的针对数据库中数据的需求,对此本技术不做具体限定。
74.针对上述步骤s104,在具体实施时,当接收到用户发送的业务请求后,判断能够从令牌桶中为该业务请求获取到令牌。若是,则执行步骤s105;若否,则执行步骤s106。
75.s105,若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求。
76.针对上述步骤s105,在具体实施时,当判断能够从令牌桶中为该业务请求获取到
令牌时,从令牌桶中获取令牌并将令牌赋予业务请求,以执行具有令牌的业务请求。这里,根据该用户对应的限流策略中的每次业务请求消耗的令牌的数量获取令牌。例如,若该用户对应的限流策略中每次业务请求消耗的令牌的数量1个,则为业务请求获取1个令牌;若该用户对应的限流策略中每次业务请求消耗的令牌的数量2个,则为业务请求获取2个令牌。然后再将获取到的令牌赋予该业务请求,以执行具有令牌的业务请求。当将用户发送的业务请求传送至令牌桶节点时,如果令牌桶中有足够的令牌可以用来响应用户的业务请求时,则直接从令牌桶中获取令牌,获取的令牌的数量应与该业务请求所消耗的令牌的数量相同,同时令牌桶中的令牌量按该业务请求所消耗的令牌的数量做相应的减少。
77.s106,若否,则拒绝所述业务请求。
78.针对上述步骤s106,在具体实施时,当判断不能从令牌桶中为该业务请求获取到令牌时,则拒绝该用户发送的业务请求。如果令牌桶中的令牌数量不足或为空,则无法得到足够令牌的业务请求将被拒绝,此时令牌桶中的令牌数量不发生变化。
79.作为一种可选的实施方式,针对上述步骤s104,通过以下步骤判断是否能够从令牌桶中为所述业务请求获取所述令牌:
80.步骤1041,在每一限流间隔时间内,判断所述令牌桶中当前令牌数量是否大于或等于所述业务请求消耗的令牌的数量。
81.步骤1042,若是,则能够从所述令牌桶中为所述业务请求获取所述令牌。
82.步骤1043,若否,则不能从所述令牌桶中为所述业务请求获取所述令牌。
83.需要说明的是,当前令牌数量指的是在某一限流间隔时间内,当接收到用户的业务请求时,令牌桶中剩余的令牌的数量。
84.针对上述步骤1041-1043,在具体实施时,在每一限流间隔时间内,当接收到用户发送的业务请求时,确定该用户所属的令牌桶中当前令牌数量,判断当前令牌数量是否大于或等于业务请求消耗的令牌的数量。若是,则执行步骤1042,判断能够从所述令牌桶中为所述业务请求获取所述令牌。若否,则执行步骤1043,判断不能从所述令牌桶中为所述业务请求获取所述令牌。
85.作为一种可选的实施方式,当判断能够从所述令牌桶中为所述业务请求获取所述令牌时,所述分布式限流方法还包括;
86.a:确定所述用户在当前限流间隔时间内的令牌消耗数量。
87.需要说明的是,令牌消耗数量指的是该用户在当前限流间隔时间内所使用的令牌的数量。
88.针对于上述步骤a,在具体实施时,当能够从令牌桶中为业务请求获取令牌时,则确定用户在当前限流间隔时间内的令牌消耗数量,例如,用户在当前限流间隔时间内的令牌消耗数量为70个,对此本技术不做具体限定。
89.b:在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,向所述令牌桶中放入所述令牌消耗数量对应的令牌。
90.需要说明的是,下一限流间隔时间指的是当前限流间隔时间之后的一个限流间隔时间。
91.针对上述步骤b,在具体实施时,在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,向令牌桶中放入令牌消耗数量对应的令牌。延续步骤a中的实施例,当该用
户在每一限流间隔时间内能够使用的令牌的数量为100时,用户在当前限流间隔时间内的令牌消耗数量为70个,令牌消耗数量小于该用户能够使用的令牌的数量,所以在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,仅添加70个令牌以使令牌桶达到最大容量。
92.作为一种可选的实施方式,当判断不能从所述令牌桶中为所述业务请求获取所述令牌时,所述分布式限流方法还包括;
93.在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,基于所述限流策略,向所述用户所属的令牌桶中放入所述限流策略对应的令牌。
94.针对上述步骤,在具体实施时,在当前限流间隔时间内所有的令牌全部被与用户耗尽时,在当前限流间隔时间内将不会再向令牌桶中放入令牌,在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,基于该用户对应的限流策略,向该用户所属的令牌桶中放入限流策略对应的令牌。
95.作为一种可选的实施方式,当拒绝所述业务请求之后,所述分布式限流方法还包括:
96.a:将所述用户确定为超额访问用户,并确定所述超额访问用户的用户信息。
97.需要说明的是,超额访问用户指的是在某一限流间隔时间内,将令牌桶内的全部令牌全部耗尽的用户。用户信息指的是该超额访问用户的用户基本信息,这里,用户信息包括请求来源地址、用户姓名、用户联系方式和api路径。用户联系方式可以包括超额访问用户的邮箱或手机号等,对此本技术不做具体限定。作为一种可选的实施方式,用户信息也可以包括超额访问用户的其他信息,例如所调用的令牌的数量,所超额的令牌的数量等,对此本技术不做具体限定。
98.针对上述步骤a,在具体实施时,当拒绝了该用户的业务请求后,将该用户确定为超额访问用户,并确定该超额访问用户的用户信息,这里,确定该超额访问用户的请求来源地址、用户姓名、用户联系方式和api路径。
99.b:根据所述超额访问用户的用户联系方式,向所述超额访问用户发送每个不同限流等级对应的限流策略。
100.针对上述步骤b,在具体实施时,根据超额访问用户的用户联系方式,将每个不同限流等级对应的限流策略发送给超额访问用户,以使超额访问用户可以对不同限流等级对应的限流策略进行选择。
101.c:当检测到所述超额访问用户对于限流策略的下单操作时,则获取所述超额访问用户的下单等级,并将所述下单等级所对应的限流策略确定为所述超额访问用户所对应的限流策略,以使所述超额访问用户在下次发送业务请求时,根据所述超额访问用户所对应的限流策略为所述超额访问用户提供所述限流策略对应的令牌。
102.需要说明的是,下单操作指的是用户在购买限流策略时对于限流策略的下单操作。下单等级为用户的下单操作对应的限流等级,这里,下单等级为预设的限流等级中的任意一个。
103.针对上述步骤c,在具体实施时,当检测到超额访问用户对于限流策略的下单操作时,则获取超额访问用户的下单等级,并将下单等级所对应的限流策略确定为该超额访问用户所对应的限流策略,以使该超额访问用户在下次发送业务请求时,根据该超额访问用
户所对应的限流策略为超额访问用户提供限流策略对应的令牌。延续上述实施例中的例子,例如,超额访问用户所下单的限流等级为第三限流等级时,当检测到超额访问用户对于限流策略的下单操作时,获取该超额访问用户的下单等级为第三限流等级,并将第三限流等级所对应的限流策略确定为该超额访问用户的限流策略,这样,该超额访问用户在下次发送业务请求时,就可以该超额访问用户下单的第三限流等级所对应的限流策略为该超额访问用户提供该限流策略对应的令牌,即每一分钟内需要放入令牌桶中的令牌的数量为1000个,用户每次业务请求消耗的令牌的数量为1个。
104.这样,当用户在发送业务请求时,在该限流间隔时间所消耗的令牌的数量超过了该用户对应的限流策略中的令牌的数量时,即可将已有的不同等级的限流策略发送给用户,用户可以根据自身的需求进行选择。这样用户在下次发送业务请求时,就可以根据用户所选则的限流等级对应的限流策略为用户提供对应的令牌。
105.本技术实施例提供的基于令牌桶的分布式限流方法,首先,接收用户发送的接入请求,并确定所述用户的请求来源地址;然后基于所述用户的请求来源地址,确定该用户所对应的限流策略;其中,所述限流策略用于表征所述用户在每个限流间隔时间内能够使用的令牌的数量;基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌;最后,接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌;若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求;若否,则拒绝所述业务请求。
106.本技术提供的分布式限流方法与现有技术中的限流方法相比,根据用户的请求来源地址确定该用户对应的限流策略,并根据该用户所属的限流策略向令牌桶中放入对应的令牌,以对该用户进行限流。每个用户均有所属的限流策略,使用对应的限流策略对用户进行限流,解决了现有技术中无法实现分布式限流的问题,提高了对于用户限流的准确性和实时性,实现了对于不同用户进行分布式限流的目的。
107.请参阅图3,图3为本技术实施例所提供的一种基于令牌桶的分布式限流装置的结构示意图。如图3中所示,所述分布式限流装置300包括:
108.接收模块301,用于接收用户发送的接入请求,并确定所述用户的请求来源地址;
109.限流策略确定模块302,用于基于所述用户的请求来源地址,确定该用户所对应的限流策略;其中,所述限流策略用于表征所述用户在每个限流间隔时间内能够使用的令牌数量;
110.令牌放置模块303,用于基于所述限流策略,在每一限流间隔时间的开始时刻向所述用户所属的令牌桶中放入所述限流策略对应的令牌;
111.判断模块304,用于接收用户发送的业务请求,判断是否能够从所述令牌桶中为所述业务请求获取所述令牌;
112.请求执行模块305,用于若是,则获取所述令牌并将所述令牌赋予所述业务请求,以执行具有令牌的业务请求;
113.请求拒绝模块306,用于若否,则拒绝所述业务请求。
114.进一步的,所述分布式限流装置300还包括限流策略设定模块,所述限流策略设定模块用于:
115.针对于每个不同的限流等级,为该限流等级对应的限流策略设置所述限流间隔时
间、每一限流间隔时间内需要放入所述令牌桶中的令牌的数量和所述用户每次业务请求消耗的令牌的数量。
116.进一步的,所述限流策略确定模块302在用于基于所述用户的请求来源地址,确定该用户所对应的限流策略时,所述限流策略确定模块302还用于:
117.基于所述用户的请求来源地址,判断所述用户是否为白名单用户;
118.若否,则基于所述请求来源地址确定所述用户的限流等级,并基于所述限流等级确定该用户所对应的限流策略。
119.进一步的,所述判断模块304通过以下步骤判断是否能够从令牌桶中为所述业务请求获取所述令牌:
120.在每一限流间隔时间内,判断所述令牌桶中当前令牌数量是否大于或等于所述业务请求消耗的令牌的数量;
121.若是,则能够从所述令牌桶中为所述业务请求获取所述令牌;
122.若否,则不能从所述令牌桶中为所述业务请求获取所述令牌。
123.进一步的,所述分布式限流装置300还包括第一放置模块,当判断能够从所述令牌桶中为所述业务请求获取所述令牌时,所述第一放置模块用于:
124.确定所述用户在当前限流间隔时间内的令牌消耗数量;
125.在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,向所述令牌桶中放入所述令牌消耗数量对应的令牌。
126.进一步的,所述分布式限流装置300还包括第二放置模块,当判断不能从所述令牌桶中为所述业务请求获取所述令牌时,所述第二放置模块用于:
127.在位于当前限流间隔时间之后的下一限流间隔时间的开始时刻,基于所述限流策略,向所述用户所属的令牌桶中放入所述限流策略对应的令牌。
128.进一步的,所述分布式限流装置300还包括限流策略发送模块,当拒绝所述业务请求之后,所述限流策略发送模块用于:
129.将所述用户确定为超额访问用户,并确定所述超额访问用户的用户信息;其中,所述用户信息包括请求来源地址、用户姓名、用户联系方式和api路径;
130.根据所述超额访问用户的用户联系方式,向所述超额访问用户发送每个不同限流等级对应的限流策略;
131.当检测到所述超额访问用户对于限流策略的下单操作时,则获取所述超额访问用户的下单等级,并将所述下单等级所对应的限流策略确定为所述超额访问用户所对应的限流策略,以使所述超额访问用户在下次发送业务请求时,根据所述超额访问用户所对应的限流策略为所述超额访问用户提供所述限流策略对应的令牌;其中,所述下单等级为所述限流等级中的任意一个。
132.请参阅图4,图4为本技术实施例所提供的一种电子设备的结构示意图。如图4中所示,所述电子设备400包括处理器410、存储器420和总线430。
133.所述存储器420存储有所述处理器410可执行的机器可读指令,当电子设备400运行时,所述处理器410与所述存储器420之间通过总线430通信,所述机器可读指令被所述处理器410执行时,可以执行如上述图1以及图2所示方法实施例中的基于令牌桶的分布式限流方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
134.本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时可以执行如上述图1以及图2所示方法实施例中的基于令牌桶的分布式限流方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
135.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
136.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
137.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
138.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
139.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
140.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
141.最后应说明的是:以上所述实施例,仅为本技术的具体实施方式,用以说明本技术的技术方案,而非对其限制,本技术的保护范围并不局限于此,尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本技术实施例技术方案的精神和范围,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。