zoukankan      html  css  js  c++  java
  • 限流算法的原理

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

    https://www.cnblogs.com/shijiaqi1066/p/10508115.html 

    计数器算法

    在一定时间内,对处理的请求数进行计数,每次到达时间临界点则计数器清零。在一定时间间隔内,若计数器数字超限,则进行限流。

    img

    该算法的问题是,在两端临界点附加可能出现两倍的流速。

    滑动窗口算法

    基于计数器算法那,把时间间隔分片。例如服务限流每秒处理100个请求,把1秒分为10个窗口。每100毫秒移动一次,内存中保留每次的请求次数。每次移动判断一下总次数是否超限。

    当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。

    img

    滑动窗口算法可以有效规避计数器算法中时间临界点问题。但实现起来相对比较复杂。

    Hystrix的限流基于滑动窗口算法实现。

    令牌桶算法

    系统已一个恒定的速率往桶放入令牌。若有请求需要处理,则从令牌桶里获取令牌,当桶里没有令牌,则拒绝服务。

     

    令牌桶算法并不能实际的控制速率。比如,10秒往桶里放入10000个令牌桶,即10秒内只能处理10000个请求,那么qps就是100。但这种模型可以出现1秒内把10000个令牌全部消费完,即qps为10000。所以令牌桶算法实际是限制的平均流速。具体控制的粒度以放令牌的间隔和每次的量来决定。若想要把流速控制的更加稳定,就要缩短间隔时间。

    Google Guava中的RateLimter就是利用的令牌桶原理。

    漏桶算法

    水滴先进入漏桶,漏桶以一定速度向外出水。当水流入速度过大,桶会直接溢出。

    即Request进入一个固定容量的Queue,若Queue满,则拒绝新的Request,可以阻塞,也可以抛异常。

    这种模型其实非常类似MQ的思想,利用漏桶削峰填谷,使得Queue的下游具有一个稳定流量。

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

    https://www.cnblogs.com/shijiaqi1066/p/10508115.html 

  • 相关阅读:
    BladeX部署说明(win7)
    vmware安装gho系统(win10上安装虚拟机然后在vmware上安装win7)
    Windows下mysql忘记root密码的解决方法
    三星(SAMSUNG)910S3L-K04 安装win7的BIOS设置
    delphi7 编译程序时报win32.indcu.a病毒的解决方法
    无法远程到2008R2的解决方法
    触发器学习
    centos6.5安装mongodb2.6
    02_Linux学习_命令
    C#逻辑面试题汇总【不断更新中】
  • 原文地址:https://www.cnblogs.com/shijiaqi1066/p/10508115.html
Copyright © 2011-2022 走看看