限流算法简单总结

本文详细介绍了计数器、无时间段限制、固定时间窗口、滑动窗口、漏斗和令牌桶等限流算法,以及如何在nginx中使用这些算法进行配置,以应对不同场景下的流量控制问题。
摘要由CSDN通过智能技术生成

一、计数器算法

固定时间内计数:固定时间,允许通过的请求

1.优点

  • 简单,易于实现

2.缺点

  • 存在临界问题
    如果流量在1s内最后100ms进入100个,后900ms又进入100个,等于是1s内进入200个,服务直接崩了
    在这里插入图片描述

无时间段限制计数:类似semaphore信号量;并发量最高限制在你想要的范围内。

二.固定时间窗口算法

实际上是将固定时间通过请求中的时间进行细分,例如1s进行5等分
在这里插入图片描述
这种也会存在临界值问题,和固定时间段计数类似,可能会产生2N的阈值流量
在这里插入图片描述

三、滑动窗口算法

这个是针对固定窗口,临界值问题一个好的策略。1s切成5等分之后,每个小窗口是200ms,一个周期去除掉一个200ms.
在这里插入图片描述

初始窗口期:0-1s:第一个时间窗口的0.8s-1s的进来5个请求,打满
过了一个时间周期,窗口是:0.2-1.2s,此是0.9在这个时间段内,多余请求拒绝

1.优点
  • 解决了固定窗口临界问题
2.缺点
  • 不能应对突发大流量
  • 要求窗口尽量细

四、漏斗算法

实际上就是:宽进严出,进来的流量都在漏斗上面排队,流出按照固定速率。
这种无法面对突发流量,容易造成用户长时间等待

五、令牌桶算法

这种实际上是匀速流入,快速流出。当令牌桶满的时候就无法放,被拒绝。

六、nginx对于限流配置

  • 配置限流
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;

server {
    location / {
        limit_req zone=test;
    }
} 

1.limit_req_zone $binary_remote_addr zone=test:10m指定限流共享空间和名称
2.rate=2r/s指定限流速率

  • 漏斗配置
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;

server {
    location / {
        limit_req zone=test brust=5;
    }
}

brust=5给一个5个流量的桶

  • 处理突发流量(切换令牌桶)
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;

server {
    location / {
        limit_req zone=test brust=5 nodelay;
    }
}

nodelay 参数表示消费桶里所有请求,但是流入的速度还是2r/s

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值