CN115174487A - 一种高并发限流方法、装置以及计算机存储介质 - Google Patents
一种高并发限流方法、装置以及计算机存储介质 Download PDFInfo
- Publication number
- CN115174487A CN115174487A CN202211081643.4A CN202211081643A CN115174487A CN 115174487 A CN115174487 A CN 115174487A CN 202211081643 A CN202211081643 A CN 202211081643A CN 115174487 A CN115174487 A CN 115174487A
- Authority
- CN
- China
- Prior art keywords
- token
- current
- token bucket
- period
- tokens
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/215—Flow control; Congestion control using token-bucket
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种高并发限流方法、装置以及计算机存储介质。该方法包括:响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,令牌的发布周期值更新为所第一限流周期;基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶。上述高并发限流方法可以通过分发令牌和回收令牌,形成令牌流量关系闭环,通过限流周期迭代聚合令牌,适用各种业务请求场景,具备良好的请求响应能力。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种高并发限流方法、装置以及计算机存储介质。
背景技术
目前,基于网络的服务系统提供了各类服务,通常,根据具体所提供的服务,服务系统所能承受的访问量是有限的,当超出服务系统承受范围时,需要对流量进行限制,以防止服务系统宕机。常见的限流方式是在系统设计之初就根据单次服务响应时间等值估算出整体服务的访问量,从而估算出服务系统所应承受的访问量,并据此设置对于服务的访问流量限制及访问速度。例如,使用令牌桶来实现流量限制。
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。令牌桶算法最初来源于计算机网络。在网络传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。
但是,在实现本申请过程中,发明人发现现有技术中至少存在如下问题:传统限流算法缺失流量关系闭环,只考虑流入未考察流出,导致限流效果不精准。
发明内容
本申请提供了一种高并发限流方法、装置以及计算机存储介质,主要解决的技术问题是如何实现限流效果的精准限流。
为解决上述技术问题,本申请提供了一种高并发限流方法,所述高并发限流方法包括:
响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;
基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;
检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;
若是,将所述令牌放回所述第一限流周期的未来令牌桶。
其中,所述接收客户端上传的业务数据之后,所述高并发限流方法还包括:
在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,将所述令牌放入所述第二限流周期的当前令牌桶。
其中,所述将所述令牌放入所述第二限流周期的当前令牌桶之后,所述高并发限流方法还包括:
将所述第一限流周期的过去令牌桶中的所有令牌移动至所述第二限流周期的过去令牌桶;
将所述第一限流周期的当前令牌桶中的所有令牌移动至所述第二限流周期的过去令牌桶;
将所述第一限流周期的未来令牌桶中的所有令牌移动至所述第二限流周期的当前令牌桶。
其中,所述第二限流周期与所述第一限流周期为相邻的限流周期,且所述第一限流周期与相邻的所述第二限流周期之间的周期迭代通过预先注册的定时器触发。
其中,所述在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,包括:
检测所述第一限流周期的过去令牌桶内是否存在令牌;
若是,则从所述第一限流周期的过去令牌桶取出所述令牌;
若否,则检测所述第一限流周期的当前令牌桶内是否存在令牌;
若是,则从所述第一限流周期的当前令牌桶取出所述令牌;
若否,则返回错误码回复请求。
其中,所述过去令牌桶、所述当前令牌桶以及所述未来令牌桶内均设置有表结构,所述表结构用于记录令牌的存储位置和/或存储状态。
其中,所述过去令牌桶、所述当前令牌桶以及所述未来令牌桶内均设置有计数器,所述计数器用于记录各个令牌桶内的令牌数量。
为解决上述技术问题,本申请还提供了一种高并发限流装置,所述高并发限流装置包括获取模块、执行模块以及回收模块;其中,
所述获取模块,用于响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;
所述执行模块,用于基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;
所述回收模块,用于检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶。
为解决上述技术问题,本申请还提供了一种高并发限流装置,所述高并发限流装置包括处理器以及与所述处理器耦接的存储器;
其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现如上述的高并发限流方法。
为解决上述技术问题,本申请还提供了一种计算机存储介质,所述计算机存储介质用于存储程序数据,所述程序数据在被处理器执行时,用以实现如上述的高并发限流方法。
与现有技术相比,本申请的有益效果是:高并发限流装置响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,令牌的发布周期值更新为所第一限流周期;基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶。上述高并发限流方法可以通过分发令牌和回收令牌,形成令牌流量关系闭环,通过限流周期迭代聚合令牌,适用各种业务请求场景,具备良好的请求响应能力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
图1是本申请提供的周期n的三色滚动模型的示意图;
图2是本申请提供的周期n+1的三色滚动模型的示意图;
图3是本申请提供的周期n+2的三色滚动模型的示意图;
图4是本申请提供的高并发限流方法一实施例的流程示意图;
图5是本申请提供的三色滚动模型限流周期状态转移流程图;
图6是图4所示高并发限流方法步骤S11的具体子步骤的示意图;
图7是本申请提供的高并发限流装置一实施例的结构示意图;
图8是本申请提供的高并发限流装置另一实施例的结构示意图;
图9是本申请提供的计算机存储介质一实施例的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
令牌桶是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法系统服务作为生产者,按照指定频率向桶(容器)中添加令牌,如 QPS(每秒查询率,Queries-per-second)为 2,每 500ms 向桶中添加一个令牌,如果桶中令牌数量达到阈值,则不再添加。
请求执行作为消费者,每个请求都需要去桶中拿取一个令牌,取到令牌则继续执行;如果桶中无令牌可取,就触发拒绝策略,可以是超时等待,也可以是直接拒绝本次请求,由此达到限流目的。
一个令牌就是某个限流环境中的request通行证,request获得令牌则会被令牌发放的服务提供对应的业务服务,否则会被延缓处理或给出指定错误码返回。
下面,在阐述本申请的高并发限流方法之前,先提出两个新概念:令牌全生命周期状态、令牌数守恒:
令牌全生命周期状态:指的是任何令牌在生命周期内,只有以下3个状态(未发出、已发出、已回收)。这3个状态对应:“未发出”在当前限流周期的令牌桶中,“已发出”不在任何令牌桶中,被request持有处于服务中,“已回收”表示持有的request已经完成或终止,此令牌被回收到指定的回收令牌桶中。
令牌数守恒:在没有外部业务调整令牌桶内令牌数时,所有存量令牌总数不变,变化的只是每个令牌的状态。
在上面介绍令牌全生命周期状态时,提到了当前限流周期的发令牌桶、回收令牌桶。而本申请的高并发限流方法是基于一种三色滚动模型就是时间周期维度收发令牌桶滚动的关系组合开发。
具体请参阅图1至图3,图1是本申请提供的周期n的三色滚动模型的示意图,图2是本申请提供的周期n+1的三色滚动模型的示意图,图3是本申请提供的周期n+2的三色滚动模型的示意图。
在图1至图3中,整个三色滚动模型由3个令牌桶组成,分别包括过去令牌桶、当前令牌桶以未来令牌桶。其中,蓝色(块A)表示当前限流周期的当前令牌桶,绿色(块B)表示未来限流周期的未来令牌桶,米色(块C)表示过去限流周期的过去令牌桶。例如,在上图1中1号桶处于当前限流周期,初始化时有所有的令牌,令牌的状态为“未发出”。下面介绍基于三色滚动模型的行为:
发令牌操作:优先从过去令牌桶获取令牌,如果有则刷新令牌中的发布周期;如果过去令牌桶内没有令牌,则从当前令牌桶里获取令牌,如果有则刷新令牌中的发布周期,获取的令牌状态改为“已发出”交给request持有。
回收令牌操作:判断令牌发布周期和当前令牌桶执行的限流周期是否相同,如不相同还给当前令牌桶,相同则还给未来令牌桶。
注册的定时器触发限流周期迭代:各自桶换角色(过去、现在、未来),过去令牌桶里的令牌一次性放入当前令牌桶。状态转移流程为:未来》现在》过去》未来,反复循环。
如图1至图3所示,在限流周期n,1号桶为当前令牌桶,2号桶为未来令牌桶,3号桶为过去令牌桶。在限流周期n+1,1号桶为过去令牌桶,2号桶为当前令牌桶,3号桶为未来令牌桶。在限流周期n+2,1号桶为未来令牌桶,2号桶为过去令牌桶,3号桶为当前令牌桶。
针对以上介绍的三色滚动模型,本申请提出一种应用于服务端的高并发限流方法,能够结合redis等中间件迁移应用于分布式限流场景。
具体地,三色滚动模型的3个action:发令牌、回收令牌、限流周期迭代,都可以通过lua脚本固化,即key记录的是迭代周期ID,value是一个string(记录此桶中的令牌数),配合Incrby命令,代周期ID发号器的incr命令,并记录使用占用的令牌个数,可以在redis实现对应模型。配套使用方生存TTL机制用于使用方异常后,在限流周期迭代过程中令牌回收。
具体请参见图4和图5,图4是本申请提供的高并发限流方法一实施例的流程示意图,图5是本申请提供的三色滚动模型限流周期状态转移流程图。
本申请提供的高并发限流方法应用于一种服务端,负责收集来自各个客户端生产并上传的业务数据。下面以一种高并发限流装置作为一种实施例的执行主体,继续阐述高并发限流方法的具体流程。
如图4所示,本申请实施例的高并发限流方法具体包括以下步骤:
步骤S11:响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,令牌的发布周期值更新为第一限流周期。
在本申请实施例中,先对上述令牌桶内的令牌的存储方式进行说明,本申请具体提供至少以下三种:
第一、使用链表结构用于桶内令牌存储。通过链表结构存储,在令牌发放、令牌回收及桶内令牌换桶都只需要采用0(1)的方式将令牌状态记载到链表结构中即可。其中,每个令牌桶内都设置有链式结构,每个链式结构存储所有的令牌的状态值,状态值为0则表示令牌不存在于该令牌桶,状态值为1则表示令牌存在于该令牌桶。
第二、每个令牌桶里存放一个线性表结构用于位表操作,每一个bit代表这个id(Identity document,标识号)的令牌是否在此桶中存在,令牌桶之间交换令牌,需要枚举此线性表int64数据做异或操作,发出去的令牌在操作位表后动态生成或销毁,此方法节省内存但消耗一定的cpu(central processing unit,中央处理器)做位操作。
第三、基于上述第二点的改进,每个令牌桶只记录包含令牌个数,操作这些计数器要求原子操作,令牌在发放时动态内存生成,在回收时销毁。
高并发限流装置对于图1至图3中任意一个限流周期的令牌桶中的令牌进行取出或回收,在此过程中,通过上述令牌的存储方式改变令牌的状态值,从而实时获取令牌的位置和状态。
进一步地,判断业务系统进入限流状态后,响应于申请令牌事件触发,高并发限流装置在当前限流周期,即第一限流周期的过去令牌桶或者当前令牌桶获取令牌,以使得申请令牌事件对应的业务请求根据令牌获得执行的权限。此时,需要将取出的令牌的发布周期值更新为第一限流周期。
而高并发限流装置从过去令牌桶或者当前令牌桶获取令牌的具体逻辑具体请参阅图6,图6是图4所示高并发限流方法步骤S11的具体子步骤的示意图。
如图6所示,图4所示实施例的高并发限流方法中的步骤S11具体包括以下步骤:
步骤S111:检测第一限流周期的过去令牌桶内是否存在令牌。
在本申请实施例中,高并发限流装置在需要给申请令牌事件的业务请求分配令牌时,首先检测第一限流周期的过去令牌桶内是否存在令牌。若过去令牌桶存在令牌,则进入步骤S112;若过去令牌桶不存在令牌,则进入步骤S113。
在本申请实施例中,过去令牌桶和当前令牌桶中的令牌均为可用的令牌,即高并发限流装置可以从过去令牌桶或当前令牌桶取出令牌分配给业务请求。其中,过去令牌桶的令牌取出的优先级高于当前令牌桶的令牌取出的优先级,即高并发限流装置优先取出过去令牌桶的令牌,待过去令牌桶的令牌全部取出后,在取出当前令牌桶的令牌。
步骤S112:从第一限流周期的过去令牌桶取出令牌。
在本申请实施例中,高并发限流装置从第一限流周期的过去令牌桶取出令牌,分配给相应的业务请求,以使业务请求能够被执行。
步骤S113:检测第一限流周期的当前令牌桶内是否存在令牌。
在本申请实施例中,在过去令牌桶内不存在令牌,即过去令牌桶内的令牌已完全取出时,高并发限流装置进一步检测第一限流周期的当前令牌桶内是否存在令牌。若当前令牌桶存在令牌,则进入步骤S114;若当前令牌桶不存在令牌,则进入步骤S115。
步骤S114:从第一限流周期的当前令牌桶取出令牌。
在本申请实施例中,高并发限流装置从第一限流周期的当前令牌桶取出令牌,分配给相应的业务请求,以使业务请求能够被执行。
步骤S115:返回错误码回复请求。
在本申请实施例中,在第一限流周期的当前令牌桶和当前令牌桶均不存在可用的令牌时,说明在第一限流周期内业务请求的执行数量已经到达限流阈值,在此限流周期内不再分配令牌,即不再执行其他业务请求。高并发限流装置可以返回错误码回复申请令牌事件的请求,以使客户端的用户获悉由于限流,业务请求失败的原因。
此时,高并发限流装置还可以将在第一限流周期内未能成功执行的业务请求放入业务请求队列,如FIFO队列。在下一个限流周期时,高并发限流装置可以优先给业务请求队列中的业务请求分配可用的令牌。
步骤S12:基于令牌执行申请令牌事件的业务请求,接收客户端上传的业务数据。
在本申请实施例中,申请令牌事件对应的业务请求获取到令牌之后,获取执行业务请求的权限,即可执行相关的业务请求。此时,高并发限流装置一方面可以为客户端,即业务数据生产者;另一方面也可以为服务端,即业务数据消费者。
在客户端,即分布式RPC系统的边缘侧终端,作为数据的自主生产者,客户端执行业务请求的过程可以视为生成业务请求的相关数据,并将业务请求的相关数据上传至分布式RPC系统的中心侧,即服务端。
在服务端,即分布式RPC系统的中心终端,作为数据的消费者,服务端执行业务请求的过程可以视为接收分布式RPC系统各个客户端上传的关于业务请求的相关数据,并将业务请求的相关数据进行消费。
步骤S13:检测完成令牌对应的业务请求时的当前限流周期是否为第一限流周期。
在本申请实施例中,高并发限流装置一方面获取令牌的发布周期值,即第一限流周期,另一方面获取完成令牌对应的业务请求时的当前限流周期。然后,判断完成令牌对应的业务请求时的当前限流周期与第一限流周期是否为同一限流周期,若是,则进入步骤S14;若否,则进入步骤S15。
步骤S14:将令牌放回第一限流周期的未来令牌桶。
在本申请实施例中,当令牌需要被放回时的当前限流周期与被取出时的限流周期为同一限流周期时,说明该令牌在该限流周期内无法再次被取用。因此,高并发限流装置需要将令牌放回第一限流周期的未来令牌桶,未来令牌桶内的令牌被设置为不可取用。
而通过限流周期迭代,三个令牌桶之间的角色会滚动切换,具体请参阅图1至图3的令牌桶角色切换状态,以及图5的三色滚动模型限流周期状态转移流程图。同时令牌桶角色切换状态后,桶内的令牌的状态值也同样随之切换。
具体地,以相邻的第一限流周期到第二限流周期的令牌桶角色切换为例,且所述第一限流周期与相邻的所述第二限流周期之间的周期迭代通过预先注册的定时器触发。令牌桶内的令牌状态变化情况如下:第一限流周期的过去令牌桶中的所有令牌移动至第二限流周期的过去令牌桶;第一限流周期的当前令牌桶中的所有令牌移动至第二限流周期的过去令牌桶;将第一限流周期的未来令牌桶中的所有令牌移动至第二限流周期的当前令牌桶。
进一步地,由于在切换过程中,高并发限流装置将第一限流周期的未来令牌桶中的所有令牌移动至第二限流周期的当前令牌桶,以使第一限流周期已取用的令牌,在第二限流周期内重新可用。
另外,高并发限流装置将第一限流周期的当前令牌桶中的所有令牌移动至第二限流周期的过去令牌桶,而第一限流周期的当前令牌桶中的令牌在第一限流周期中未被取用,而在第二限流周期当然能够被取用。此时,高并发限流装置需要将所述第二限流周期的未来令牌桶的所有令牌合并到所述第二限流周期的过去令牌桶,保持令牌的可用性,提高令牌使用效率。
下面通过一个具体例子说明三色滚动模型限流周期状态转移的情况。
以图1至图3的限流周期状态为例,在周期n中初始化三色滚动模型的所有令牌,即过去令牌桶的令牌数为0,当前令牌桶的令牌数为100,未来令牌桶的令牌数为0。在周期n内,有10个业务请求需要执行,执行完成后,过去令牌桶的令牌数为0,当前令牌桶的令牌数为90,未来令牌桶的令牌数为10。
进入周期n+1,三色滚动模型的令牌桶角色切换后,过去令牌桶的令牌数为90,当前令牌桶的令牌数为10,未来令牌桶的令牌数为0。在周期n+1内,有50个业务请求需要执行,优先取出过去令牌桶中的令牌,业务请求执行完成后,过去令牌桶的令牌数为40,当前令牌桶的令牌数为10,未来令牌桶的令牌数为50。
进入周期n+2,三色滚动模型的令牌桶角色切换后,过去令牌桶的令牌数为10,当前令牌桶的令牌数为50,未来令牌桶的令牌数为40。此时需要将未来令牌桶的令牌合并到过去令牌桶内,即令牌桶情况更新为:过去令牌桶的令牌数为50,当前令牌桶的令牌数为50,未来令牌桶的令牌数为0。在周期n+2内,有80个业务请求需要执行,优先取出过去令牌桶中的令牌,业务请求执行完成后,过去令牌桶的令牌数为0,当前令牌桶的令牌数为20,未来令牌桶的令牌数为80。
在后续的限流周期内,三色滚动模型的令牌桶情况依次迭代,在此不一一列举。
步骤S15:将令牌放入第二限流周期的当前令牌桶。
在本申请实施例中,当令牌需要被放回时的当前限流周期与被取出时的限流周期不为同一限流周期时,说明该令牌在当前限流周期内还可以被取用。因此,高并发限流装置需要将令牌放回第二限流周期的当前令牌桶。
此时,并未限定第一限流周期与第二限流周期的时序关系。
在本申请实施例中,高并发限流装置响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,令牌的发布周期值更新为所第一限流周期;基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶,其中,所述未来令牌桶的令牌在下一限流周期的初始化中合并到所述下一限流周期的过去令牌桶。上述高并发限流方法可以通过分发令牌和回收令牌,形成令牌流量关系闭环,通过限流周期迭代聚合令牌,适用各种业务请求场景,具备良好的请求响应能力。
以上实施例,仅是对本申请的其中一种常见案例而已,并非对本申请的技术范围做任何限制,故凡是依据本申请方案的实质对以上内容所做的任何细微修改、等同变化或者修饰,均仍属于本申请技术方案的范围内。
基于上述碰撞检测方法的实施例,本申请还提出了一种高并发限流装置,具体请参阅图7,图7是本申请提供的高并发限流装置一实施例的结构示意图。
本实施例的高并发限流装置300包括获取模块31、执行模块32以及回收模块33。
其中,所述获取模块31,用于响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期。
所述执行模块32,用于基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据。
所述回收模块33,用于检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶。
基于上述高并发限流方法的实施例,本申请还提出了一种高并发限流装置,具体请参阅图8,图8是本申请提供的高并发限流装置另一实施例的结构示意图。
本实施例的高并发限流装置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也可以是任何常规的处理器等。
本申请还提供一种计算机存储介质,请继续参阅图9,图9是本申请提供的计算机存储介质一实施例的结构示意图,该计算机存储介质500中存储有程序数据51,该程序数据51在被处理器执行时,用以实现上述实施例的高并发限流方法。
本申请的实施例以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,方式利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种高并发限流方法,其特征在于,所述高并发限流方法包括:
响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;
基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;
检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;
若是,将所述令牌放回所述第一限流周期的未来令牌桶。
2.根据权利要求1所述的高并发限流方法,其特征在于,
所述接收客户端上传的业务数据之后,所述高并发限流方法还包括:
在所述完成所述令牌对应的业务请求时的当前限流周期为第二限流周期时,将所述令牌放入所述第二限流周期的当前令牌桶。
3.根据权利要求2所述的高并发限流方法,其特征在于,
所述将所述令牌放入所述第二限流周期的当前令牌桶之后,所述高并发限流方法还包括:
将所述第一限流周期的过去令牌桶中的所有令牌移动至所述第二限流周期的过去令牌桶;
将所述第一限流周期的当前令牌桶中的所有令牌移动至所述第二限流周期的过去令牌桶;
将所述第一限流周期的未来令牌桶中的所有令牌移动至所述第二限流周期的当前令牌桶。
4.根据权利要求2或3所述的高并发限流方法,其特征在于,
所述第二限流周期与所述第一限流周期为相邻的限流周期,且所述第一限流周期与相邻的所述第二限流周期之间的周期迭代通过预先注册的定时器触发。
5.根据权利要求1所述的高并发限流方法,其特征在于,
所述在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,包括:
检测所述第一限流周期的过去令牌桶内是否存在令牌;
若是,则从所述第一限流周期的过去令牌桶取出所述令牌;
若否,则检测所述第一限流周期的当前令牌桶内是否存在令牌;
若是,则从所述第一限流周期的当前令牌桶取出所述令牌;
若否,则返回错误码回复请求。
6.根据权利要求1所述的高并发限流方法,其特征在于,
所述过去令牌桶、所述当前令牌桶以及所述未来令牌桶内均设置有表结构,所述表结构用于记录令牌的存储位置和/或存储状态。
7.根据权利要求1所述的高并发限流方法,其特征在于,
所述过去令牌桶、所述当前令牌桶以及所述未来令牌桶内均设置有计数器,所述计数器用于记录各个令牌桶内的令牌数量。
8.一种高并发限流装置,其特征在于,所述高并发限流装置包括获取模块、执行模块以及回收模块;其中,
所述获取模块,用于响应于申请令牌事件触发,在第一限流周期的过去令牌桶或者当前令牌桶获取令牌,其中,所述令牌的发布周期值更新为所述第一限流周期;
所述执行模块,用于基于所述令牌执行所述申请令牌事件的业务请求,接收客户端上传的业务数据;
所述回收模块,用于检测完成所述令牌对应的业务请求时的当前限流周期是否为所述第一限流周期;若是,将所述令牌放回所述第一限流周期的未来令牌桶。
9.一种高并发限流装置,其特征在于,所述高并发限流装置包括处理器以及与所述处理器耦接的存储器;
其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现如权利要求1-7任一项所述的高并发限流方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质用于存储程序数据,所述程序数据在被处理器执行时,用以实现如权利要求1-7任一项所述的高并发限流方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211081643.4A CN115174487B (zh) | 2022-09-06 | 2022-09-06 | 一种高并发限流方法、装置以及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211081643.4A CN115174487B (zh) | 2022-09-06 | 2022-09-06 | 一种高并发限流方法、装置以及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115174487A true CN115174487A (zh) | 2022-10-11 |
CN115174487B CN115174487B (zh) | 2022-12-06 |
Family
ID=83481464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211081643.4A Active CN115174487B (zh) | 2022-09-06 | 2022-09-06 | 一种高并发限流方法、装置以及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115174487B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024051485A1 (en) * | 2022-09-06 | 2024-03-14 | Zhejiang Dahua Technology Co., Ltd. | Methods and systems for request traffic management |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7602721B1 (en) * | 2003-12-22 | 2009-10-13 | Extreme Networks, Inc. | Methods and systems for fine grain bandwidth allocation in a switched network element |
CN102082693A (zh) * | 2011-02-15 | 2011-06-01 | 中兴通讯股份有限公司 | 网络流量监管方法及装置 |
US20110299397A1 (en) * | 2010-06-04 | 2011-12-08 | Kawasaki Microelectronics Inc. | Communication control apparatus and shaping apparatus having token bucket |
US20140112147A1 (en) * | 2012-10-19 | 2014-04-24 | Broadcom Corporation | Refresh mechanism for a token bucket |
CN109005125A (zh) * | 2018-08-24 | 2018-12-14 | 阿里巴巴集团控股有限公司 | 动态限流方法、装置及系统 |
CN110198272A (zh) * | 2018-10-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 一种流量控制方法及装置、存储介质 |
CN113037862A (zh) * | 2021-03-30 | 2021-06-25 | 北京三快在线科技有限公司 | 业务请求的处理方法、装置、设备及存储介质 |
CN113645147A (zh) * | 2021-07-01 | 2021-11-12 | 苏州裕太微电子有限公司 | 一种流量整形器的令牌更新系统及方法 |
CN113742114A (zh) * | 2020-09-28 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种系统限流的方法和装置 |
CN113765820A (zh) * | 2020-10-30 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 基于令牌桶的限流方法、装置、计算设备及介质 |
CN114024908A (zh) * | 2021-11-03 | 2022-02-08 | 蚂蚁胜信(上海)信息技术有限公司 | 实时自适应限流方法、限流服务系统和限流器 |
-
2022
- 2022-09-06 CN CN202211081643.4A patent/CN115174487B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7602721B1 (en) * | 2003-12-22 | 2009-10-13 | Extreme Networks, Inc. | Methods and systems for fine grain bandwidth allocation in a switched network element |
US20110299397A1 (en) * | 2010-06-04 | 2011-12-08 | Kawasaki Microelectronics Inc. | Communication control apparatus and shaping apparatus having token bucket |
CN102082693A (zh) * | 2011-02-15 | 2011-06-01 | 中兴通讯股份有限公司 | 网络流量监管方法及装置 |
US20140112147A1 (en) * | 2012-10-19 | 2014-04-24 | Broadcom Corporation | Refresh mechanism for a token bucket |
CN109005125A (zh) * | 2018-08-24 | 2018-12-14 | 阿里巴巴集团控股有限公司 | 动态限流方法、装置及系统 |
CN110198272A (zh) * | 2018-10-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 一种流量控制方法及装置、存储介质 |
CN113742114A (zh) * | 2020-09-28 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种系统限流的方法和装置 |
CN113765820A (zh) * | 2020-10-30 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 基于令牌桶的限流方法、装置、计算设备及介质 |
CN113037862A (zh) * | 2021-03-30 | 2021-06-25 | 北京三快在线科技有限公司 | 业务请求的处理方法、装置、设备及存储介质 |
CN113645147A (zh) * | 2021-07-01 | 2021-11-12 | 苏州裕太微电子有限公司 | 一种流量整形器的令牌更新系统及方法 |
CN114024908A (zh) * | 2021-11-03 | 2022-02-08 | 蚂蚁胜信(上海)信息技术有限公司 | 实时自适应限流方法、限流服务系统和限流器 |
Non-Patent Citations (3)
Title |
---|
安智平等: "一种改进的单速率三色标记器", 《西安交通大学学报》 * |
李祺: "一种边界网关流量整形与带宽保障机制", 《微处理机》 * |
李金库等: "一种改进的双速率三色标记器", 《微电子学与计算机》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024051485A1 (en) * | 2022-09-06 | 2024-03-14 | Zhejiang Dahua Technology Co., Ltd. | Methods and systems for request traffic management |
Also Published As
Publication number | Publication date |
---|---|
CN115174487B (zh) | 2022-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108829350B (zh) | 基于区块链的数据迁移方法和装置 | |
US10432551B1 (en) | Network request throttling | |
CN111897498A (zh) | 区块链数据的多级存储方法和装置 | |
CN109617829B (zh) | 一种业务请求数据的处理方法、装置及系统 | |
CN112650576B (zh) | 资源调度方法、装置、设备、存储介质及计算机程序产品 | |
CN111245732B (zh) | 一种流量控制方法、装置及设备 | |
CN111641563B (zh) | 基于分布式场景的流量自适应方法与系统 | |
CN112866136B (zh) | 业务数据处理方法和装置 | |
CN111158878B (zh) | 资源转移请求线程控制方法、装置及存储介质 | |
CN112165436A (zh) | 流量控制方法、装置及系统 | |
CN112600761B (zh) | 一种资源分配的方法、装置及存储介质 | |
CN115174487B (zh) | 一种高并发限流方法、装置以及计算机存储介质 | |
CN111161071A (zh) | 基于区块链的数据处理方法、装置、设备和存储介质 | |
CN115277577A (zh) | 数据处理方法、装置、计算机设备和计算机可读存储介质 | |
CN107038067B (zh) | 分布式流处理中处理资源的管理方法和装置 | |
US10348814B1 (en) | Efficient storage reclamation for system components managing storage | |
WO2024051485A1 (en) | Methods and systems for request traffic management | |
CN112667467A (zh) | 集群的自适应限流方法、装置、计算机设备及存储介质 | |
CN112328392A (zh) | 一种数据处理方法及相关设备 | |
CN115391051A (zh) | 视频计算任务调度方法、设备及计算机可读介质 | |
CN116319810A (zh) | 分布式系统的流量控制方法、装置、设备、介质及产品 | |
CN115499513A (zh) | 数据请求的处理方法、装置、计算机设备和存储介质 | |
US10540341B1 (en) | System and method for dedupe aware storage quality of service | |
CN110019372A (zh) | 数据监控方法、装置、服务器及存储介质 | |
CN114020209A (zh) | 一种客户端业务限速方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |