目录

干什么用的?

什么是漏斗算法

令牌桶算法

令牌锁的使用


干什么用的?

这两个算法来源于计算机网络。在网络传输数据时,为了防止网络拥塞,需要限制网络中的流量,即限流

什么是漏斗算法

水(大量并发的用户请求)进入漏斗里,漏斗以一定的速度出水。当水流入的速度过大也就是漏斗满了的话,直接进行溢出。

漏斗算法被认为是一种粗暴的限流算法,因为并不是所有情况下当前没抢到商品的请求都要被抛弃,因此这种强制性过滤算法并不具备灵活性

令牌桶算法

令牌桶算法原理如下:水(用户请求)必须拿到令牌才代表消费成功。而“令牌数”有一个初始值,令牌桶也有一个令牌存储上限,当桶中的令牌耗光后,令牌桶会以自定义的速度生产令牌,此时所有的水(用户请求)会进入阻塞状态,阻塞时间内如果得到了令牌就会消费成功,如果阻塞时间过了还没有得到令牌,请求会被抛弃。

注意,当用户请求没有经过时,令牌桶本身会不断生产令牌,直到令牌达到上限为止。这样做的好处是,面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,支持了突发请求。

令牌锁的使用

在java项目中使用令牌锁需要导入谷歌的令牌桶工具依赖

        <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.2-jre</version></dependency>

对于这个Controller,可以使用Jmeter模拟1000个并发测试,感受下令牌桶的使用

public class tokenbulkController {//创建令牌桶实例 桶中最多有20个令牌private RateLimiter rateLimiter = RateLimiter.create(20);@GetMapping("sale")public String sale(Integer id){//情况1.没有获取到令牌的请求一直等待,直到获取(这种方式不常用)//log.info("等待的时间: "+ rateLimiter.acquire());//情况2.设置一个等待时间,如果在等待时间内获取了令牌,则处理该请求,如果在等待时间内没有获取到令牌则抛弃之(常用)if(!rateLimiter.tryAcquire(2, TimeUnit.SECONDS)){System.out.println("当前请求被限流,直接抛弃,无法调用后续秒杀逻辑");return "本次您未抢到该商品";}System.out.println("后续业务处理");return "恭喜你抢购成功";}
}

这个例子中没有设置令牌的生产时间,令牌的生产时间当然也可以自定义~

注意,我们设定的是如果2s内,请求没拿到令牌就会被限流,也就是说使用令牌桶后卖出去的商品并不一定是100个。3s内有多少个请求能拿到令牌,就能卖出多少个请求。想想这样合不合理?

这种方式有其合理性。原因在于你卖了所有的库存,如果用户收到后换货和退货怎么办?因此即使是秒杀也不应该卖出全部的商品。

那如何增加3s内卖出去的商品数呢?你可以通过增大并发请求数或者增大阻塞时间来办到~

漏斗算法和令牌桶算法相关推荐

  1. 限流算法之漏桶算法、令牌桶算法

    限流 每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引起的系统 ...

  2. 接口限流算法:漏桶算法amp;令牌桶算法

    转载自 接口限流算法:漏桶算法&令牌桶算法 背景 每一个对外提供的API接口都是需要做流量控制的,不然会导致系统直接崩溃.很简单的例子,和保险丝的原理一样,如果用电符合超载就会烧断保险丝断掉电 ...

  3. 漏桶算法与令牌桶算法

    漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络 ...

  4. 限流算法(漏桶算法、令牌桶算法)对比

    限流算法(漏桶算法.令牌桶算法) 漏桶算法: 有个桶,比如最大能进2个单位的水(请求),桶底有个洞,每个单位的水都会在桶里待3秒后漏下去. 那么这个桶就可以同时处理2个单位的水. 如果进水太多,同一时 ...

  5. Internet流量监管机制之漏桶算法和令牌桶算法

    漏桶算法和令牌桶算法都是为了限制应用无限制的向网络注入流量而设定的算法.两者看似区别不大,但是如果仔细来看,是有区别的:漏桶算法只能把应用的输出速率限定在一个固定的速度,但是令牌桶除了在把总的输出速率 ...

  6. 限流——漏桶算法和令牌桶算法的区别

    文章目录 限流 漏桶算法 令牌桶算法 漏桶算法和令牌桶算法的区别 时间窗口 时间窗口和令牌桶优缺点 限流 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存:缓存的目的是提升系统访问速度 ...

  7. 限流-漏桶算法、令牌桶算法

    1.问题 系统的某个接口访问量突然激增,没多久接口崩溃,形成连锁反应,导致整个系统崩溃. 如何应对这种情况呢? 为我们的接口加上"保险丝",预防这种突发情况,接口压力过大,造成整个 ...

  8. 面试官:连漏桶算法和令牌桶算法都不知道吗?回去多看看书吧

    锁屏面试题百日百刷,每个工作日坚持更新面试题.锁屏面试题app.小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage.已收录了每日更新 ...

  9. 高并发系统限流-漏桶算法和令牌桶算法

    参考: https://www.cnblogs.com/xuwc/p/9123078.html http://www.cnblogs.com/LBSer/p/4083131.html https:// ...

  10. 限流算法漏桶算法和令牌桶算法

    1.场景 我们知道,硬件设备或是服务器之类的通信速率或是服务器的响应速率是有限制的,当瞬时大量通信量情况下需要对速率进行限制,否则可能会出现宕机等服务无法提供的故障. 两个比较常用的算法有令牌桶算法. ...

最新文章

  1. 【No.5 类型转换导致的错误】
  2. oracle 存储过程= 1,oracle 存储过程1
  3. python接口自动化测试框架(post提交添加变量)
  4. 关于移动端上下滑动卡顿不流畅现象的解决方案
  5. 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
  6. 利用jenkins的api来完成相关工作流程的自动化
  7. leetcode 131. 分割回文串(dp+回溯)
  8. Python之lambda表达式
  9. 正则对字符串中手机号加密
  10. node + node-webkit实现电脑文件信息扫描小插件
  11. 一个插排引发的设计思想 (二) 抽象类与接口
  12. 《WF本质论》第一章OpenSesame我的实现
  13. redis-live监控安装与测试
  14. iOS_6_ToolBar+xib+红楼梦
  15. Promise中then的返回值
  16. Python爬取古诗词
  17. python游戏编程书_Python游戏编程快速上手 第4版 (斯维加特著) 中文pdf扫描版[41MB]...
  18. 计算机一级考试PPT部分几分,计算机一级考试PPT幻灯片和最后一题(就是自己输网址)各有多少分啊...
  19. rocketMq监控平台界面
  20. 摄影基础之【**相机画幅、人眼视角范围**】

热门文章

  1. WordPress收费付费下载资源源码模板
  2. 论文阅读“Robust multi-view clustering with incomplete information”
  3. 通证网:一建和二建考试的难度相差大吗?
  4. 《灵飞经5·龙生九子》第二十三章 力压须眉(下)
  5. 李岳恒:对张小龙7个思考的思考
  6. JAVA图形界面三星题之Hangman
  7. [redis]redis读取 invalid stream header: 7B226163
  8. 【密码产品篇】动态口令系统密钥体系结构(SM3、SM4)
  9. 免费ai写作软件分享,ai写作软件大合集!​
  10. 免费在线生成彩色带logo的个性二维码