Guava——平滑限流

本文介绍了Guava库中RateLimiter的使用,通过对比漏桶算法和令牌桶算法,阐述了平滑限流的概念。Guava RateLimiter提供了平滑突发限流和预热限流两种方式,适用于不同场景的限流需求。
摘要由CSDN通过智能技术生成

1.常用限流方法

对于一个应用系统来说一定会有极限并发/请求数,即总有一个TPS/QPS阀值,如果超了阀值则系统就会不响应用户请求或响应的非常慢,因此我们最好进行过载保护,防止大量请求涌入击垮系统。

常见的限流方法有:

  • 容器限流

    常见的web容器其实也具备限流的功能。

    以Tomcat容器为例,其Connector 其中一种配置有如下几个参数:

    acceptCount:如果Tomcat的线程都忙于响应,新来的连接会进入队列排队,如果超出排队大小,则拒绝连接;

    maxConnections: 瞬时最大连接数,超出的会排队等待;

    maxThreads:Tomcat能启动用来处理请求的最大线程数,如果请求处理量一直远远大于最大线程数则可能会僵死。

  • 限流总资源数

    如果有的资源是稀缺资源(如数据库连接、线程),而且可能有多个系统都会去使用它,那么需要限制应用;可以使用池化技术来限制总资源数:连接池、线程池。比如分配给每个应用的数据库连接是100,那么本应用最多可以使用100个资源,超出了可以等待或者抛异常。

  • 限流某个接口的总并发/请求数

    如果接口可能会有突发访问情况,但又担心访问量太大造成崩溃,如抢购业务;这个时候就需要限制这个接口的总并发请求数了;因为粒度比较细,可以为每个接口都设置相应的阀值。可以使用Java中的AtomicLong进行限流:

    try {
    if(atomic.incrementAndGet() > 限流数) {
    //拒绝请求
     
    }
    /

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值