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

一种高并发限流方法、装置以及计算机存储介质

文献发布时间:2023-06-19 18:27:32


一种高并发限流方法、装置以及计算机存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种高并发限流方法、装置以及计算机存储介质。

背景技术

目前,基于网络的服务系统提供了各类服务,通常,根据具体所提供的服务,服务系统所能承受的访问量是有限的,当超出服务系统承受范围时,需要对流量进行限制,以防止服务系统宕机。常见的限流方式是在系统设计之初就根据单次服务响应时间等值估算出整体服务的访问量,从而估算出服务系统所应承受的访问量,并据此设置对于服务的访问流量限制及访问速度。例如,使用令牌桶来实现流量限制。

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(RateLimiting)中最常使用的一种算法。令牌桶算法最初来源于计算机网络。在网络传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。

但是,在实现本申请过程中,发明人发现现有技术中至少存在如下问题:传统限流算法缺失流量关系闭环,只考虑流入未考察流出,导致限流效果不精准。

发明内容

本申请提供了一种高并发限流方法、装置以及计算机存储介质,主要解决的技术问题是如何实现限流效果的精准限流。

为解决上述技术问题,本申请提供了一种高并发限流方法,所述高并发限流方法应用于一种客户端,所述高并发限流方法包括:

响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;

基于所述令牌执行所述申请令牌事件的业务请求,将生成的业务数据上传到服务端;

检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;

若是,将所述令牌放回所述第一限流周期的回收令牌桶;

其中,每一限流周期的令牌总数量为一固定值。

其中,所述将生成的业务数据上传到服务端之后,所述高并发限流方法还包括:

在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,将所述令牌放入所述第二限流周期的发令牌桶。

其中,所述将生成的业务数据上传到服务端之后,所述高并发限流方法还包括:

在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,获取业务请求队列;

检测所述业务请求队列中是否存在有效历史请求;

若是,则获取所述业务请求队列中的首位有效请求,将所述令牌的发布周期值更新为所述第二限流周期,基于所述令牌执行所述首位有效请求。

其中,所述获取业务请求队列之后,所述高并发限流方法还包括:

在所述业务请求队列中不存在有效历史请求时,将所述令牌放回所述第二限流周期的发令牌桶。

其中,所述第二限流周期与所述第一限流周期为相邻的限流周期;

所述高并发限流方法还包括:

在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,将所述第一限流周期中的发令牌桶中的令牌放入所述第二限流周期中的回收令牌桶,将所述第一限流周期中的回收令牌桶中的令牌放入所述第二限流周期中的发令牌桶。

其中,所述第一限流周期与相邻的所述第二限流周期之间的周期迭代通过预先注册的定时器触发。

其中,所述高并发限流方法还包括:

响应于申请令牌事件触发,在第一限流周期的发令牌桶无法获取令牌时,将所述申请令牌事件的业务请求放入固定长度的业务请求队列。

为解决上述技术问题,本申请还提供了一种高并发限流装置,所述高并发限流装置包括获取模块、执行模块以及回收模块;其中,

所述获取模块,用于响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;

所述执行模块,用于基于所述令牌执行所述申请令牌事件的业务请求,将生成的业务数据上传到服务端;

所述回收模块,用于检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的回收令牌桶;

其中,每一限流周期的令牌总数量为一固定值。

为解决上述技术问题,本申请还提供了一种高并发限流装置,所述高并发限流装置包括处理器以及与所述处理器耦接的存储器;

其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现如上述的高并发限流方法。

为解决上述技术问题,本申请还提供了一种计算机存储介质,所述计算机存储介质用于存储程序数据,所述程序数据在被处理器执行时,用以实现如上述的高并发限流方法。

与现有技术相比,本申请的有益效果是:高并发限流装置响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;基于所述令牌执行所述申请令牌事件的业务请求,将生成的业务数据上传到服务端;检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的回收令牌桶;其中,每一限流周期的令牌总数量为一固定值。上述高并发限流方法可以通过分发令牌和回收令牌,形成令牌流量关系闭环,同时考察令牌流量的流入和流出,真正体现限流效果的精准限流。

附图说明

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

图1是本申请提供的周期n的沙漏模型的示意图;

图2是本申请提供的周期n+1的沙漏模型的示意图;

图3是本申请提供的高并发限流方法一实施例的流程示意图;

图4是本申请提供的沙漏模型令牌获取及回收的流程示意图;

图5是本申请提供的高并发限流方法另一实施例的流程示意图;

图6是本申请提供的高并发限流装置一实施例的结构示意图;

图7是本申请提供的高并发限流装置另一实施例的结构示意图;

图8是本申请提供的计算机存储介质一实施例的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

令牌桶是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法系统服务作为生产者,按照指定频率向桶(容器)中添加令牌,如QPS(每秒查询率,Queries-per-second)为2,每500ms向桶中添加一个令牌,如果桶中令牌数量达到阈值,则不再添加。

请求执行作为消费者,每个请求都需要去桶中拿取一个令牌,取到令牌则继续执行;如果桶中无令牌可取,就触发拒绝策略,可以是超时等待,也可以是直接拒绝本次请求,由此达到限流目的。

一个令牌就是某个限流环境中的request通行证,request获得令牌则会被令牌发放的服务提供对应的业务服务,否则会被延缓处理或给出指定错误码返回。

下面,在阐述本申请的高并发限流方法之前,先提出两个新概念:令牌全生命周期状态、令牌数守恒:

令牌全生命周期状态:指的是任何令牌在生命周期内,只有以下3个状态(未发出、已发出、已回收)。这3个状态对应:“未发出”在当前限流周期的令牌桶中,“已发出”不在任何令牌桶中,被request持有处于服务中,“已回收”表示持有的request已经完成或终止,此令牌被回收到指定的回收令牌桶中。

令牌数守恒:在没有外部业务调整令牌桶内令牌数时,所有存量令牌总数不变,变化的只是每个令牌的状态。

在上面介绍令牌全生命周期状态时,提到了当前限流周期的发令牌桶、回收令牌桶。而本申请的高并发限流方法是基于一种沙漏模型就是时间周期维度收发令牌桶滚动的关系组合开发。

具体请参阅图1和图2,图1是本申请提供的周期n的沙漏模型的示意图,图2是本申请提供的周期n+1的沙漏模型的示意图。

在图1和图2中,整个沙漏模型由2个令牌桶组成。例如,在初始化,即周期n时1号令牌桶角色为发牌桶(里面的令牌都处于“未发出”状态),未开始限流时不发令牌。2号令牌桶角色为回收桶(里面的令牌都处于“已回收”状态)。

开始限流后的第一个周期,暂命名为周期1,request从发牌桶(当前是1号桶)获取令牌,能获取到令牌的request会被服务,同时令牌状态为“已发出”,指导持有令牌的request完成或者终止时才会将此令牌回收。

需要说明的是,由于request的生命周期不和限流周期匹配,令牌记录发放时的限流周期值,如和当前限流周期同周期内回收放入回收桶,不同限流周期则放入本周期的发牌桶。

通过这种方式,能够有效保证同周期令牌最多只使用1次,从而达到限流效果。

注册的定时器触发限流周期迭代,只要类似沙漏翻转,把2个桶的角色互换即可,即发令牌桶角色和回收令牌桶角色。如图1和图2,在周期n中,1号令牌桶为发令牌桶,2号令牌桶为回收令牌桶;在周期n+1中,1号令牌桶为回收令牌桶,2号令牌桶为发令牌桶。

当request被限流后,进入一个固定长度的FIFO队列(即为限流拒绝策略)中,用于应对周期N-1时request请求大幅减少后,导致周期N中发牌桶内令牌数过少(对应的周期N+1发牌桶大概率有许多令牌)导致此周期限流。从FIFO队列出来的request在限流周期迭代时,优先处理,但要做request有效性验证(防止请求方连接断开等无效request识别)。

针对以上介绍的沙漏模型,本申请提出一种应用于客户端的高并发限流方法,具体请参见图3和图4,图3是本申请提供的高并发限流方法一实施例的流程示意图,图4是本申请提供的沙漏模型令牌获取及回收的流程示意图。

本申请提供的高并发限流方法应用于一种客户端,如面向磁盘、网络IO限流等数据自主生产者角色,或者作为服务端代理角色。例如,一个网络爬虫抓到数据需要上传到服务端聚合时,限流功能前置在爬虫较为合适,通过上述沙漏模型限流,可以达到削峰的效果,即业务场景中能容忍一定批量延时处理的。下面以一种高并发限流装置作为一种实施例的执行主体,继续阐述高并发限流方法的具体流程。

如图3所示,本申请实施例的高并发限流方法具体包括以下步骤:

步骤S11:响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,令牌的发布周期值更新为第一限流周期。

在本申请实施例中,当高并发限流装置进入限流状态时,启动高并发限流策略。具体地,高并发限流装置接收到申请令牌事件的触发指令之后,从当前限流周期,即第一限流周期的发令牌桶中取出令牌,申请令牌事件的业务请求获得该令牌后,即可获得执行该业务请求的权限。

其中,每一限流周期的令牌总数量为一固定值。

进一步地,高并发限流装置需要将令牌的发布周期值更新为第一限流周期,从而记录令牌取出时的限流周期。

其中,当第一限流周期的发令牌桶的令牌已经被其他业务请求提取完,即不存在可以取出的令牌时,说明在第一限流周期内,当前业务处理量已经达到限流的阈值,在同一周期内,无法分配令牌执行业务请求。此时,高并发限流装置可以执行限流拒绝策略,如图4所示,将该业务请求放入固定长度的FIFO队列进行排队,在FIFO队列中的业务请求可以按照进入队列的时间进行排序,即时间越早,排序越前。

关于FIFO队列的限流拒绝策略在以下实施例的高并发限流方法继续描述。

步骤S12:基于令牌执行申请令牌事件的业务请求,将生成的业务数据上传到服务端。

在本申请实施例中,申请令牌事件对应的业务请求获取到令牌之后,获取执行业务请求的权限,即可执行相关的业务请求。在客户端,即分布式RPC系统的边缘侧终端,作为数据的自主生产者,客户端执行业务请求的过程可以视为生成业务请求的相关数据,并将业务请求的相关数据上传至分布式RPC系统的中心侧,即服务端。

当业务请求执行完成后,释放令牌,即需要将令牌放回原限流周期的回收令牌桶,在原限流周期内无法再次被取出,从而实现流量关系闭环监控;或者将令牌放入后续限流周期的发令牌桶,在后续限流周期可以被取出使用。因此,高并发限流装置需要比较令牌的发布周期值与当前限流周期,根据是否一致的结果决定令牌的去向,请继续参阅步骤S13至步骤S15。

步骤S13:检测完成令牌对应的业务请求时的当前限流周期是否为第一限流周期。

在本申请实施例中,高并发限流装置一方面获取令牌的发布周期值,即第一限流周期,另一方面获取完成令牌对应的业务请求时的当前限流周期。然后,判断完成令牌对应的业务请求时的当前限流周期与第一限流周期是否为同一限流周期,若是,则进入步骤S14;若否,则进入步骤S15。

步骤S14:将令牌放回第一限流周期的回收令牌桶。

在本申请实施例中,当令牌需要被放回时的当前限流周期与被取出时的限流周期为同一限流周期时,说明该令牌在该限流周期内无法再次被取用。因此,高并发限流装置需要将令牌放回第一限流周期的回收令牌桶。

步骤S15:将令牌放入第二限流周期的发令牌桶。

在本申请实施例中,当令牌需要被放回时的当前限流周期与被取出时的限流周期不为同一限流周期时,说明该令牌在当前限流周期内还可以被取用。因此,高并发限流装置需要将令牌放回第二限流周期的发令牌桶。此时,并未限定第一限流周期与第二限流周期的时序关系。

进一步,需要说明的是,在相邻的限流周期,即第一限流周期和第二限流周期为相邻的两个限流周期,进入第二限流周期时,高并发限流装置将第一限流周期的2个令牌桶的角色(发令牌桶角色和回收令牌桶角色)互换。如图1和图2,第一限流周期为图1中沙漏模型,令牌桶1为发令牌桶,令牌桶2为回收令牌桶;第二限流周期为图2中沙漏模型,令牌桶2为发令牌桶,令牌桶1为回收令牌桶。

上述的令牌桶角色互换,可以通过注册的定时器触发限流周期迭代,类似于按照预设周期翻转沙漏,且保持沙漏的上方令牌桶为发令牌桶,沙漏的下方令牌桶为回收令牌桶。

具体地,高并发限流装置在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,将所述第一限流周期中的发令牌桶中的令牌放入所述第二限流周期中的回收令牌桶,将所述第一限流周期中的回收令牌桶中的令牌放入所述第二限流周期中的发令牌桶,从而实现沙漏翻转,角色互换。

在本申请实施例中,高并发限流装置响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;基于所述令牌执行所述申请令牌事件的业务请求,将生成的业务数据上传到服务端;检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的回收令牌桶;其中,每一限流周期的令牌总数量为一固定值。上述高并发限流方法可以通过分发令牌和回收令牌,形成令牌流量关系闭环,同时考察令牌流量的流入和流出,真正体现限流效果的精准限流。

为了提高精准限流和高效限流,本申请还提供了一种快速获取令牌的方法,即给业务请求队列中的有效历史请求优先分配历史限流周期的令牌,从而高效利用可用的令牌。请继续参阅图5,图5是本申请提供的高并发限流方法另一实施例的流程示意图。

如图5所示,本申请实施例的高并发限流方法具体包括以下步骤:

步骤S21:在完成令牌对应的业务请求时的当前限流周期为第二限流周期时,获取业务请求队列。

在本申请实施例中,高并发限流装置在获取完成令牌对应的业务请求时的当前限流周期,即第二限流周期与令牌的发布周期值,即第一限流周期不为同一限流周期时,进一步获取固定长度的FIFO队列。

步骤S22:检测业务请求队列中是否存在有效历史请求。

在本申请实施例中,如图4所示,高并发限流装置从业务请求队列中搜索业务请求,并对业务请求进行有效性检测。在成功搜索出有效历史请求时,进入步骤S23;在业务请求队列中不存在有效历史请求时,进入步骤S24。

步骤S23:获取业务请求队列中的首位有效请求,将令牌的发布周期值更新为第二限流周期,基于令牌执行首位有效请求。

在本申请实施例中,FIFO队列弹出头部,即首位有效请求,将令牌分配给首位有效请求,执行首尾有效请求的业务,并将令牌的发布周期值更新为第二限流周期。

通过这种方式,高并发限流装置可以不需要将令牌归还当前限流周期的发令牌桶,而是直接分配给FIFO队列的有效请求,提高令牌的分配效率。

步骤S24:将令牌放回第二限流周期的发令牌桶。

在本申请实施例中,高并发限流装置将令牌归还到当前限流周期,即第二限流周期的发令牌桶,等待取出。

在本申请实施例中,高并发限流装置通过提出一种沙漏模型,实现闭环流量流入流出监控,真正体现限流效果的精准限流;本申请的沙漏模型无传统限流算法中的周期临界问题,且支持突发流量;本申请实施例的高并发限流方法直接使用流量流出指标,相较于间接指标换算出周期令牌阈值投放,整体实现较简单,效果直接明显。

以上实施例,仅是对本申请的其中一种常见案例而已,并非对本申请的技术范围做任何限制,故凡是依据本申请方案的实质对以上内容所做的任何细微修改、等同变化或者修饰,均仍属于本申请技术方案的范围内。

基于上述碰撞检测方法的实施例,本申请还提出了一种高并发限流装置,具体请参阅图6,图6是本申请提供的高并发限流装置一实施例的结构示意图。

本实施例的高并发限流装置300包括获取模块31、执行模块32以及回收模块33。

其中,所述获取模块31,用于响应于申请令牌事件触发,从第一限流周期的发令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期。

所述执行模块32,用于基于所述令牌执行所述申请令牌事件的业务请求,将生成的业务数据上传到服务端。

所述回收模块33,用于检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的回收令牌桶;其中,每一限流周期的令牌总数量为一固定值。

基于上述高并发限流方法的实施例,本申请还提出了一种高并发限流装置,具体请参阅图7,图7是本申请提供的高并发限流装置另一实施例的结构示意图。

本实施例的机器人400包括处理器41、存储器42、输入输出设备43以及总线44。

该处理器41、存储器42、输入输出设备43分别与总线44相连,该存储器42中存储有程序数据,处理器41用于执行程序数据以实现上述实施例所述的高并发限流方法。

在本申请实施例中,处理器41还可以称为CPU(Central Processing Unit,中央处理单元)。处理器41可能是一种集成电路芯片,具有信号的处理能力。处理器41还可以是通用处理器、数字信号处理器(DSP,Digital Signal Process)、专用集成电路(ASIC,Application Specific Integrated Circuit)、现场可编程门阵列(FPGA,FieldProgrammable Gate Array)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器41也可以是任何常规的处理器等。

本申请还提供一种计算机存储介质,请继续参阅图8,图8是本申请提供的计算机存储介质一实施例的结构示意图,该计算机存储介质500中存储有程序数据51,该程序数据51在被处理器执行时,用以实现上述实施例的高并发限流方法。

本申请的实施例以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,方式利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

相关技术
  • 一种车牌识别方法、装置、计算机装置及计算机可读存储介质
  • 一种数据存储方法、装置、设备及计算机可读存储介质
  • 一种可回滚档案采集数据的导入方法、计算机装置及计算机可读存储介质
  • 一种代码编译方法、计算机装置及计算机可读存储介质
  • 一种计算机可读存储介质、数据处理方法、装置及服务器
  • 一种高并发限流方法、装置以及计算机存储介质
  • 一种高并发限流方法、装置以及计算机存储介质
技术分类

06120115573719