Java面试——一分钟搞懂限流算法

为什么限流

运营网站,经常会遇到各种挑战:某黑客发起DoS攻击、网络爬虫网页抓取、商品秒杀活动、双十一与618等场景,会使流量突然激增,如果不限制流量的访问就会使系统宕机。

常见的限流算法

1.漏桶算法( LEAKY BUCKET)

漏桶算法创造一个固定容量的队列(漏桶),每个请求就像一滴水,到来后会先存储在漏桶里面。漏桶的底部有个破洞,水低落下来的速率就是限流的阈值。当漏桶容量已满时,后续的请求会溢出(拒绝或者延迟处理)。

优点:可以平滑的控制流量的进出,保证系统的安全性与稳定性。

缺点:漏桶算法无法应付突然激增的流量,如果流量突增,因为算法本身的限制,只能按照固定的速度去处理请求。

2.令牌桶算法(Token Bucket

令牌桶算法类似上面的漏桶算法,它相当于有个管理员按照限流的大小,定速地向令牌桶扔令牌。所有的请求都会从令牌桶获取令牌,获取成功处理请求逻辑,获取失败拒绝访问。令牌桶满了后,多余的令牌会丢弃。

优点:令牌桶算法是针对漏桶算法的优化,能够应对突增的流量。

我们可以使用Guava的RateLimiter来实现令牌

3.计数器算法

最简单的一种限流算法,我们可以通过原子操作类累积一秒内的请求次数,如果超过设定阈值,拒绝请求访问。

优点:实现简单,单机模式下用Atomic类来实现,分布式下使用Redis就可以实现

缺点:只能进行简单的控制请求速率,无法做到精准的控制,无法应对突发的流量增长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值