聊聊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 算法!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
AJAX企业级开发
Davec Johnson、Alexeic White、Andrec Charland / 张祖良、荣浩、高冰 / 人民邮电出版社 / 2008 / 49.00元
本书首先解释了AJAX 为什么在大规模的开发中能有如此广阔的应用前景,接着系统地介绍了当前重要的AJAX 技术和组件。你将看到把数据表、Web 窗体、图表、搜索和过滤连接在一起用于构建AJAX应用程序的框架开发的整个过程;在此基础上,本书给出了已经过证实的AJAX 架构模式,以及来源于实际的.NET 和Java AJAX 应用程序的案例研究。一起来看看 《AJAX企业级开发》 这本书的介绍吧!