java高并发令牌桶实现_高并发之限流令牌桶和漏桶算法(一)

本文介绍了Java中实现高并发限流的令牌桶算法,详细阐述了算法的工作原理,包括令牌的生成与消耗,以及在令牌不足时的处理策略。通过伪代码展示了如何设计一个简单的令牌桶类,并分析了该算法如何防止瞬间大量请求导致系统崩溃,从而确保服务的稳定性和可扩展性。
摘要由CSDN通过智能技术生成

令牌桶算法图例

9d480ba4981725db434f48d2cebf7779.png

a. 按特定的速率向令牌桶投放令牌

b. 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;

c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;

d. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。

注意:当令牌不足时,这里报文:

1、可以被丢弃

2、可以排放在队列中以便当令牌桶中累积了足够多的令牌时再传输

3、可以继续发送,但需要做特殊标记,网络过载的时候将这些特殊标记的包丢弃

伪代码:

public classTokenBucketDemo {public long timeStamp =getNowTime();public int capacity; //桶的容量

public int rate; //令牌放入速度

public int tokens; //当前令牌数量

public booleangrant() {long now =getNowTime();//先添加令牌//min(桶的容量,当前令牌 + 上次请求获取令牌时间到当前时间内

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值