令牌桶

作者: 心似南风 | 来源:发表于2020-08-16 17:35 被阅读0次

限流和降级

限流的目的是为了保证核心服务的稳定性,限流模式常用于下游服务容量有限,但又怕出现突发流量猛增(如恶意爬虫,节假日大促等)而导致下游服务因压力过大而拒绝服务的场景。常见的限流模式有控制并发和控制速率,一个是限制并发的数量,一个是限制并发访问的速率。

限流的方法

关于降级限流的方法令牌桶,漏桶,计数器等,在当前我们需要了解的基于令牌桶的# 限流算法
  限流一般分为分布式限流和单机限流,如果实现分布式限流的话就要一个公共的后端存储服务比如redis,在nginx节点上利用lua读取redis配置信息

关于降级

服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行。 同时保证部分甚至大部分任务客户能得到正确的相应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。

令牌桶说明

image.png
  • 令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌.
    假设限制r/s,表示每秒会有r个令牌放入桶中,或者说每过1/r秒桶中增加一个令牌
  • 桶中最多存放b个令牌,当桶满时,新添加的令牌被丢弃或拒绝
  • 当一个n个字节大小的数据包到达,将从桶中删除n个令牌,接着数据包被发送到网络上
  • 如果桶中的令牌不足n个,则不会删除令牌,且该数据包将被限流(要么丢弃,要么在缓冲区等待)

对于令牌桶中令牌的产生一般有两种做法:

  • 1、开启一个定时任务,由定时任务持续生成令牌。这样的问题在于会极大的消耗系统资源,如,某接口需要分别对每个用户做访问频率限制,假设系统中
    存在6W用户,则至多需要开启6W个定时任务来维持每个桶中的令牌数,这样的开销是巨大的。
  • 2、在每次获取令牌之前计算,其实现思路为,若当前时间晚于nextFreeTicketMicros,则计算该段时间内可以生成多少令牌,将生成的令牌加入令牌桶中并
    更新数据。这样一来,只需要在获取令牌时计算一次即可。

相关文章

  • Nginx 限流配置(转)

    限流算法: 1. 令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时,多余的令牌被丢弃;...

  • Nginx限流配置(转载)

    1、限流算法 令牌桶算法 算法思想是:a、令牌以固定速率产生,并缓存到令牌桶中;b、令牌桶放满时,多余的令牌被丢弃...

  • nginx限流算法

    1 限流算法 1.令牌桶 算法思想:*令牌以固定速率产生,并缓存到令牌桶中;*令牌桶放满时,多余的令牌被丢弃;*请...

  • 流控的那些事儿

    令牌桶算法令牌桶控制基于令牌桶是否存在令牌可以发送流量,每一个令牌是一个字节。当请求过来会消耗桶内中的令牌。另一边...

  • 令牌桶算法

    1、桶中每秒放入r个令牌 2、桶中最多能放入b个令牌,当令牌到达时令牌桶已经满了,令牌将被丢弃或放入缓存中 3、当...

  • 漏桶算法与令牌桶算法的区别

    令牌桶算法是通过控制令牌生成的速度进行限流,漏桶算法是控制请求从桶中流出的速度进行限流。简单理解为:令牌桶控制进,...

  • 【5分钟背八股】令牌桶限流算法是什么?

    令牌桶算法,是增加一个大小固定的容器,也就是令牌桶,系统以恒定的速率向令牌桶中放入令牌,如果有客户端来请求,先需要...

  • 令牌桶

    对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合...

  • Redisson限流器(RateLimiter)

    尝试获取令牌lua脚本解析 令牌桶配置(每分钟产生一个令牌) 令牌桶占用情况 分值:当时的时间 元素:随机数+申请...

  • 基础架构 | 限流算法

    限流算法 令牌桶算法 漏桶算法

网友评论

      本文标题:令牌桶

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