你的位置:首页 > Java教程

[Java教程]接口限流


一、什么是限流

使资源以限定的速率被使用。比如:地铁限流,高峰时段限制单位时间内的客流量;电路中的限流器,可以保证电路不超过额定的电流;网站限流,抢购,瞬间的高峰对于后台来说肯定是需要一个限流处理为可接受的速率进行处理。
 

二、为什么要限流

比如:地铁不限流量,挤爆了;电路不限流,灯爆了;网站不限流,撑爆了。
 

三、限流的几种方式

常用的限流算法有两种:漏桶算法和令牌桶算法。
漏桶算法:桶中水以限定的速度流出来。缺点:水满溢出、突发请求不能尽快处理,被调整为固定速率。
令牌桶算法:系统会以一个限定的速度往桶里放入令牌,请求到达先获取令牌,有令牌则处理,无则拒绝。
 

四、简单使用

Guava工具类RateLimiter:RateLimiter会按照设定的频率往桶里扔令牌,请求拿到令牌才能执行。比如:设置100,就会每秒已100/1的速率(可能会有延迟)往桶里扔100个令牌。请求许可数acquire(1)和acquire(100),只要令牌数量足够,其结果相同,但会影响下一个请求的限制。
 
参考:
http://ifeve.com/guava-ratelimiter/
http://www.cnblogs.com/LBSer/p/4083131.html
http://colobu.com/2014/11/13/rate-limiting/