什么是限流(b站限流多久能解除)

我之前读书的时候没接触过高并发/大流量这种东西,所以当然没接触过限流。看公司项目的时候发现用了费率限制器,可以了解一下。一、限流基础知识介绍为什么要限制电流?相

我之前读书的时候没接触过高并发/大流量这种东西,所以当然没接触过限流。看公司项目的时候发现用了费率限制器,可以了解一下。

一、限流基础知识介绍

为什么要限制电流?相信不用我多说。

比如,我周末去饭店吃饭,但是人太多了,我只能去前台拿个号,等号码到我的时候才能进饭店吃饭。如果饭店没有限流怎么办?一到饭点,人都往里冲,而饭店又处理不了这么多人流,很容易就出事故(饭店塞满了人,无路可走。饭店的工作人员崩溃了,处理不过来)回到代码世界上也是一样的,服务器能处理的请求数有限,如果请求量特别大,我们需要做限流(要么就让请求等待,要么就把请求给扔了)

在代码领域,有两种常见的限流算法:

令牌桶算法漏桶算法

1.1什么是漏桶?

举个例子,现在我有一个水桶,绿色的是我能装水的容量。如果我往桶里倒的水比我能装的多,桶就会溢出来(限流):

什么是限流(b站限流多久能解除)

目前我们能知道的是:

桶子的容量是固定的(是图上绿色那块)超出了桶子的容量就会溢出(要么等待,要么直接丢弃)

好了,现在让我们在水桶上挖一个洞,这样水就可以从洞里流出来了:

什么是限流(b站限流多久能解除)

水桶上的孔的大小是固定的,所以水从孔中流出的速度也是固定的。

所以综上所述,算法只需要两个参数:

桶子的容量漏水的速率

漏桶有两种实现方式:

不允许突发流量的情况:如果进水的速率大于出水的速率,直接舍弃掉多余的水。比如,我的桶子容量能装100L,但我的桶子出水速率是10L/s。此时,如果现在有100L/s的水进来,我只让10L的水进到桶子,其余的都限流。(限定了请求的速度)允许一定的突发流量情况:我的桶子能装100L,如果现在我的桶子是空的,那么这100L的水都能进我的桶子。我以10L/s的速率将这些水流出,如果还有100L的水进来,只能限流了。

经过以上分析,我们知道:

漏桶可以平滑网络上的突发流量(因为漏水率是固定的)。

1.2什么是令牌桶算法?

现在我又多了一桶。这个桶不是用来装水的,而是用来装代币的:

什么是限流(b站限流多久能解除)

代币会以一定的速度扔进桶里。例如,我在一秒钟内向桶里扔10个代币:

什么是限流(b站限流多久能解除)

一个桶可以容纳的令牌数量有上限。比如我的桶最多只能装1000个代币。

每一个请求进来都到桶里去取一个令牌。

比如这秒我有1001个请求,我就去桶子里边拿1001个令牌,此时可能会出现两种情况:桶子里边没有1001个令牌,只有1000个,那没拿到令牌的请求只能被阻塞了(等待)桶子里边有1001个令牌,所有请求都可以执行。

什么是限流(b站限流多久能解除)

令牌桶算法支持网络上的突发流量。

* *漏桶和令牌桶的区别:* *从上面的例子可以看出,漏桶只能处理固定速率的请求,而令牌桶可以处理桶内令牌数最大的请求。

二、RateLimiter使用

RateLimiter是番石榴的一个限流元件,在我们的系统中使用,使用起来非常方便。

介绍pom依赖关系:

什么是限流(b站限流多久能解除)

它是基于令牌桶算法的,API非常简单。请参见下面的演示:

什么是限流(b站限流多久能解除)

从结果中我们可以看到,每秒钟只能执行三个:

什么是限流(b站限流多久能解除)

三、分布式限流

RateLimiter是一个单独的限流元件。如果是分布式应用,怎么办?

可以用Redis+lua实现。大致的Lua脚本代码如下:

什么是限流(b站限流多久能解除)

Java代码如下:

什么是限流(b站限流多久能解除)

解释:

Java代码传入key和最大的限制limit参数进lua脚本执行lua脚本(lua脚本判断当前key是否超过了最大限制limit)如果超过,则返回0(限流)如果没超过,返回1(程序继续执行)

一直以来,在不同类型的软件开发人才需求中,对Java工程师的需求一直很高,Java工程师的薪资水平也比较高,所以每年学习Java的人越来越多。但是由于每个人的基础和资历不同,学习效果也大相径庭,可以私信我【java】进入我的讨论组交流,获取Java学习资料!

本文转载至掘金-Java 3Y。如有侵权,请联系李删除!

什么是限流(b站限流多久能解除)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/30001.html

发表回复

登录后才能评论