限流算法

古城微笑少年丶 2022-04-05 07:46 370阅读 0赞

概要

限流目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或者等待、降级。

限流算法

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

1、令牌桶算法

令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。

  • 假设限制2r/s,则每500毫秒向桶中添加令牌
  • 桶总最多存放b个令牌,当桶满时,新添加的令牌被丢弃或者拒绝
  • 当一个n字节的请求到达,将从桶中删除n个令牌,接着请求被放行
  • 如果桶中的令牌不足n个,则不会删除令牌,且该请求将被限速(被丢弃或在缓冲区等待)

2、漏桶算法

漏桶算法非常简单。

  • 一个固定容器的漏桶,按照固定速率放行请求
  • 请求可以以任意速率请求到漏桶
  • 如果请求超出桶的容量,则请求将被限速(被丢弃)

3、计数器算法

计数器主要用来限制总并发数,只要全局总请求数或者一定时间段的总请求数达到设定的阈值,则进行限速。该算法是一种简单粗暴的总数量限流,而不是平均速率限流。

区别

  • 令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减至0时,则拒绝新的请求
  • 漏桶则是按照固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝
  • 令牌桶限制的是平均速率(允许突发请求),并允许一定程度的突发流量
  • 漏桶限制的是流出速率,从而平滑突发请求
  • 令牌桶和漏桶算法实现可以一样,但是方向是相反的,对于相同参数得到的流速效果一样
  • 计数器算法是总数量限流,令牌桶和漏桶都是平均速率限流

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法--sentinel

    见的限流算法 ***计数器算法***计数器算法指在一段时间内,进行计数,与阀值进行比较,如果超过了阀值则进行限流操作,到了时间临界点,将计数器清零进行重新计数,即单位时...

    相关 常见算法

    常见限流算法有以下几种,每一种都有他的优缺点 1. 计数器算法 2. 滑动窗口算法 3. 漏桶算法 4. 令牌桶算法 计数器算法 计数器算法是使用计数器在周期

    相关 浅析算法

    计数器 计数器算法的思想很简单,每当一个请求到来时,我们就将计数器加一,当计数器数值超过阈值后,就拒绝余下请求。一秒钟后,我们将计数器清零,开始新一轮的计数。计数器算法简

    相关 算法

    限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。常用的限流算法有令牌桶法和漏桶法,而Google开源项目Guava中

    相关 算法

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

    相关 算法

    概要 限流目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或者等待、降级。 限流算法 常见的限流

    相关 算法

    三种常见的限流算法       在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完