掌桥专利:专业的专利平台
掌桥专利
首页

基于双指针的滑动窗口限流方法、装置、设备及存储介质

文献发布时间:2023-06-19 09:52:39


基于双指针的滑动窗口限流方法、装置、设备及存储介质

技术领域

本申请涉及服务器数据监控技术领域,特别是一种基于双指针的滑动窗口限流方法、装置、设备及存储介质。

背景技术

在云环境的情况下,大流量是不可避免的。而为了在大流量请求的情况下保证系统的稳定性和性能,必须要采取一些措施。目前应对大流量的一些常见的手段一般是三种:缓存、降级和限流。在限流的处理手段中,有采用计数器、滑动窗口、漏桶、令牌几种方式。

通过计数器限流指,在一段时间内,进行计数与阀值进行比较,到了时间临界点,将计数器清0。但是计数器有临界问题。举例如下,我们限制每分钟调用接口不能超过1000次,用计数器法实现时,如果恶意用户在09:59秒一秒内发送1000次调用,又在10:01秒调用1000次,2秒内调用了2000次,这样就不能很好地限流了,也失去保护资源的作用。

滑动窗口则有效避免了时间临界点的问题,采用滑动窗口进行限流时,传统的做法是,把固定时间片,进行划分,并且随着时间的流逝,进行移动,这样就巧妙的避开了计数器的临界点问题。限流中的滑动窗口可以简单理解为,设定的单位时间就是一个窗口,窗口可以分割多个更小的时间单元,随着时间的推移,窗口会向右移动。比如一个接口一分钟限制调用1000次,1分钟就可以理解为一个窗口,可以把1分钟分割为6个单元格,每个单元格就是10秒。假设用户在前1分钟的最后一瞬间和1分钟后的开始一瞬间冲击服务,按照滑动窗口的原理。统计1分钟前的五个格子和1分钟后的1一个格子中的请求量,发现超过阀值,依然会阻拦用户的访问。

由于滑动窗口由时间窗口分割而成的时间单元格子组成,通过滑动窗口限流时,需要利用这些固定数量可以移动的格子进行计数判断阀值,因此格子的数量影响着滑动窗口算法的精度。如果需要做更精确的限流,因为每次都是往前推固定数量的格子来计算是否超限,精度要求较高时,需要的计算代价过高。

发明内容

本申请实施例所要解决的技术问题是,提供一种基于双指针的滑动窗口限流方法、装置、设备及存储介质,在减少高精度滑动窗口比较次数的同时,能够更精确地进行流量管控。

为了解决上述技术问题,本申请实施例提供一种基于双指针的滑动窗口限流方法,采用了如下所述的技术方案:

一种基于双指针的滑动窗口限流方法,包括:

读取当前服务器中的限流需求,并解析所述限流需求,确定限流条件中的时间区间长度和请求数量阈值;

根据所述时间区间长度创建滑动窗口;

实时统计所述滑动窗口中的用户请求次数,以基于所述请求数量阈值通过所述滑动窗口对用户请求进行流量监控;

当判断需要执行限流时,暂停滑动窗口的滑动,启动流量拦截程序,对计数窗口中的用户请求进行拦截;其中,所述滑动窗口中已滑过的窗口记为计数窗口;

设定包括头指针和尾指针的双指针时间窗口,使所述头指针指向所述滑动窗口的终点,使所述尾指针指向限流窗口的终点;其中,所述限流窗口与所述计数窗口的起点相同,所述限流窗口的窗口长度与所述时间区间长度相同;

统计所述双指针时间窗口中的第一请求次数、所述限流窗口中的第二请求次数与所述计数窗口中已完成响应的第三请求次数,计算由所述第二请求次数与所述第三请求次数之差表示的双指针时间窗口请求阈值,并比较所述第一请求次数与所述双指针时间窗口请求阈值的大小;

当所述第一请求次数大于所述双指针时间窗口请求阈值,将至多与所述双指针时间窗口请求阈值数量匹配的用户请求,在所述双指针时间窗口中进行平均分配;

在当前时间到达所述尾指针指向的时间节点后,解除拦截操作,恢复所述滑动窗口,继续通过所述滑动窗口对用户请求进行流量监控。

为了解决上述技术问题,本申请实施例还提供一种基于双指针的滑动窗口限流装置,采用了如下所述的技术方案:

一种基于双指针的滑动窗口限流装置,包括:

需求解析模块,用于读取当前服务器中的限流需求,并解析所述限流需求,确定限流条件中的时间区间长度和请求数量阈值;

滑动窗口创建模块,用于根据所述时间区间长度创建滑动窗口;

流量监控模块,用于实时统计所述滑动窗口中的用户请求次数,以基于所述请求数量阈值通过所述滑动窗口对用户请求进行流量监控;

限流执行模块,用于当判断需要执行限流时,暂停滑动窗口的滑动,启动流量拦截程序,对计数窗口中的用户请求进行拦截;其中,所述滑动窗口中已滑过的窗口记为计数窗口;

双指针设置模块,用于设定包括头指针和尾指针的双指针时间窗口,使所述头指针指向所述滑动窗口的终点,使所述尾指针指向限流窗口的终点;其中,所述限流窗口与所述计数窗口的起点相同,所述限流窗口的窗口长度与所述时间区间长度相同;

统计计数模块,用于统计所述双指针时间窗口中的第一请求次数、所述限流窗口中的第二请求次数与所述计数窗口中已完成响应的第三请求次数,计算由所述第二请求次数与所述第三请求次数之差表示的双指针时间窗口请求阈值,并比较所述第一请求次数与所述双指针时间窗口请求阈值的大小;

用户请求调控模块,用于当所述第一请求次数大于所述双指针时间窗口请求阈值,将至多与所述双指针时间窗口请求阈值数量匹配的用户请求,在所述双指针时间窗口中进行平均分配;

限流解除模块,用于在当前时间到达所述尾指针指向的时间节点后,解除拦截操作,恢复所述滑动窗口,继续通过所述滑动窗口对用户请求进行流量监控。

为了解决上述技术问题,本申请实施例还提供一种计算机设备,采用了如下所述的技术方案:

一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如上述任意一项技术方案所述的基于双指针的滑动窗口限流方法的步骤。

为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,采用了如下所述的技术方案:

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项技术方案所述的基于双指针的滑动窗口限流方法的步骤。

与现有技术相比,本申请实施例主要有以下有益效果:

本申请实施例公开了一种基于双指针的滑动窗口限流方法、装置、设备及存储介质,本申请实施例所述的基于双指针的滑动窗口限流方法,通过读取和解析限流需求,确定限流条件中的时间区间长度和请求数量阈值后;根据时间区间长度创建滑动窗口;并实时统计滑动窗口中的用户请求次数,以基于请求数量阈值通过滑动窗口对用户请求进行流量监控;当判断需要执行限流时,暂停滑动窗口的滑动,启动流量拦截程序,对计数窗口中的用户请求进行拦截;然后设定包括头指针和尾指针的双指针时间窗口,使头指针指向所述滑动窗口的终点,使尾指针指向限流窗口的终点;统计双指针时间窗口中的第一请求次数、限流窗口中的第二请求次数与计数窗口中已完成响应的第三请求次数,计算由第二请求次数与第三请求次数之差表示的双指针时间窗口请求阈值,并比较第一请求次数与双指针时间窗口请求阈值的大小;当第一请求次数大于双指针时间窗口请求阈值,将至多与双指针时间窗口请求阈值数量匹配的用户请求,在双指针时间窗口中进行平均分配;随之在当前时间到达尾指针指向的时间节点后,解除拦截操作,恢复滑动窗口,继续通过滑动窗口对用户请求进行流量监控。所述方法通过利用滑动窗口进行限流后,改用双指针时间窗口的形式进行限流调控,可以有效减少滑动窗口的比较次数,并在请求量达到流量上限时,能够实现更细化、更精确的流量管控。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例可以应用于其中的示例性系统架构图;

图2为本申请实施例中所述基于双指针的滑动窗口限流方法的一个实施例的流程图;

图3为本申请实施例中所述基于双指针的滑动窗口限流装置的一个实施例的结构示意图;

图4为本申请实施例中计算机设备的一个实施例的结构示意图。

具体实施方式

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“包括”、“包含”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。在本申请的权利要求书、说明书以及说明书附图中的术语,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其他实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其他实施例相结合。

为了使本技术领域的人员更好地理解本申请的方案,下面将结合本申请实施例中的相关附图,对本申请实施例中的技术方案进行清楚、完整地描述。

如图1所示,系统架构100可以包括第一终端设备101、第二终端设备102、第三终端设备103、网络104和服务器105。网络104用以在第一终端设备101、第二终端设备102、第三终端设备103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用第一终端设备101、第二终端设备102和第三终端设备103通过网络104与服务器105交互,以接收或发送消息等。第一终端设备101、第二终端设备102和第三终端设备103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。

第一终端设备101、第二终端设备102和第三终端设备103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对第一终端设备101、第一终端设备102和第三终端设备103上显示的页面提供支持的后台服务器。

需要说明的是,本申请实施例所提供的基于双指针的滑动窗口限流方法一般由服务器/终端设备执行,相应地,基于双指针的滑动窗口限流装置一般设置于服务器/终端设备中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

继续参考图2,示出了本申请实施例中所述基于双指针的滑动窗口限流方法的一个实施例的流程图。所述基于双指针的滑动窗口限流方法,包括以下步骤:

步骤201:读取当前服务器中的限流需求,并解析所述限流需求,确定限流条件中的时间区间长度和请求数量阈值。

不同服务器中系统的稳定性和性能不同,而且用户的需求也会根据场景的变化而发生变更。因此服务器在监控系统吞吐量,通过限流条件进行限流监控的判断时,首先需要通过用户输入或数据读取等方式获取当前的限流需求,并从当前的限流需求中明确相关限流条件。

限流的目的是通过对一个时间窗口内的请求进行限制来保护系统,限流条件即指服务器进行限流时所要求达到的条件。本申请中,限流条件定义为:在一个时间区间内用户的请求次数超过请求数量阈值。通过限流条件进行限流,可以理解为将在一定时间区间长度内的请求次数约束在一个数值上限(即请求数量阈值)的范围之内,如对于某一个接口,在1分钟内的请求不能超过10次。

在一些具体实施方式中,限流需求则既包括了限流条件,还包括了限流精度等内容。本申请中限流精度可以理解为,如通过滑动窗口进行限流时,对其算法精度的要求。

在本申请实施例中,所述基于双指针的滑动窗口限流方法运行于其上的电子设备(例如图1所示的服务器/终端设备)可以通过有线连接方式或者无线连接方式接收输入服务器的限流需求。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。

步骤202:根据所述时间区间长度创建滑动窗口。

由于滑动窗口在限流过程中的判断原理,是需要以滑动窗口对应的时间区间长度为单位时间,每次判断时根据滑动窗口中的请求数量与限流条件中的请求数量阈值进行比较,而后作出是否需要进行限流的决定。因此在确定当前服务器限流条件中的时间区间长度和请求数量阈值后,便需依据所述时间区间长度来创建对应的滑动窗口,才能方便应用滑动窗口在当前服务器中进行限流。

步骤203:实时统计所述滑动窗口中的用户请求次数,以基于所述请求数量阈值通过所述滑动窗口对用户请求进行流量监控。

创建滑动窗口后,便需要实时监控当前服务器中的请求数据,以通过滑动窗口对用户请求进行流量监控。滑动窗口可以视为细分之后的计数器,而计数器算法其实就是滑动窗口算法,只是它没有对时间窗口做进一步地划分,所以只有一格。滑动窗口是将其时间区间长度划分为若干格长度更小的小窗口后,以小窗口为单位沿时间轴向右滑动计数,当滑动窗口在时间轴上最右侧固定数量的若干格小窗口划过当前时间节点后,统计滑动窗口中总的用户请求数量,用于与请求数量阈值进行比较,如此对用户请求进行流量监控。本申请中,将上述最右侧固定数量的若干格小窗口共同记为计数窗口。

当滑动窗口中的用户请求次数超过所述请求数量阈值时,便判断当前流量达到了服务器流量上限,容易引起服务器异常,冲击系统的稳定性,因此需要执行限流操作;反之,当滑动窗口中的用户请求次数未超过所述请求数量阈值,则判断当前服务器中流量正常,无需执行限流操作。

在本申请的一些具体实施方式中,滑动窗口一般以等分的形式对其时间区间长度进行分割,当滑动窗口在时间轴上最右侧的一格窗口划过当前时间节点后,便会触发对请求数量的计数以及与阈值的比较。由此可见,当滑动窗口的小窗口划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确,即滑动窗口的算法精度越高。

在另一些具体实施方式中,滑动窗口还可以以非等分的形式进行分割,此时若限流需求中指定有限流的精度要求,则可以将最右侧的计数窗口根据精度需求进行灵活设置。该部分实施方式中,计数窗口的时间长度越短,限流的统计精确度越高。

步骤204:当判断需要执行限流时,暂停滑动窗口的滑动,启动流量拦截程序,对计数窗口中的用户请求进行拦截;其中,所述滑动窗口中已滑过的窗口记为计数窗口。

在服务器中检测到流量超出请求数量阈值而触发限流后,便需要停止滑动窗口的继续滑动,并通过激活预设的拦截机制,启动流量拦截程序,对超过所述请求数量阈值部分的用户请求进行拦截。相比滑动窗口的初始位置,滑动窗口中已滑过其初始位置的终点对应的时间节点的窗口记为计数窗口,而在执行拦截时对应的当前时间,已变更为所述计数窗口的终点对应的时间节点。

在服务器良好的情况下,通过滑动窗口针对请求的计算是在几ms到几十ms之间的。拦截的作用是为了保证服务器的良好运行。只有把请求挡在外面,才能保证服务器持续的响应效率。

本申请中,对用户的请求进行拦截时,可以采用以下手段:拒绝服务(如转向定向错误页或告知资源没有了)、排队或等待(例如:秒杀、评论、下单)、降级(返回默认数据)等。

在本申请的一些实施例中,步骤204中所述对计数窗口中的用户请求进行拦截的步骤包括:

识别所述计数窗口中各个用户请求的优先级;

根据所述优先级重新排列所述计数窗口中的用户请求,并基于高优先级先响应的顺序对其中的用户请求进行依次响应;

当已响应的用户请求数量到达所述请求数量阈值时,对还未响应的用户请求进行拦截。

根据响应的优先级预先设置相关的拦截机制,用于在判断服务器中流量超限需要进行限流时,优先处理较重要的用户请求,能避免浪费资源在相对无用的请求上,导致推迟了对重要请求的正常处理。

步骤205:设定包括头指针和尾指针的双指针时间窗口,使所述头指针指向所述滑动窗口的终点,使所述尾指针指向限流窗口的终点;其中,所述限流窗口与所述计数窗口的起点相同,所述限流窗口的窗口长度与所述时间区间长度相同。

在执行限流后,本申请中引出双指针模式,通过设定具有头指针和尾指针的双指针时间窗口,对服务器在当前滑动窗口之后接收的用户请求进行调控,取消滑动窗口在这部分时间片之间的运作。

其中,限流窗口的起点与计数窗口相同,均是以滑动窗口初始位置的终点所在的时间节点为起点,窗口长度与所述时间区间长度相同。双指针时间窗口是具有头指针和尾指针的时间窗口,设定其头指针指向滑动窗口在当前时间的尾部,与其终点处的时间节点重合,并设定其尾指针则指向限流窗口的尾部,与其终点处的时间节点重合。

在本申请的一些实施例中,步骤205中所述设定包括头指针和尾指针的双指针时间窗口的步骤还包括:

获取预设的细粒度指数和所述滑动窗口中的第一分割数量;

基于所述细粒度指数和所述第一分割数量,根据预设公式计算出第二分割数量的数值;

将所述双指针时间窗口以等分的形式,分割为数量与第二分割数量的数值匹配的若干个小窗口。

在一种优选实施方式中,所述预设公式设置为:第二分割数量=第一分割数量*细粒度指数,

当前服务器状态是视为处于流量高峰期,因此需要通过双指针时间窗口相较滑动窗口进行更细粒度、更高精度的限流。具体地,将双指针时间窗口以等分的形式分割为小窗口时,小窗口的数量需要多于滑动窗口中小窗口的数量,在一种优选实施方式中,所述细粒度指数设置在2-3之间。

步骤206:统计所述双指针时间窗口中的第一请求次数、所述限流窗口中的第二请求次数与所述计数窗口中已完成响应的第三请求次数,计算由所述第二请求次数与所述第三请求次数之差表示的双指针时间窗口请求阈值,并比较所述第一请求次数与所述双指针时间窗口请求阈值的大小。

本申请中,在利用设置的双指针时间窗口对服务器中的用户请求进行流量调控时,需要统计双指针时间窗口中收到的用户请求次数,和限流窗口中收到的用户请求次数,以及计数窗口中已完成了请求的用户请求次数,以根据上述数值进行计算判断。

其中,以第二请求次数与第三请求次数之差表示双指针时间窗口请求阈值,该阈值代表双指针时间窗口中的流量上限。因此将表示双指针时间窗口中接收到的请求总量的第一请求次数,与该双指针时间窗口请求阈值进行比较,以判断在滑动窗口之后设置的双指针时间窗口中,接收到的请求次数是否超过服务器上限。

步骤207:当所述第一请求次数大于所述双指针时间窗口请求阈值,将至多与所述双指针时间窗口请求阈值数量匹配的用户请求,在所述双指针时间窗口中进行平均分配。

若第一请求次数小于双指针时间窗口请求阈值,表示双指针时间窗口中收到的请求未超过服务器上限,无需考虑限流处理。

若第一请求次数小于双指针时间窗口请求阈值,则表示双指针时间窗口中收到的请求超过服务器上限,需要进行限流处理。在一些实施方式中,服务器的双指针时间窗口接收到与双指针时间窗口请求阈值的数量匹配的用户请求后,通过将其余超出上限的用户请求拦截掉,和将接收到的用户请求在双指针时间窗口中进行平均分配,使服务器响应用户请求的过程更加平滑、服务器的稳定性得以保障,双指针时间窗口在更细粒度的限流上相比滑动窗口具有更好地表现。而在一些其他具体实施方式中,还可以从接收到的用户请求中再剔除出一部分用户请求后,将剩余的用户请求平均分配在双指针时间窗口中进行有序响应,如此通过调控将双指针时间窗口中的访问量压制在其阈值范围内的一个安全幅度下,进一步保障了服务器在当前流量高峰期中的稳定性。

在本申请的一些实施例中,在步骤206中所述比较所述第一请求次数与所述双指针时间窗口请求阈值的大小的步骤之后,所述基于双指针的滑动窗口限流方法还包括:

当所述第一请求次数小于所述双指针时间窗口请求阈值,将所述双指针时间窗口接收到的用户请求在其中进行平均分配。

虽然在双指针时间窗口中收到的请求量未超过服务器上限时,无需拦截用户请求,但结合服务器的稳定性进行考虑,由于双指针时间窗口所处的时间区间属于流量高峰期,可能存在部分小的时间片中流量超标严重,而其他时间片中流量较小的情况,如此会影响服务器的响应效率,因此可以通过将用户请求在双指针时间窗口中进行平均分配以实现限流调控。其中,双指针时间窗口中接收到的用户请求数量与所述第一请求次数相匹配。

步骤208:在当前时间到达所述尾指针指向的时间节点后,解除拦截操作,恢复所述滑动窗口,继续通过所述滑动窗口对用户请求进行流量监控。

双指针时间窗口的设置,是为了在遇到流量高峰期时,有效减少滑动窗口的比较次数,并更细化、更精确地进行流量管控。基于对系统资源利用的考虑,在当前时间到达双指针时间窗口的终点后,便解除拦截操作,恢复原滑动窗口,继续基于滑动窗口的计数操作对用户请求进行流量监控。

在本申请的一些实施例中,步骤208中所述继续通过所述滑动窗口对用户请求进行流量监控的步骤还包括:

读取新的限流需求,并解析新的限流需求,获取新限流条件,获取新限流条件中的目标时间区间长度;

比较原滑动窗口中的原时间区间长度与所述目标时间区间长度的大小,并计算出两者之间的区间长度差值;

根据比较结果从原滑动窗口的起点处,去除或并入与所述区间长度差值相等长度的小窗口,以将原滑动窗口的窗口长度调整为符合所述目标时间区间长度。

若限流条件不变,便可以通过原滑动窗口继续进行流量监控,但当限流条件中对时间区间长度的要求变化时,便需要改变滑动窗口的结构。为了避免在对滑动窗口的算法精度需求不变时,大幅度地调整甚至重设滑动窗口的结构,浪费系统资源。在确认新的限流需求中的时间区间长度后,计算出当前的时间区间长度与原时间区间长度的区间长度差值,然后在判断需要将原滑动窗口的窗口长度加长或减短后,根据该区间长度差值在原滑动窗口的起点处合并新的小窗口或去除原有的小窗口。

本申请实施例所述的基于双指针的滑动窗口限流方法,通过利用滑动窗口进行限流后,改用双指针时间窗口的形式进行限流调控,可以有效减少滑动窗口的比较次数,并在请求量达到流量上限时,能够实现更细化、更精确的流量管控。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。

应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

进一步参考图3,图3示出了为本申请实施例中所述基于双指针的滑动窗口限流装置的一个实施例的结构示意图。作为对上述图2所示方法的实现,本申请提供了一种基于双指针的滑动窗口限流装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。

如图3所示,本实施例所述的基于双指针的滑动窗口限流装置包括:

需求解析模块301;用于读取当前服务器中的限流需求,并解析所述限流需求,确定限流条件中的时间区间长度和请求数量阈值。

滑动窗口创建模块302;用于根据所述时间区间长度创建滑动窗口。

流量监控模块303;用于实时统计所述滑动窗口中的用户请求次数,以基于所述请求数量阈值通过所述滑动窗口对用户请求进行流量监控。

限流执行模块304;用于当判断需要执行限流时,暂停滑动窗口的滑动,启动流量拦截程序,对计数窗口中的用户请求进行拦截;其中,所述滑动窗口中已滑过的窗口记为计数窗口。

双指针设置模块305;用于设定包括头指针和尾指针的双指针时间窗口,使所述头指针指向所述滑动窗口的终点,使所述尾指针指向限流窗口的终点;其中,所述限流窗口与所述计数窗口的起点相同,所述限流窗口的窗口长度与所述时间区间长度相同。

统计计数模块306;用于统计所述双指针时间窗口中的第一请求次数、所述限流窗口中的第二请求次数与所述计数窗口中已完成响应的第三请求次数,计算由所述第二请求次数与所述第三请求次数之差表示的双指针时间窗口请求阈值,并比较所述第一请求次数与所述双指针时间窗口请求阈值的大小。

用户请求调控模块307;用于当所述第一请求次数大于所述双指针时间窗口请求阈值,将至多与所述双指针时间窗口请求阈值数量匹配的用户请求,在所述双指针时间窗口中进行平均分配。

限流解除模块308;用于在当前时间到达所述尾指针指向的时间节点后,解除拦截操作,恢复所述滑动窗口,继续通过所述滑动窗口对用户请求进行流量监控。

在本申请的一些实施例中,所述限流执行模块304还包括:用户请求拦截子模块。所述用户请求拦截子模块还用于:识别所述计数窗口中各个用户请求的优先级;根据所述优先级重新排列所述计数窗口中的用户请求,并基于高优先级先响应的顺序对其中的用户请求进行依次响应;当已响应的用户请求数量到达所述请求数量阈值时,对还未响应的用户请求进行拦截。

在本申请的一些实施例中,所述双指针设置模块305还用于获取预设的细粒度指数和所述滑动窗口中的第一分割数量;基于所述细粒度指数和所述第一分割数量,根据预设公式计算出第二分割数量的数值;将所述双指针时间窗口以等分的形式,分割为数量与所述第二分割数量的数值匹配的若干个小窗口。

在本申请的一些实施例中,所述用户请求调控模块307还用于:当所述第一请求次数小于所述双指针时间窗口请求阈值,将所述双指针时间窗口接收到的用户请求在其中进行平均分配。

在本申请的一些实施例中,所述限流解除模块308还包括:窗口调整子模块。所述窗口调整子模块用于读取新的限流需求,并解析新的限流需求,获取新限流条件中的目标时间区间长度;比较原滑动窗口中的原时间区间长度与所述目标时间区间长度的大小,并计算出两者之间的区间长度差值;根据比较结果从原滑动窗口的起点处,去除或并入与所述区间长度差值相等长度的小窗口,以将原滑动窗口的窗口长度调整为符合所述目标时间区间长度。

本申请实施例所述的基于双指针的滑动窗口限流装置,通过利用滑动窗口进行限流后,改用双指针时间窗口的形式进行限流调控,可以有效减少滑动窗口的比较次数,并在请求量达到流量上限时,能够实现更细化、更精确的流量管控。

为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。

所述计算机设备6包括通过系统总线相互通信连接存储器61、处理器62、网络接口63。需要指出的是,图中仅示出了具有组件61-63的计算机设备6,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable GateArray,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。

所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。

所述存储器61至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器61可以是所述计算机设备6的内部存储单元,例如该计算机设备6的硬盘或内存。在另一些实施例中,所述存储器61也可以是所述计算机设备6的外部存储设备,例如该计算机设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,所述存储器61还可以既包括所述计算机设备6的内部存储单元也包括其外部存储设备。本实施例中,所述存储器61通常用于存储安装于所述计算机设备6的操作系统和各类应用软件,例如基于双指针的滑动窗口限流方法的程序代码等。此外,所述存储器61还可以用于暂时地存储已经输出或者将要输出的各类数据。

所述处理器62在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器62通常用于控制所述计算机设备6的总体操作。本实施例中,所述处理器62用于运行所述存储器61中存储的程序代码或者处理数据,例如运行所述基于双指针的滑动窗口限流方法的程序代码。

所述网络接口63可包括无线网络接口或有线网络接口,该网络接口63通常用于在所述计算机设备6与其他电子设备之间建立通信连接。

本申请实施例所述的计算机设备,通过处理器执行存储器中存储的计算机程序进行数据推送的功能测试时,无需通过前端操作创建任务,能够实现对大批量基于双指针的滑动窗口限流要求,并减少测试时间的消耗,提升功能测试的效率,在进行数据推送测试的过程中还能方便地进行压力测试,在通过日志判断数据的推送结果时还能方便分析测试时出现的问题,以及对测试过程中出现的问题进行定位。

本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有基于双指针的滑动窗口限流程序,所述基于双指针的滑动窗口限流程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的基于双指针的滑动窗口限流方法的步骤。

需要强调的是,为进一步保证上述图片数据的私密和安全性,上述图片数据还可以存储于一区块链的节点中。

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

在本申请所提供的上述实施例中,应该理解到,所揭露的装置和方法,可以通过其他的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

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

本申请不限于上述实施方式,以上所述是本申请的优选实施方式,该实施例仅用于说明本申请而不用于限制本申请的范围,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,其依然可以对前述各具体实施方式所记载的技术方案进行若干改进和修饰,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理应视为包括在本申请的保护范围之内。

显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,以及凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

相关技术
  • 基于双指针的滑动窗口限流方法、装置、设备及存储介质
  • 基于权重机制的限流方法、装置、计算机设备及存储介质
技术分类

06120112338011