当前位置: 首页 > 科技 > 人工智能 > Guava令牌桶RateLimiter限流详解_腾讯新闻

Guava令牌桶RateLimiter限流详解_腾讯新闻

天乐
2020-09-06 22:35:20 第一视角

说到限流,首先想到的就是信号量Semaphore,信号量在控制任务执行数量时用的比较多。今天给大家谈谈Google的令牌桶RateLimiter限流,Google出品,必属精品。

漏桶算法

如下图一样,漏桶非常均匀的控制流量,如果漏桶满了,后续的水全部会溢出,用它来作为应用层限流是不合适的。如果有大量的用户访问,会导致后面的用户全部拒绝服务,给人的感觉就像服务挂了一样。

令牌桶算法

令牌桶算法恰好相反,桶里放的不是请求,而是令牌。当请求到来时,需要从桶中拿到一个令牌才能获取服务,否则该请求会被拒绝。由于令牌桶是动态变化的,令牌消耗完了会继续往里放,因此就不存在漏桶那样后面的用户拿不到令牌的情况,是一个比较平滑的过程。

代码示例

示例代码中调用RateLimiter的create方法来创建实例,每秒生成5个令牌。实际是调用的SmoothBuisty平滑突发模式创建的实例,SmoothBuisty类里面有一个变量maxBurstSeconds,它的含义是在RateLimiter未使用时,最多存储几秒的令牌。目前这个值不支持修改,默认是1,也就是说,令牌桶最多只能存储1秒的令牌。

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部