H04L47/215 H04L47/10 H04L47/50
1.一种流量限制方法,其特征在于,所有用户请求最先到达,经过处理后,执行令牌申请操作,所述令牌申请操作由令牌生成控制器按照一定规则生成令牌,当令牌申请触发令牌生成规则时,令牌生成控制器生成一定数量的令牌,放入令牌桶中,由令牌桶服务器发放用户请求所需的令牌,并将请求转发到各应用服务器,执行数据访问操作;
用户访问频繁,令牌不足的情况下,暂时存入排队队列等待,并检测令牌桶中的令牌数量;当令牌桶中存在足够的令牌时,再对请求进行转发操作。
2.根据权利要求1所述的一种流量限制方法,其特征在于,用户请求到达之前,设置令牌桶的最大令牌数、令牌桶补充令牌的间隔时间和令牌桶每个时间间隔补充令牌的数量;
对于不同类型的API服务,根据占用的网络资源和数据库资源大小不同,设置不同的服务访问所需要的令牌数量。
3.根据权利要求2所述的一种流量限制方法,其特征在于,当http请求到达服务端时,首先由请求进行拦截处理,获取http请求的限流策略标志信息,查询令牌桶服务器中是否存在所述限流策略标志信息,如果不存在,进行初始化令牌桶操作,在令牌桶中放入预设的令牌桶最大令牌数量,设置令牌的过期时间,并设置令牌的写入时间为当前时间。
4.根据权利要求3所述的一种流量限制方法,其特征在于,若存在限流策略标志信息,则读取令牌桶服务器中所述限流策略标志信息对应的令牌写入时间,与当前时间戳进行对比,如果当前时间戳与令牌最后写入时间之间的时间间隔大于等于令牌桶补充令牌的间隔时间,根据添加令牌的速率计算所述当前时间戳与令牌最后写入时间之间的时间间隔可以添加的令牌数,并将令牌补充到令牌桶中,更新令牌的写入时间为当前时间。
5.根据权利要求4所述的一种流量限制方法,其特征在于,如果当前时间戳与令牌最后写入时间之间的时间间隔小于令牌桶补充令牌的间隔时间,则判断当前http请求所需的令牌数量,如果所需令牌数量小于等于当前令牌桶剩余数量,在令牌桶中移除http请求需要的令牌,对http请求进行转发,由应用服务器执行具体的操作。
6.根据权利要求5所述的一种流量限制方法,其特征在于,如果所需令牌数量大于当前令牌桶剩余数量,则设置排队队列,并设置排队队列的长度和队列元素的过期时间,如果http请求所需令牌数量大于当前令牌桶剩余数量,将该请求放入排队队列。
7.根据权利要求6所述的一种流量限制方法,其特征在于,当队列中存放的http请求到达过期时间时,直接拒绝该请求,并从排队队列中移除。
8.根据权利要求6或7所述的一种流量限制方法,其特征在于,通过设置定时器,使用探针检测令牌桶中的令牌数量,当令牌桶中存放的令牌数量大于等于请求所需要的令牌数量时,令牌桶服务器发给请求所需要的令牌数量,并将所述请求转发到应用服务器执行。
9.根据权利要求8所述的一种流量限制方法,其特征在于,如果令牌桶中的令牌数量小于http请求所需的令牌数量,则计算当前时间戳与令牌桶最后生成令牌时间的时间间隔,如果时间间隔大于所述令牌桶补充令牌的间隔时间,则直接将令牌桶中令牌补充至最大容量,更新令牌生成时间为当前时间戳,并发给所述请求所需要的令牌数量,转发所述请求到应用服务器执行后续操作。
10.一种流量限制装置,其特征在于,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至9中任一所述的方法。
本发明涉及web应用技术领域,具体提供一种流量限制方法及装置。
随着计算机技术的迅猛发展,各种新技术、新架构思想在网络产品中得到应用,系统由传统的单机版部署发展到现在的分布式部署,越来越多的传统架构朝着微服务架构、分布式架构转变,传统行业也在朝着“互联网+”的模式转型。这对服务访问质量、服务访问速度都提出了要求。在高并发的场景下,最常用的三种技术手段是限流、缓存和降级。
限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的请求数据进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。
令牌桶算法是一种常用的限流算法,原理是系统以一个恒定的速度往桶里放入令牌,如果请求需要被处理,则需要先从桶里获取令牌,当桶里没有令牌可取时,则拒绝服务,令牌桶算法通过发放令牌,根据令牌的rate频率实现请求频率限制、容量限制等。
传统的令牌桶算法需要配置一个专用的线程来定时向令牌桶中添加令牌,服务器线程和CPU资源占用大。传统的流量限制大多是在单机范围内进行的,无法在分布式环境应用,也无法在多节点之间共享流量。
本发明是针对上述现有技术的不足,提供一种实用性强的流量限制方法。
本发明进一步的技术任务是提供一种设计合理,安全适用的流量限制装置。
本发明解决其技术问题所采用的技术方案是:
一种流量限制方法,所有用户请求最先到达,经过处理后,执行令牌申请操作,所述令牌申请操作由令牌生成控制器按照一定规则生成令牌,当令牌申请触发令牌生成规则时,令牌生成控制器生成一定数量的令牌,放入令牌桶中,由令牌桶服务器发放用户请求所需的令牌,并将请求转发到各应用服务器,执行数据访问操作;
用户访问频繁,令牌不足的情况下,暂时存入排队队列等待,并检测令牌桶中的令牌数量;当令牌桶中存在足够的令牌时,再对请求进行转发操作。
进一步的,用户请求到达之前,设置令牌桶的最大令牌数、令牌桶补充令牌的间隔时间和令牌桶每个时间间隔补充令牌的数量;
对于不同类型的API服务,根据占用的网络资源和数据库资源大小不同,设置不同的服务访问所需要的令牌数量。
进一步的,当http请求到达服务端时,首先由请求进行拦截处理,获取http请求的限流策略标志信息,查询令牌桶服务器中是否存在所述限流策略标志信息,如果不存在,进行初始化令牌桶操作,在令牌桶中放入预设的令牌桶最大令牌数量,设置令牌的过期时间,并设置令牌的写入时间为当前时间。
进一步的,若存在限流策略标志信息,则读取令牌桶服务器中所述限流策略标志信息对应的令牌写入时间,与当前时间戳进行对比,如果当前时间戳与令牌最后写入时间之间的时间间隔大于等于令牌桶补充令牌的间隔时间,根据添加令牌的速率计算所述当前时间戳与令牌最后写入时间之间的时间间隔可以添加的令牌数,并将令牌补充到令牌桶中,更新令牌的写入时间为当前时间。
进一步的,如果当前时间戳与令牌最后写入时间之间的时间间隔小于令牌桶补充令牌的间隔时间,则判断当前http请求所需的令牌数量,如果所需令牌数量小于等于当前令牌桶剩余数量,在令牌桶中移除http请求需要的令牌,对http请求进行转发,由应用服务器执行具体的操作。
进一步的,如果所需令牌数量大于当前令牌桶剩余数量,则设置排队队列,并设置排队队列的长度和队列元素的过期时间,如果http请求所需令牌数量大于当前令牌桶剩余数量,将该请求放入排队队列。
作为优选,当队列中存放的http请求到达过期时间时,直接拒绝该请求,并从排队队列中移除。
进一步的,通过设置定时器,使用探针检测令牌桶中的令牌数量,当令牌桶中存放的令牌数量大于等于请求所需要的令牌数量时,令牌桶服务器发给请求所需要的令牌数量,并将所述请求转发到应用服务器执行。
进一步的,如果令牌桶中的令牌数量小于http请求所需的令牌数量,则计算当前时间戳与令牌桶最后生成令牌时间的时间间隔,如果时间间隔大于所述令牌桶补充令牌的间隔时间,则直接将令牌桶中令牌补充至最大容量,更新令牌生成时间为当前时间戳,并发给所述请求所需要的令牌数量,转发所述请求到应用服务器执行后续操作。
一种流量限制装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种流量限制方法。
本发明的一种流量限制方法及装置和现有技术相比,具有以下突出的有益效果:
(1)本发明对传统令牌桶算法进行了改进,采用触发式生成令牌的方式,在每次请求访问的时候,触发生成令牌的规则,减少服务器线程、CPU等资源的占用。本发明使用的令牌桶算法可以对用户访问实现平滑限流,控制数据传输速率以达到限制流量的目的。
(2)本发明还设置了请求、令牌生成控制器、令牌桶服务器等,可以突破单机部署的限流功能局限性,实现多节点分布式环境的限流要求。
引入排队队列在高并发场景下,对未获取到令牌的http请求进行缓存,等待生成足够数量的令牌之后,再对http请求进行处理,允许一定范围内的流量访问尖峰。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种流量限制方法的流程示意图;
附图2是一种流量限制方法的架构图。
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1、2所示,本实施例中的一种流量限制方法,所有用户请求最先到达,经过处理后,执行令牌申请操作,其中,请求位于系统的最上层,属于网关层。
令牌申请操作由令牌生成控制器按照一定规则生成令牌,为保证数据请求的一致性、稳健性和低延时等,可使用Redis缓存或MemoryCache内存缓存。
当令牌申请触发令牌生成规则时,令牌生成控制器根据系统设置的令牌桶大小、令牌生成速率和令牌最后生成时间等参数,生成一定数量的令牌,放入令牌桶中。由令牌桶服务器发放用户请求所需的令牌,并将请求转发到各应用服务器,执行数据访问操作。
允许一部分流量请求在令牌桶中,令牌不足的情况下,暂时存入排队队列等待,并使用探针检测令牌桶的令牌数量。当令牌桶中存在足够的令牌时,再对请求进行转发操作。
具体的操作为:
用户请求到达之前,设置令牌桶的最大令牌数、令牌桶补充令牌的间隔时间和令牌桶每个时间间隔补充令牌的数量;
对于不同类型的API服务,根据占用的网络资源和数据库资源大小不同,设置不同的服务访问所需要的令牌数量。
当http请求到达服务端时,首先由请求进行拦截处理,获取http请求的标志,如用户ip、访问api等,作为限流策略的标志信息。
查询令牌桶服务器中是否存在该限流策略的标志信息,如果不存在,进行初始化令牌桶操作,在令牌桶中放入预设的令牌桶最大令牌数量,设置令牌的过期时间,并设置令牌的写入时间为当前时间。
其中,令牌桶的最大令牌数量至少大于令牌桶每个时间间隔补充令牌数量的2倍,实际情况一般根据系统所支持的限流阈值来确定。令牌的过期时间要大于令牌桶补充令牌的间隔时间的2倍。
若存在限流策略标志信息,则读取令牌桶服务器中所述限流策略标志信息对应的令牌写入时间,与当前时间戳进行对比,如果当前时间戳与令牌最后写入时间之间的时间间隔大于等于令牌桶补充令牌的间隔时间,根据添加令牌的速率计算所述当前时间戳与令牌最后写入时间之间的时间间隔可以添加的令牌数,并将令牌补充到令牌桶中,更新令牌的写入时间为当前时间。
其中,计算当前时间戳与最后一次令牌写入时间之间的时间间隔,是根据添加令牌的速率计算这段时间间隔可以添加的令牌数:
其中,currentTimestamp指当前访问的时间戳,lastTimestamp指最后一次令牌更新的时间戳,tokenInterval指令牌桶补充令牌的间隔时间,tokenCountPer指令牌桶每个时间间隔补充令牌的数量。newTokenCoun需要向下取整。
最终添加到令牌桶中的令牌数量为:
resultCount=min(newTokenCount,maxTokenCountstoredTokenCount)
其中,maxTokenCount指令牌桶支持的最大令牌数量,storedTokenCount指当前令牌桶中剩余的令牌数量。将数量为resultCount的令牌补充到令牌桶中,并更新令牌的写入时间为当前时间。
如果当前时间戳与令牌最后写入时间之间的时间间隔小于令牌桶补充令牌的间隔时间,则判断当前http请求所需的令牌数量,如果所需令牌数量小于等于当前令牌桶剩余数量,在令牌桶中移除http请求需要的令牌,对http请求进行转发,由应用服务器执行具体的操作。
如果所需令牌数量大于当前令牌桶剩余数量,通过设置排队队列,并设置排队队列的长度和队列元素的过期时间。如果http请求所需令牌数量大于当前令牌桶剩余数量,将该请求放入排队队列。
当队列中存放的http请求到达过期时间时,直接拒绝该请求,并从排队队列中移除。
通过设置定时器,使用探针检测令牌桶中的令牌数量,当令牌桶中存放的令牌数量大于等于请求所需要的令牌数量时,令牌桶服务器发给请求所需要的令牌数量,并将所述请求转发到应用服务器执行。
如果令牌桶中的令牌数量小于http请求所需的令牌数量,则计算当前时间戳与令牌桶最后生成令牌时间的时间间隔,如果时间间隔大于令牌桶补充令牌的间隔时间则直接将令牌桶中令牌补充至最大容量,更新令牌生成时间为当前时间戳,并发给该请求所需要的令牌数量,转发该请求到应用服务器执行后续操作。
一种流量限制装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种流量限制方法。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种流量限制方法及装置权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
本文发布于:2023-04-14 22:00:46,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86876.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |