Java中高级工程师必备知识点---限流算法

 

本教程整理了Java工程师必备基础知识,内容质量高,涉及知识面非常广,是广大中高级Java工程师必备开发手册,内容包括:

        一、Java基础知识;
        二、计算机网络知识;
        三、Linux;
        四、数据结构与算法;
        五、Mysql和Redis;
        六、Spring等框架知识;
        七、设计模式;
        八、分布式、微服务;
        九、常见面试问题解析;

内容太多,篇幅有限,完整版PDF可通过(PDF完整版)获取,本文摘取《9. 限流的算法有哪些?》进行说明展示

9. 限流的算法有哪些?

9.1 固定窗口计数器算法

规定我们单位时间处理的请求数量。比如我们规定我们的一个接口一分钟只能访问 10 次的话。使用固定 窗口计数器算法的话可以这样实现:给定一个变量counter 来记录处理的请求数量,当 1 分钟之内处理一个请求之后counter+1 1 分钟之内的如果 counter=100 的话,后续的请求就会被全部拒绝。等到 1 分钟 结束后,将counter 回归成 0 ,重新开始计数( ps :只要过了一个周期就讲 counter 回归成 0 )。
这种限流算法无法保证限流速率,因而无法保证突然激增的流量。比如我们限制一个接口一分钟只能访 问10 次的话,前半分钟一个请求没有接收,后半分钟接收了 10 个请求。

 9.2 滑动窗口计数器算法

算的上是固定窗口计数器算法的升级版。滑动窗口计数器算法相比于固定窗口计数器算法的优化在于: 它把时间以一定比例分片。例如我们的借口限流每分钟处理60 个请求,我们可以把 1 分钟分为 60 个窗 口。每隔1 秒移动一次,每个窗口一秒只能处理 不大于 60( 请求数 )/60 (窗口数) 的请求, 如果当前窗 口的请求计数总和超过了限制的数量的话就不再处理其他请求。
很显然:当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。

 9.3 漏桶算法

我们可以把发请求的动作比作成注水到桶中,我们处理请求的过程可以比喻为漏桶漏水。我们往桶中以 任意速率流入水,以一定速率流出水。当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速 率。如果想要实现这个算法的话也很简单,准备一个队列用来保存请求,然后我们定期从队列中拿请求 来执行就好了。

9.4 令牌桶算法 

令牌桶算法也比较简单。和漏桶算法算法一样,我们的主角还是桶(这限流算法和桶过不去啊)。不过 现在桶里装的是令牌了,请求在被处理之前需要拿到一个令牌,请求处理完毕之后将这个令牌丢弃(删 除)。我们根据限流大小,按照一定的速率往桶里添加令牌。

 

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java码仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值