`
raymond.chen
  • 浏览: 1419739 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Guava的RateLimiter类实现限流功能

 
阅读更多

常用的限流算法有漏桶算法和令牌桶算法:

        漏桶算法(Leaky Bucket):请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。

        令牌桶算法(Token Bucket):以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务。

 

Guava的RateLimiter类基于令牌桶算法实现流量限制。获取令牌的方式有两种:阻塞等待令牌或者取不到立即返回失败。

 

Guava有两种限流模式,一种为稳定模式(SmoothBursty:令牌生成速度恒定),一种为渐进模式(SmoothWarmingUp:令牌生成速度缓慢提升直到维持在一个稳定值)

 

public class RateLimiterTest {
    private static int threadCount = 10; //线程数
    
	public static void main(String[] args) {
		ExecutorService executorService = Executors.newCachedThreadPool();
		
		//限速器:速率是每秒生成3个许可
		RateLimiter rateLimiter = RateLimiter.create(3);
		
		for(int i=0; i<threadCount; i++){
			executorService.submit(() -> {
				//返回等待时间
				double d = rateLimiter.acquire(); //获取一个许可,可能要等待
				System.out.println(Thread.currentThread().getName() + ": " + d);
				
				//非堵塞地尝试获取许可,如果获取到则返回true,否则返回false
//				boolean b = rateLimiter.tryAcquire(); 
			});
		}
		
		executorService.shutdown();
	}
}

 

分享到:
评论

相关推荐

    基于RateLimiter和Lua脚本限量控制实现分布式限流.docx

    Guava RateLimiter中的控制都在RateLimiter及其子类中(如SmoothBursty),本处涉及到分布式环境下的同步,因此将其解耦,令牌桶模型存储于Redis中,对其同步操作的控制放置在如下控制类,其中同步控制使用到了前面...

    令牌桶算法,漏桶算法,与计数器算法限流算法与Guava RateLimiter源码解析.docx

    在分布式系统中,应对高并发访问时,缓存、限流、降级是保护系统正常运行的常用方法。当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用。同时有一些业务场景,比如短信验证码,或者其它...

    分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket1

    产环境背景1、服务商接所能提供的服务上限是400条/s2、业务调短信发送接的速度未知,QPS可能达到800/s,1200/s,或者更3、当服务商接访问频率超过4

    RateLimit-使用guava来做接口限流代码示例

    主要介绍了RateLimit-使用guava来做接口限流代码示例,具有一定借鉴价值,需要的朋友可以参考下

    基于Zookeeper和guava动态限流 源码

    基于Zookeeper和guava动态限流,自行安装zookeeper和zkui

    不加密Google Guava视频教程.txt

    ├─Google Guava 第25讲-Guava之RateLimiter在漏桶限流算法中的使用.wmv ├─Google Guava 第26讲-Guava之RateLimiter令牌桶算法的使用.wmv ├─Google Guava 第27讲-ListenableFuture,FutureCallBack讲解.wmv ...

    rate-limiter:限制瞬时发并发数限制某个接口的时间窗口最大请求数 限流实现

    RateLimiter限流普及限流是对出入流量进行控制 , 防止大量流入,导致资源不足,系统不稳定。限流系统是对资源访问的控制组件 , 控制主要有两个功能 , 限流策略和熔断策略,对不同的系统有不同的熔断策略诉求,有...

    java实现令牌桶限流

    限流是对某一时间窗口内的请求数进行限制,保持...常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流

    redis-lua-limiter:Redis + Lua 分布式限流

    基于 Redis 和 Lua 实现的分布式限流功能 1.概述 * 限流目前一般都俩种`单机限流`和`分布式限流` * 单机限流不损耗性能,一般用Guava类库的RateLimiter即可,但是单机限流每次扩容,缩容线上机器都需要重新计算阈值,...

    【java面试系列】服务的限流.pdf

    Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法 二、 分布式限流 1、网关层(Nginx、Openresty、Spring Cloud Gateway等)流量限制 nginx限流 Spring Cloud Gateway 有两种方式来配置限流 2、中间件限...

    03-05-17-Alibaba Sentinel限流的基本原理分析1

    Guava(RateLimiter) -&gt;令牌桶/漏桶Redisson(RRateLimiter)(令牌桶)限流只是一个最基本的服务治理/服务质量体系要求流量的

    spring-boot-demo_xkcoding.tar.gz

    spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成demo,已经...Guava RateLimiter)、分布式限流(AOP + Redis + Lua)、ElasticSearch 7.x(使用官方 Rest High Level Client)。

    积分管理系统java源码-example-ratelimit:示例速率限制

    guava中提供了一个限流实现: RateLimiter,这个类设计的非常精巧,可以适用于我们日常业务中大多数流控的场景,但鉴于使用场景的多样性,使用时也需要相当小心。 前面已经使用两篇简单的文章进行了预热。 这次不同。...

    spring boot集成demo大全.zip

    `spring boot demo` 是一个用来深度学习并实战 `spring boot` 的项目,目前总共包含 **`63`** 个集成demo,已经完成 **`51`** 个。...Guava RateLimiter`)、ElasticSearch 7.x(`使用官方 Rest High Level Client`)。

Global site tag (gtag.js) - Google Analytics