网络架构实战课
谢友鹏
某大厂技术专家
834 人已学习
新⼈⾸单¥59
网络架构实战课
15
15
1.0x
00:00/00:00
登录|注册

06|限流:怎样防止应用被打垮?

你好,我是谢友鹏。
在当今互联网应用中,流量的激增往往是不可预见的,无论是因为短期促销活动的推动,还是因为某些突发事件的影响。
例如,一场热门商品的限时促销,可能会瞬间吸引大量用户涌入,服务器瞬间负荷过重,导致应用崩溃,甚至影响到正常业务的运营。而在云存储服务等应用中,针对不同等级的会员,流量需求差异较大,基础服务往往需要防止高频次调用的用户占用过多资源,影响整体性能。
更严重的是,网络攻击手段也在不断升级,恶意流量也可能以惊人的速度涌入,试图击垮整个系统。在这种背景下,限流作为一种有效的流量控制手段,显得尤为重要。它不仅能有效防止单个请求过载系统,还能够保障不同流量来源的公平性,保护系统免受攻击或异常流量的影响,确保用户体验不受破坏。
今天我们就来学习一下限流的方案。

常用限流算法

限流的实现离不开算法,我们看看常用的算法有哪些。

计数器

最简单的算法是“计数器”法。每分钟统计一次请求数量,超过设定的阈值就拒绝请求,这听起来很简单对吧?
但是,这种简单粗暴的统计方法可能会导致“漏限”产生“尖峰流量”的问题,导致流量暴涨时系统依然无法承受。我们可以通过一个示意图来说明这个问题:
假设一个系统每 10 分钟只能处理 8 个请求,如果按 10 分钟为单位进行统计,请求超过 8 就拒绝,10 分钟过后计数清零。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 限流在互联网应用中的重要性,可以有效防止系统被单个请求或恶意流量打垮,保障系统稳定运行和用户体验。 2. 常用的限流算法包括计数器、时间滑动窗口、漏桶和令牌桶,它们各自适用于不同的场景和需求。 3. 如何设定限流阈值,包括通过压测确定阈值、估算压测出的阈值是否合理以及自适应限流的方式。 4. Nginx限流实战,通过配置Nginx实现基于单机限流的HTTP请求控制,包括安装Apache HTTP服务、配置Nginx反向代理和启用限流功能,以及验证限流效果。 5. 思考题,包括关于计数限流法中流量突增问题的原因和解决方式,以及关于令牌桶算法中令牌满了的处理方式。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络架构实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Geek_706285
    1.只有计数范围足够小才能避免漏限吧,滑动窗口的优势在于一是可以自己定义窗口范围大小?二是不会出现漏限情况? 2.不能吧,如果继续存入令牌,突发事件大量请求把令牌消费完会出问题

    作者回复: 很棒,不错的思考。

    2025-02-21
  • DoHer4S
    1. 单纯缩短直接计数法的时间窗口会导致应对突发且持续的流量监控不足;窗口太小也会导致整个系统对于流量变化会非常敏感,造成频繁的限流动作影响正常业务;此外频繁进行算法比较会影响系统性能; 2. 没有意义。 在令牌桶算法中,如果令牌桶已经满了(即桶中的令牌数量达到了最大容量),则继续往里面放令牌是没有意义的,因为桶已经达到了它的容量上限。令牌桶算法的核心思想是控制单位时间内的请求流量,桶满时不再新增令牌可以保证不会超出设定的流量限制,应该进行程序优化,设置超时机制。

    作者回复: 点赞,全面而且有深度的回答。

    2025-02-21归属地:陕西
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)