美文网首页
应用限流-2020-04-27

应用限流-2020-04-27

作者: 上善无虞 | 来源:发表于2020-04-27 18:43 被阅读0次

    为什么要限流

    当系统突然涌入大量的请求,访问量剧增,最典型的应该就是秒杀业务了,这样就会出现大量并发;我们在开发高并发系统时,常见的处理方式有三种:降级、熔断、限流。

    限流的方式

    常见的限流方式:限制总并发数,限制瞬时并发数、限制时间窗口内的平均速率等

    限流的四种算法

    计数器法

    算法介绍: 一定时间范围内允许通过的请求数量。
    例如:每分钟100个请求,每请求一次,计数器加一,一分钟之内超过100之后的请求,返回系统繁忙,请稍后再试
    缺点: 临界问题,如果在59秒的时候,一下子发起100次请求,又在下一分钟的第一秒也发起100次请求,这就意味着两秒钟,服务器接收处理了200个请求,而且下一分钟第一秒之后的59秒,如果再有请求进来,服务器,只能“系统繁忙请稍后重试了”。

    计数器算法升级版【滑动窗口算法】

    算法介绍: 为了规避临界问题,在计数器算法的基础上进行了升级,采用滑动窗口的方式,就是将每一个周期分割为多个窗口,当一个周期结束时,只将整个周期的开始时刻移动一个窗口的位置,这样就可以防止上面那种临界点瞬间大流量的冲击。
    例如: 我们对一分钟【1-60】的周期切为6个窗口,所以时间到51秒【1-60】的时候,我们访问第6个窗口,这个时候我们还需要将窗口往后滑动一格,这样我们的计数周期就成了【11-70】,这样就避免临界问题

    漏桶算法

    算法介绍: 顾名思义,根据我们系统要求的并发数,让请求从桶的漏洞中发送给我们系统,桶的大小是固定的,水流入速度过快,桶满之后桶之外的水,就只能“系统繁忙请稍后重试了”,桶之内的水会安装漏洞大小,以恒定的速度流。无临界问题

    令牌桶算法

    算法介绍: 每一个请求,执行的前提需要从令牌桶中拿到令牌即可执行,令牌是以恒定的速度放入令牌桶的,桶满之后的再放入的令牌会直接丢弃掉;这也就意味着,如果一段时间内没有请求进来,令牌桶满了,大量的请求再次进来,都可执行,令牌桶算法,支持瞬时大量请求,但是,在此大量请求,会因为令牌桶无令牌而提示“系统繁忙请稍后重试了”,从而规避了临界问题
    漏桶算法和令牌桶算法比较:虽然漏桶里漏出来的水是可执行的请求,令牌桶里拿出来的令牌也是请求执行的通行证;但是,漏桶里的流入的水是请求,令牌桶里的放入的令牌类似于计数器。令牌桶移除令牌默认是不考虑时间的,如果令牌移除考虑延迟时间的话,那请求又是以恒定的速率执行,就类似于漏桶算法了。

    相关文章

      网友评论

          本文标题:应用限流-2020-04-27

          本文链接:https://www.haomeiwen.com/subject/vsruwhtx.html