美文网首页
应用限流-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

    为什么要限流 当系统突然涌入大量的请求,访问量剧增,最典型的应该就是秒杀业务了,这样就会出现大量并发;我们在开发高...

  • 高并发环境下的限流策略

    本文将从以下几个方面分析限流策略: 什么是限流限流算法限流算法的应用 什么是限流 在开发高并发系统时,有很多手段来...

  • 聊聊高并发系统之限流特技-2

    摘要:上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流;本篇将介绍接入层限流实现。 接入层...

  • 聊聊高并发系统限流特技-2

    转载来自开涛的聊聊高并发系统限流特技-2 上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流...

  • 2020-04-28

    2020-04-27 菜菜_d868 字数 230 · 阅读 0 2020-04-27 23:55 2020-04...

  • 分布式限流

    前言 本文接着上文应用限流进行讨论。 之前谈到的限流方案只能针对于单个 JVM 有效,也就是单机应用。而对于现在普...

  • 分布式限流的方案

    前言 本文接着上文应用限流进行讨论。 之前谈到的限流方案只能针对于单个 JVM 有效,也就是单机应用。而对于现在普...

  • 读物-浮生六记

    作者:沈复 阅读时长:2020-04-27 至2020-04-29 一:打卡记录: 2020-04-27 余忆童稚...

  • Java应用限流

    在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流:缓存:缓存的目的是提升系统访问速度和增大系统处理容量...

  • 应用级限流

    上一篇 <<<自定义封装限流算法[https://www.jianshu.com/p/e277e4cfe8aa]下...

网友评论

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

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