令牌桶限流算法和漏桶限流算法区别

1.漏桶限流算法的原理

   以固定速率从桶中流出水滴,以任意速率往桶中放入水滴,桶容量大小是不会发生改变的。  

   流入:以任意速率往桶中放入水滴。

   流出:以固定速率从桶中流出水滴。

   水滴:是唯一不重复的标识。

   因为桶中的容量是固定的,如果流入水滴的速率>流出的水滴速率,桶中的水滴可能会溢出。那么溢出的水滴请求都是拒绝访问的,或者直接调用服务降级方法。前提是同一时刻。

  2.令牌桶算法(Token)

   令牌桶分为2个动作,动作1(固定速率往桶中存入令牌)、动作2(客户端如果想访问请求,先从桶中获取token)。guava 提供的RateLimiter类来进行限流处理。

     1.传统的方式整合RateLimiter 有很大的缺点:代码重复量特别大,而且本身不支持注解方式。

     2.如果限流代码可以放在网关中,相当于针对所有的服务接口都实现限流(可以使用排除法进行排除不进行限流的方法),维护性不是很强。

     3.正常的公司项目,不是所有的服务接口都需要实现限流方法的,一般只真针对于大流量接口。比如:秒杀抢购、12306抢票这样的场景。

     4.可以手动封装一个RateLimiter类 注解来解决这个方法。

 

以规定的速率往令牌桶中放入 token,用户请求必须获取到令牌桶中的 token才可以访问我们的业务逻辑方法,如果没有从令牌桶中获取到 token ,拒绝访问。

在高并发情况下,如果我们的请求过多 超出了令牌桶生成令牌的速度,这时候请求就会被驳回,提示请稍后重试!

优势:能够控制请求的速率。

限流的目的:为了保护服务,避免服务宕机。

漏桶算法与令牌桶算法的区别

令牌桶算法:以固定的速率(平均速率)生成对应的令牌放到桶中,客户端只需要在桶中获取到令牌后,就可以访问服务请求。

漏桶算法:以任意速率往桶中放入水滴,如果桶中的水滴没有满的话,可以访问服务。

在突发情况请求的时候,令牌桶中只需要客户端你能够拿到令牌就能访问服务。但是漏桶算法正好与令牌桶算法相反,令牌桶以平均速率访问,漏桶算法平滑访问。

 

令牌桶网址:http://ifeve.com/guava-ratelimiter/

posted @   明天,你好啊  阅读(9729)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示