System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于令牌桶的分布式限流方法技术_技高网

一种基于令牌桶的分布式限流方法技术

技术编号:42814539 阅读:14 留言:0更新日期:2024-09-24 20:55
本申请实施例提供一种基于令牌桶的分布式限流方法,包括如下步骤:以RedisTimeReqLimiter为对象,调用尝试获取允许方法获取请求令牌,其中,方法参数为存储数据;方法参数中有最大需要的请求令牌数,尝试获取最近时间holdSeconds内的请求令牌数;根据尝试获取的请求令牌数执行操作,如果请求令牌数为0,表示限流,不可继续请求,请求令牌数>0,则表示可以继续执行相应请求令牌数的请求。采用本申请提供的一种基于令牌桶的分布式限流方法,针对一些执行时间长,动态修改配置的限流任务,本申请可以做到更加平滑的修改配置,而不影响限流效果。这种场景中,如果突然发布或者宕机,也不会锁住大量请求。随着时间推移,可以释放请求令牌,继续执行任务。

【技术实现步骤摘要】

本申请涉及计算机通信,尤其涉及一种基于令牌桶的分布式限流方法


技术介绍

1、在互联网行业中,会出现一些高并发请求访问系统场景,如果不经限制,就会压垮后台系统。这时就需要对请求进行限流。这里使用的是令牌桶思想进行限流。除了实现限流功能外,有些业务场景会需要要求限制每个请求的最大占有令牌时间,防止请求长期占用令牌。

2、现有技术在常规场景还是能够很好的实现限流,但在一些特殊场景还是会存在一些局限。由于它记录的是当前请求的总数,如果某个请求占有这个请求令牌,需要等请求在执行结束后主动释放这个请求令牌才行,否则会一直占有,直到这个redis记录的总数过期。

3、对于一些要求过期时间比较长,请求执行时间长的场景,这种方式就不会特别好。如果突然发布,或者突然宕机就会造成长期不能释放请求令牌。

4、对于一些要求过期时间长,请求执行时间长,且会动态修改该过期时间,限制请求总数的场景不太好。修改配置后,当时就不能区分之前的一些请求了,对于一些业务场景来说不可接受。


技术实现思路

1、为了解决上述技术缺陷之一,本申请实施例中提供了一种基于令牌桶的分布式限流方法。

2、根据本申请实施例的第一个方面,提供了一种基于令牌桶的分布式限流方法,所述分布式限流方法包括如下步骤:

3、以redistimereqlimiter为对象,调用尝试获取允许方法获取请求令牌,其中,方法参数为存储数据;

4、方法参数中有最大需要的请求令牌数,尝试获取最近时间holdseconds内的请求令牌数;

5、根据尝试获取的请求令牌数执行操作,如果请求令牌数为0,表示限流,不可继续请求,请求令牌数>0,则表示可以继续执行相应请求令牌数的请求。

6、进一步的,所述调用尝试获取允许方法包括如下步骤:

7、获取allowlockrediskey的对应锁,获取失败不继续执行,成功则继续执行;

8、获取存储数据allowrediskey最近时间holdseconds内的请求总数,如果大于最大限流请求数,则不会继续执行,返回0,否则继续执行;

9、在剩余的可允许请求的个数和最大限流请求数中取一个最小的,表示这是当前可以获取的请求令牌个数n,往存储数据allowrediskey中存储n个请求记录,对应时间为当前时间戳;

10、删除最近时间holdseconds之前的多个请求记录;

11、返回个数为n,根据结果n,如果n为0,表示限流,不可继续请求,n>0,则表示可以继续执行n个请求。

12、进一步的,存储数据allowrediskey为有序集数据结构(zset),记录的是每个请求的请求时间,根据请求时间排序,筛序最近的请求记录。

13、进一步的,redistimereqlimiter内部属性包括:allowrediskey、allowlockrediskey、最大限流请求数和令牌占用时间holdseconds。

14、根据本申请实施例的第二个方面,还提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如上述的基于令牌桶的分布式限流方法的步骤。

15、根据本申请实施例的第三个方面,还提供了一种可读存储介质,所述可读存储介质上存储有分布式限流程序,所述分布式限流程序被处理器执行时实现如上述的分布式限流方法的步骤。

16、采用本申请实施例中提供的一种基于令牌桶的分布式限流方法,针对一些执行时间长,动态修改配置的限流任务,本申请可以做到更加平滑的修改配置,而不影响限流效果。这种场景中,如果突然发布或者宕机,也不会锁住大量请求。随着时间推移,可以释放请求令牌,继续执行任务。

本文档来自技高网...

【技术保护点】

1.一种基于令牌桶的分布式限流方法,其特征在于,所述分布式限流方法包括如下步骤:

2.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,所述调用尝试获取允许方法包括如下步骤:

3.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,存储数据allowRedisKey为有序集数据结构,记录的是每个请求的请求时间,根据请求时间排序,筛序最近的请求记录。

4.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,RedisTimeReqLimiter内部属性包括:allowRedisKey、allowLockRedisKey、最大限流请求数和令牌占用时间holdSeconds。

5.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如权利要求1至4任一所述的基于令牌桶的分布式限流方法的步骤。

6.一种可读存储介质,其特征在于,所述可读存储介质上存储有分布式限流程序,所述分布式限流程序被处理器执行时实现如权利要求1至4中任一项所述的分布式限流方法的步骤。

...

【技术特征摘要】

1.一种基于令牌桶的分布式限流方法,其特征在于,所述分布式限流方法包括如下步骤:

2.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,所述调用尝试获取允许方法包括如下步骤:

3.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,存储数据allowrediskey为有序集数据结构,记录的是每个请求的请求时间,根据请求时间排序,筛序最近的请求记录。

4.根据权利要求1所述的基于令牌桶的分布式限流方法,其特征在于,redistimereqlimiter内部属性包括:allowrediskey、...

【专利技术属性】
技术研发人员:邱副添罗洪鹏杨文波
申请(专利权)人:广州助蜂网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1