java限流

背景:高并发

PV:PageView综合浏览量;

QPS:每秒请求查询数量

响应时间:服务器响应时间

吞吐量:单位时间内处理请求的数量

高并发:

        1.物理角度(扩容)

         扩容是目前效果最明显的增加并发量技巧之一

 

 (水平扩容)单体数量的增加,伴随着数据库的访问限制成为了瓶颈

-->服务的拆分

        ​​​​​

 2.提高接口并发能力(提高接口响应速度,缩短接口的响应时间)        

  •         缓存(把数据存入缓存之中,提高接口响应速度)
  •         动静分离(静态资源放到Nginx中,Nginx可以当做静态web资源服务器)1.链路短2.不占用网络带宽,提高并发量
  •         服务降级(业务的策略降级,返回次一级的,将系统资源留给核心业务)

 3.提高系统可用性--限流

  •         可用性:接口在一年内能够正常对外提供服务的时间比例

      <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>28.2-android</version>
        </dependency>

 网关redis==>1.导入依赖

                       2.配置文件配置

1.查询库存不足的时候redis存入一个标记

2.网关层查询一下redis标记(业务限流)

 3.流量削峰

 3.1验证码

        防止恶意请求

3.2令牌桶算法  

 通过令牌发放数量==接收请求数量

 接收请求=滴水

处理=漏水

桶满了=拒绝请求

令牌桶:处理突发请求,处理能力根据令牌数量决定 √

漏桶算法:恒定的处理速度

对比:

 互联网领域通常以突发情况较多,令牌桶算法较多

Google提供的Guava工具包的RateLimiter进行限流

队列泄洪

利用线程池来队列泄洪 (限流)

controller包下-,一个木桶,在需要令牌的请求里,acquire一下

(流量限流+业务泄洪)

1.导入guava包下的RateLimiter

赋值

2.使用(总体限流)

当没有令牌的时候睡眠1分钟/100的时间,唤醒后刚好尝试一个令牌

3.固定线程池

 4.100个线程表示最多同时一百个线程同时执行

 二者配合,因为令牌是一秒一百个,而处理速度可能短于令牌发放时间;

------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值