【Guava】RateLimiter类】的更多相关文章

Guava官方文档-RateLimiter类 原文链接 作者:Dimitris Andreou  译者:魏嘉鹏 校对:方腾飞 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证.一旦获取到许可证,不需要再释放许可证. 校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过…
超详细的Guava RateLimiter限流原理解析  mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是缓存和降级.限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等.  限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形.  常用的限流方式和场景有:限制总并发数(比如数据库连接…
Guava中的RateLimiter可以限制单进程中某个方法的速率,本文主要介绍如何使用,实现原理请参考文档:推荐:超详细的Guava RateLimiter限流原理解析和推荐:RateLimiter 源码分析(Guava 和 Sentinel 实现). 1 基于spring-mvc的controller测试限流 完整代码可参考:https://github.com/sxpujs/spring-cloud-examples/tree/master/rest-service 1.1 增加Maven…
在分布式系统中,应对高并发访问时,缓存.限流.降级是保护系统正常运行的常用方法.当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用.同时有一些业务场景,比如短信验证码,或者其它第三方API调用,也需要提供必要的访问限制支持.还有一些资源消耗过大的请求,比如数据导出等(参考 记一次线上Java服务CPU 100%处理过程 ),也有限制访问频率的需求. 常见的限流算法有令牌桶算法,漏桶算法,与计数器算法.本文主要对三个算法的基本原理及Google Guava包中令牌桶算法的实…
前言 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存: 缓存的目的是提升系统访问速度和增大系统处理容量 降级: 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开 限流: 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务.排队或等待.降级等处理 常见限流算法 漏桶算法 漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶…
Java 开发的同学应该都使用或者听说过 Google 提供的 Guava 工具包.日常使用最多的肯定是集合相关的工具类,还有 Guava cache,除了这些之外 Guava 还提供了很多有用的功能,鉴于日常想用的时候找不到,这里就梳理一下 Guava 中那些好用的工具类,想优化代码的时候不妨过来看看! 集合 普通集合 List<String> list = Lists.newArrayList(); Set<String> set = Sets.newHashSet(); Ma…
前言 平时我们都会封装一些处理缓存或其他的小工具.但每个人都封装一次,重复造轮子,有点费时间.有没有一些好的工具库推荐-guava.guava是谷歌基于java封装好的开源库,它的性能.实用性,比我们自己造的轮子更好,毕竟谷歌出品,下面介绍下几个常用的guava工具类 LoadingCache(本地缓存) Multimap 和 Multiset BiMap Table(表) Sets和Maps(交并差) EventBus(事件) StopWatch(秒表) Files(文件操作) RateLim…
并发编程的三剑客 在开发高并发系统时有三剑客:缓存.降级和限流. 缓存 缓存的目的是提升系统访问速度和增大系统处理容量. 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开. 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务.排队或等待.降级等处理. 限流的思想 溢出思想: 就是用一个固定大小的队列.比如设置限流为5qps,1s可以接受5个请求:那我们就造一个大小为5的队列,如果队…
Guava包中限流实现分析 RateLimiter 之前的文章中已经介绍了常用的限流算法,而google在Java领域中使用Guava包中的限流工具进行服务限流. 回顾使用案例 Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法实现流量限制,使用十分方便. @Test public void testSample() { RateLimiter rateLimiter = RateLimiter.create(500) } 以上示例,创建一个RateLim…
前段时间,项目中需要对某些访问量较高的路径进行访问并发数控制,以及有些功能,比如Excel导出下载功能,数据量很大的情况下,用户不断的点击下载按钮,重复请求数据库,导致线上数据库挂掉.于是在这样的情况下,这个限流组件应运而生,也许有人会提及SpringCloud zuul,其实它的现也是借助了RateLimiter.由于项目使用的是SpringBoot,也就没往外思考.反正最后功能实现了就行,毕竟殊途同归啊.本文只是用代码来快速的帮你理清整个限流的流程,至于RateLimiter中具体限流算法以…
2019独角兽企业重金招聘Python工程师标准>>> 限流 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦并发访问/请求达到限制速率或者超过其承受范围时候则可以拒绝服务.排队或引流. 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 漏桶算法-Leaky Bucket http://en.wikipedia.org/wiki/Leaky_bucket 根据wiki上的介绍,Leaky Bucket实际上有两种不同的含义. 1)as a met…
转载自并发编程网 – ifeve.com RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证.一旦获取到许可证,不需要再释放许可证. 校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个…
一.简介 Guava提供的RateLimiter可以限制物理或逻辑资源的被访问速率.RateLimit二的原理类似与令牌桶,它主要由许可发出的速率来定义,如果没有额外的配置,许可证将按每秒许可证规定的固定速度分配,许可将被平滑地分发,若请求超过permitsPerSecond则RateLimiter按照每秒1/permitsPerSecond的速率释放许可. 使用RateLimiter需要引入的jar包: <!-- Guava是一种基于开源的Java库,谷歌很多项目使用它的很多核心库.这个库是为…
一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava-libraries/中可以下载,其中在老外的 http://www.javacodegeeks.com/2012/12/guava-splitter-vs-stringutils.html 这篇文章中进行了stringutil的对比: 首先看两者的用法: // Apache StringUtils…
原文链接:http://blog.csdn.net/mnmlist/article/details/53425865 Objects类 Objects类有几个比较不错的方法,toString.hashCode和equals方法 测试类 @Data class Person{ private String name; private int sex; private int age; public Person(String name,int sex,int age) { this.name = …
概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如: 集合 [collections] 缓存 [caching] 原生类型支持 [primitive…
目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.Range类 1.定义 2.生产区间的方法 3.使用 六.Multiset接口 1.定义 2.使用 七.Bimap接口 1.定义 2.使用 八.Bimap接口 1.定义 2.使用 九.LoadingCache 1.定义 十.Multimap 1.定义 2.使用 一.介绍 1.常用点:集合 [colle…
一.guava cache 介绍 1.介绍 guava cache是Google guava中提供的一款轻量级的本地缓存组件,其特点是简单.轻便.完善.扩展性强,内存管理机制也相对完善. 2.使用缓存的优点    1.减少了网络调用的开销 2.减少了数据请求的序列化和反序列化 二.guava cache分类 guava cache 提供了2种类型: Cache:创建1个缓存. LoadingCache:它能够通过CacheLoader自发的加载缓存,当获取缓存中数据不存在时,会通过CacheLo…
Splitter可以对字符串进行分割,在分割时的方式有2种, 1.按字符/字符串分割 2.按正则进行分割 Splitter在分割完成时可以转换成list和map 一.按字符进行分割 //1.用指定字符切分字符串,并转换成list String s1 = "hello|hihi"; String s2 = "hello|haha|||"; Splitter.on("|").splitToList(s1).forEach(System.out::pr…
joiner主要用于对字符串的连接,也可用于对map中key value的连接 public class JoinerTest { private static final List<String> list1 = Arrays.asList ("google","guava","java","scala","kafka"); private static final List<Strin…
Splitter 提供了各种方法来处理分割操作字符串,对象等. 类声明 以下是com.google.common.base.Splitter类的声明: @GwtCompatible(emulated=true) public final class Splitter    extends Object 点击链接查看详细内容…
public class StringTest { public static void main(String[] args) { //判断是null还是空字符串 boolean b1 = Strings.isNullOrEmpty(null); //判断是null还是空字符串 boolean b2 = Strings.isNullOrEmpty(""); //null转换成空 String s1 = Strings.nullToEmpty(null); //null转换成空 Str…
限流==保险丝策略,可借助框架如spring cloud中Hystrix组件实现.今天介绍使用guava RateLimiter 类实现接口限流. 比如12306抢票: https://blog.csdn.net/Daybreak1209/article/details/82349244 luna脚本:…
业务背景介绍 对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧. 在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“您有幸获得唱读卡,赶快戳链接…”.这种类型的短信是属于推广性质的短信.为什么我要说这个呢?听我慢慢道来. 一般而言,对于推广营销类短信,它们针对某一群体(譬如注册会员)进行定点推送,有时这个群体的成员量比较大,譬如京东的会员,可以达到千万级别.因此相应的,发送推广短信的量也会增大.然而,要完成这些短…
作者javadoop,资深Java工程师.本文已获作者授权发布. 原文链接https://www.javadoop.com/post/rate-limiter 本文主要介绍关于流控的两部分内容. 第一部分介绍 Guava 中 RateLimiter 的源码,包括它的两种模式,目前网上大部分文章只分析简单的 SmoothBursty 模式,而没有分析带有预热的 SmoothWarmingUp. 第二部分介绍 Sentinel 中流控的实现,本文不要求读者了解 Sentinel,这部分内容和 Sen…
RateLimiter类似于JDK的信号量Semphore,他用来限制对资源并发访问的线程数. RateLimiter limiter = RateLimiter.create(4.0); //每秒不超过4个任务被提交 limiter.acquire();  //请求RateLimiter, 超过permits会被阻塞 executor.submit(runnable); //提交任务也可以以非阻塞的形式来使用: If(limiter.tryAcquire()){ //未请求到limiter则立…
guava限流工具使用 非常详细的一篇使用博客:https://www.cnblogs.com/yeyinfu/p/7316972.html 1,原理:Guava RateLimiter基于令牌桶算法,我们只需要告诉RateLimiter系统限制的QPS是多少,那么RateLimiter将以这个速度往桶里面放入令牌,然后请求的时候,通过tryAcquire()方法向RateLimiter获取许可(令牌). 2,测试代码: /** * @Auther: wangbao02 * @Date: 201…
原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.Guava沿着这些路线提供了更多的工具方法:适用于所有集合的静态方法.这是Guava最流行和成熟的部分之一. 我们用相对直观的方式把工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和jav…
转载的,有问题请联系我 原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.Guava沿着这些路线提供了更多的工具方法:适用于所有集合的静态方法.这是Guava最流行和成熟的部分之一. 我们用相对直观的方式把工具类与特定集合接口的对应关系归纳如下: 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collect…
apache-commons工具类:https://www.iteye.com/blog/zhoualine-1770014 guava工具类:https://blog.csdn.net/Dream_Weave/article/details/86575447…