聊聊leaky bucket算法的实现
原
荐
字数 441
阅读 4
收藏 0
21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>>
序
本文主要研究一下leaky bucket算法的实现
leaky bucket算法
- bucket以一定速率滴水,相当于增加桶容量
- bucket有其容量限制,请求过来时bucket满,则直接被抛弃
- 请求到来时,如果bucket不满,则放入bucket,相当于放行
简单实现
public class LeakyBucket { private final long capacity; private final long leaksIntervalInMillis; private double used; private long lastLeakTimestamp; public LeakyBucket(long capacity, long leaksIntervalInMillis) { this.capacity = capacity; this.leaksIntervalInMillis = leaksIntervalInMillis; this.used = 0; this.lastLeakTimestamp = System.currentTimeMillis(); } synchronized public boolean tryConsume(int drop) { leak(); if (used + drop > capacity) { return false; } used = used + drop; return true; } private void leak() { long currentTimeMillis = System.currentTimeMillis(); if (currentTimeMillis > lastLeakTimestamp) { long millisSinceLastLeak = currentTimeMillis - lastLeakTimestamp; long leaks = millisSinceLastLeak / leaksIntervalInMillis; if(leaks > 0){ if(used <= leaks){ used = 0; }else{ used -= (int)leaks; } this.lastLeakTimestamp = currentTimeMillis; } } } }
- 这个实现设计了lastLeakTimestamp字段,用于计算时间差,以及在这个时间段内需要漏水的数量
- 每次tryConsume的时候,方法内部首先调用leak,根据设定的速度以及时间差计算这个时间段需要漏水的数量,更新桶的当前使用量以及lastLeakTimestamp
- 之后限流判断,就是判断used与请求的drop是否会超过桶容量,超出则限流,否则放入桶中,更新桶容量
小结
- leaky bucket与token bucket算法相反,前者是漏水,后者是添加token
- leaky bucket由于是漏水算法,所以不能像token bucket添加token那种可以累积,因此leaky bucket不能支持burst突发流量
doc
© 著作权归作者所有
共有人打赏支持
相关文章 最新文章
序 本文主要研究一下token bucket算法的实现 限流算法概述 主要有如下几种: 基于信号量Semaphore 只有数量维度,没有时间维度 基于fixed window 带上了时间维度,不过在两个窗口的临界点容易...
go4it
前天
0
0
WIKI: http://wiki.nginx.org/HttpLimitReqModule 漏桶原理(leaky bucket): http://en.wikipedia.org/wiki/Leakybucket 实例: ?...
zbill
06/29
0
0
emqttd 0.13.0-beta 版本正式发布。支持基于 Token Bucket/Leaky Bucket 算法的速率控制(Rate Limiting)。升级 esockd 库到3.0版本,支持参数化的Socke连接模块。改进MQTT TCP连接数据收发,...
emqtt
2015/11/09
1K
0
Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意思?漏桶算法和令牌桶算法究竟有什么不同?本文将带你一探究竟。我们会通过一些简单的示例展示Nginx限速模块是如何工作...
a小鼠标
2017/12/25
0
0
过载保护算法浅析 ShareCore2014-06-21538 阅读 算法 何为过载保护?所谓“过载”,即需求超过了负载能力;而“保护”则是指当“过载”发生了,采取必要的措施保护自己不受“伤害”。在计算机...
ShareCore
2014/06/21
0
0
没有更多内容
加载失败,请刷新页面
加载更多Non Thread Safe(nts)是指非线程安全,Thread Safe(ts)则是指线程安全。 nts和ts是多线程场景下才有的概念。在多线程场景下才有意义。 安全和非安全实质上指的是共享变量在一致性上是否会...
karma123
25分钟前
1
0
文章来自:Request —— 让 Node.js http请求变得超简单 先前一直比较关注前端的东西,对后端了解较少。不过一直对Node.js比较感兴趣,去年12月还去参加了阿里的CNODE交流聚会。 以后希望通过...
spinachgit
25分钟前
1
0
没有更多内容
加载失败,请刷新页面
加载更多以上所述就是小编给大家介绍的《原 荐 聊聊leaky bucket算法的实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 聊聊算法之递归
- 聊聊缓存淘汰算法:LRU 实现原理
- 聊聊 memcached 1.4 的 LRU 算法
- 聊聊memcached1.4的LRU算法
- 聊聊算法的时间复杂度与空间复杂度
- 大白话聊聊面试中常问的一致性 Hash 算法!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Docker开发指南
[英] Adrian Mouat / 黄彦邦 / 人民邮电出版社 / 2017-4 / 79.00元
Docker容器轻量和可移植的特性尤其适用于动态和分布式的环境,它的兴起给软件开发流程带来了一场革命。本书对Docker进行了全面讲解,包括开发、生产以至维护的整个软件生命周期,并对其中可能出现的一些问题进行了探讨,如软件版本差异、开发环境与生产环境的差异、系统安全问题,等等。一起来看看 《Docker开发指南》 这本书的介绍吧!