美文网首页
高可用实践-限流算法

高可用实践-限流算法

作者: 飞_侠 | 来源:发表于2020-02-23 15:25 被阅读0次

限流算法

常见的限流算法有计数器算法、漏桶算法和令牌桶算法。

计数器法

计数器算法“简单粗暴”。该算法会维护一个counter,规定在单位时间内counter的大小不能超过最大值,每隔固定时间就将counter的值置零。如果这个counter大于设定的阈值了,那么系统就开始拒绝请求以保护系统的负载。

漏桶算法

在漏桶算法中,我们会维护一个固定容量的桶,这个桶会按照指定的速度漏水。如果这个桶空了,那么就停止漏水;请求到达系统就类似于将水加入桶中,这个速度可以是匀速的也可以是瞬间的,如果这个桶满了,就会忽略后面来的请求,直到这个桶可以存放多余的水。漏桶算法的好处是可以将系统的处理能力维持在一个比较平稳的水平,缺点是在瞬间流量过来时,会拒绝后续的请求流量。一般来说,代码中会使用一个队列实现“漏斗”的效果,当请求过多时,队列中的请求就开始积压,当队列满了之后,系统就会开始拒绝请求。

如图下图所示,把请求比作水,水来了都先放进桶里,并以限定的速度出水,当水来得过猛而出水不够快时就导致水直接溢出,即拒绝服务。

令牌桶算法

令牌桶算法和漏桶算法效果一样,但思路相反:随着时间的流逝,系统会按照指定速度往桶里添加token,每来一个新请求,就从桶里拿走一个token,如果没有token可拿就拒绝服务。这种算法的好处是便于控制系统的处理速度,甚至可以通过统计信息实时优化令牌桶的大小。下图清楚地说明了这个算法。

从理论上来说,令牌桶算法和漏桶算法的不同之处在于处理瞬间到达的大流量的不同:令牌桶算法由于在令牌桶里攒了很多令牌,因此在大流量到达的瞬间可以一次性将队列中所有的请求都处理完,然后按照恒定的速度处理请求;漏桶算法则一直有一个恒等的阈值,在大流量到达的时候,也会将多余的请求拒绝。在Nginx这种基本没什么业务逻辑的网关中,自身的处理不会是瓶颈,在这种场景下,就比较适合使用令牌桶算法了。

限流实践

RateLimiter是guava中concurrent包下的一个限流工具类,使用了令牌桶算法,它支持两种令牌获取接口:获取不到一直阻塞;在指定时间内获取不到就阻塞,超过这个时间就返回获取失败。

引自《高可用可伸缩微服务架构:基于Dubbo、Spring Cloud和Service Mesh》

相关文章

  • 高可用实践-限流算法

    限流算法 常见的限流算法有计数器算法、漏桶算法和令牌桶算法。 计数器法 计数器算法“简单粗暴”。该算法会维护一个c...

  • 【NGINX入门】11.Nginx限流算法及配置实践

    1. 摘要 本文介绍Nginx限流算法及限流配置实践及测试验证。 2. 限流算法 高并发系统有三把利器:缓存、降级...

  • Nginx限流算法及配置实践

    1. 摘要 本文介绍Nginx限流算法及限流配置实践及测试验证。 2. 限流算法 高并发系统有三把利器:缓存、降级...

  • 高并发场景下的限流算法

    限流算法 限流是解决高并发大流量的一种方案,至少是可以保证应用的可用性。 通常有以下两种限流方案: 漏桶算法 令牌...

  • 程序员必知的几种限流方案

    限流简介 现在说到高可用系统,都会说到高可用的保护手段:缓存、降级和限流,本博文就主要说说限流。限流是流量限速(R...

  • 高并发下常见的限流算法

    限流简介 现在说到高可用系统,都会说到高可用的保护手段:缓存、降级和限流,本博文就主要说说限流。限流是流量限速(R...

  • 大规模分布式系统原理解析和架构实践

    1 架构词汇 1.1 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 大...

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

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

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

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

  • 限流框架系列之常见限流算法

    四种常见的限流算法 固定时间窗口限流算法 滑动时间窗口限流算法 令牌桶限流算法 漏桶限流算法 算法比较 算法确定参...

网友评论

      本文标题:高可用实践-限流算法

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