限流神器之-Guava RateLimiter 实战】的更多相关文章

前段时间,项目中需要对某些访问量较高的路径进行访问并发数控制,以及有些功能,比如Excel导出下载功能,数据量很大的情况下,用户不断的点击下载按钮,重复请求数据库,导致线上数据库挂掉.于是在这样的情况下,这个限流组件应运而生,也许有人会提及SpringCloud zuul,其实它的现也是借助了RateLimiter.由于项目使用的是SpringBoot,也就没往外思考.反正最后功能实现了就行,毕竟殊途同归啊.本文只是用代码来快速的帮你理清整个限流的流程,至于RateLimiter中具体限流算法以…
在分布式系统中,应对高并发访问时,缓存.限流.降级是保护系统正常运行的常用方法.当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用.同时有一些业务场景,比如短信验证码,或者其它第三方API调用,也需要提供必要的访问限制支持.还有一些资源消耗过大的请求,比如数据导出等(参考 记一次线上Java服务CPU 100%处理过程 ),也有限制访问频率的需求. 常见的限流算法有令牌桶算法,漏桶算法,与计数器算法.本文主要对三个算法的基本原理及Google Guava包中令牌桶算法的实…
1. 令牌桶限流算法 令牌桶会以一个恒定的速率向固定容量大小桶中放入令牌,当有浏览来时取走一个或者多个令牌,当发生高并发情况下拿到令牌的执行业务逻辑,没有获取到令牌的就会丢弃获取服务降级处理,提示一个友好的错误信息给用户. 2. RateLimiter简单实现 maven依赖   <!-- guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava<…
概述 书接上回:你来说说什么是限流? ,限流的整体概述中,描述了 限流是什么,限流方式和限流的实现.在文章尾部的 分布式限流,没有做过多的介绍,选择了放到这篇文章中.给大伙细细讲解一下 Sentinel 附带最权威的官方wiki: <Alibaba-Sentinel,新手指南> 本篇文章源码地址: https://github.com/jaycekon/SpringBoot Sentinel 是啥? 分布式系统的流量防卫兵 再引用一下之前我画的图: 流量防卫兵 它具备了哪些能力? Sentin…
1.前言 这是<spring Cloud 进阶>专栏的第五篇文章,这篇文章介绍一下阿里开源的流量防卫兵Sentinel,一款非常优秀的开源项目,经过近10年的双十一的考验,非常成熟的一款产品.往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得了? 阿里面试这样问:Nacos.Apollo.Config配置中心如何选型?这10个维度告诉你! 阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你! 文章目录如下: 2.什么是se…
上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍.RateLimiter通过线程锁控制同步,只适用于单机应用,在分布式环境下,虽然有像阿里Sentinel的限流开源框架,但对于一些小型应用来说未免过重,但限流的需求在小型项目中也是存在的,比如获取手机验证码的控制,对资源消耗较大操作的访问频率控制等.本文介绍最近写的一个基于RateLimiter,适用于分布式环境下的限流实现,并使用sprin…
超详细的Guava RateLimiter限流原理解析  mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是缓存和降级.限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等.  限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形.  常用的限流方式和场景有:限制总并发数(比如数据库连接…
一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水.当请求过多时,水直接溢出.可以看出,漏桶算法可以强制限制数据的传输速度. 2.令牌桶算法 令牌桶算法的原理是系统以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务.这种算法可以应对突发程度的请求,因此比漏桶算法好. 在 Wikipedia 上,令牌桶算法是这么描述的: 每秒会有 r…
RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency> 限流: 每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须…
并发编程的三剑客 在开发高并发系统时有三剑客:缓存.降级和限流. 缓存 缓存的目的是提升系统访问速度和增大系统处理容量. 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开. 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务.排队或等待.降级等处理. 限流的思想 溢出思想: 就是用一个固定大小的队列.比如设置限流为5qps,1s可以接受5个请求:那我们就造一个大小为5的队列,如果队…