常用的限流算法有漏桶算法和令牌桶算法:
漏桶算法(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(); } }
相关推荐
Guava RateLimiter中的控制都在RateLimiter及其子类中(如SmoothBursty),本处涉及到分布式环境下的同步,因此将其解耦,令牌桶模型存储于Redis中,对其同步操作的控制放置在如下控制类,其中同步控制使用到了前面...
在分布式系统中,应对高并发访问时,缓存、限流、降级是保护系统正常运行的常用方法。当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用。同时有一些业务场景,比如短信验证码,或者其它...
产环境背景1、服务商接所能提供的服务上限是400条/s2、业务调短信发送接的速度未知,QPS可能达到800/s,1200/s,或者更3、当服务商接访问频率超过4
主要介绍了RateLimit-使用guava来做接口限流代码示例,具有一定借鉴价值,需要的朋友可以参考下
基于Zookeeper和guava动态限流,自行安装zookeeper和zkui
├─Google Guava 第25讲-Guava之RateLimiter在漏桶限流算法中的使用.wmv ├─Google Guava 第26讲-Guava之RateLimiter令牌桶算法的使用.wmv ├─Google Guava 第27讲-ListenableFuture,FutureCallBack讲解.wmv ...
RateLimiter限流普及限流是对出入流量进行控制 , 防止大量流入,导致资源不足,系统不稳定。限流系统是对资源访问的控制组件 , 控制主要有两个功能 , 限流策略和熔断策略,对不同的系统有不同的熔断策略诉求,有...
限流是对某一时间窗口内的请求数进行限制,保持...常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流
基于 Redis 和 Lua 实现的分布式限流功能 1.概述 * 限流目前一般都俩种`单机限流`和`分布式限流` * 单机限流不损耗性能,一般用Guava类库的RateLimiter即可,但是单机限流每次扩容,缩容线上机器都需要重新计算阈值,...
Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法 二、 分布式限流 1、网关层(Nginx、Openresty、Spring Cloud Gateway等)流量限制 nginx限流 Spring Cloud Gateway 有两种方式来配置限流 2、中间件限...
Guava(RateLimiter) ->令牌桶/漏桶Redisson(RRateLimiter)(令牌桶)限流只是一个最基本的服务治理/服务质量体系要求流量的
spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成demo,已经...Guava RateLimiter)、分布式限流(AOP + Redis + Lua)、ElasticSearch 7.x(使用官方 Rest High Level Client)。
guava中提供了一个限流实现: RateLimiter,这个类设计的非常精巧,可以适用于我们日常业务中大多数流控的场景,但鉴于使用场景的多样性,使用时也需要相当小心。 前面已经使用两篇简单的文章进行了预热。 这次不同。...
`spring boot demo` 是一个用来深度学习并实战 `spring boot` 的项目,目前总共包含 **`63`** 个集成demo,已经完成 **`51`** 个。...Guava RateLimiter`)、ElasticSearch 7.x(`使用官方 Rest High Level Client`)。