news 2026/6/10 10:47:52

Nginx 为什么用漏桶,而 Guava 用令牌桶?一文看懂限流算法的底层逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx 为什么用漏桶,而 Guava 用令牌桶?一文看懂限流算法的底层逻辑


在双十一大促、明星热搜或者遭受到恶意攻击时,系统的流量会瞬间飙升。
如果把服务器比作一家餐厅,平时每分钟进 10 个客人,系统运行良好。
突然来了 1000 个客人,如果全放进来,厨房(CPU/数据库)立刻就会炸锅,餐厅直接倒闭(宕机)。

为了防止这种情况,我们需要一个无情的**“守门员”,把超过处理能力的请求挡在门外。这就是限流 (Rate Limiting)**。

在微服务网关(如 Sentinel, Hystrix, Nginx)中,最经典的两位守门员就是:漏桶算法令牌桶算法


💻 一、技术分析:流速的控制艺术

1. 漏桶算法 (Leaky Bucket) —— “强行削峰”

  • 原理: 想象一个底部有个小孔的桶。

  • 入水: 请求像水一样,以任意速度灌进桶里。

  • 出水: 桶底的水滴,永远以固定的速率流出(比如每秒 10 滴)。

  • 溢出: 如果桶满了(缓存队列满了),新进来的水直接溢出(拒绝请求)。

  • 核心特征:强行平滑流量。不管外面的请求波动多大,发给后端的请求永远是匀速的。

  • 缺点:无法应对突发流量。哪怕现在桶是空的,请求也只能一滴一滴地流,处理效率有时会显得太死板。

2. 令牌桶算法 (Token Bucket) —— “支持突发”

  • 原理: 想象一个专门放令牌的盒子。

  • 生产令牌: 系统以固定速率往盒子里扔令牌(比如每秒扔 10 个)。

  • 容量限制: 盒子有最大容量(比如 100 个),满了就不扔了。

  • 消费令牌: 请求来了,必须从盒子里拿走一个令牌才能进。如果盒子里没令牌,就拒绝。

  • 核心特征:允许突发。如果平时没人来,盒子里攒满了 100 个令牌。突然来了 50 个请求,它们可以瞬间拿走 50 个令牌同时处理,不需要排队。

  • 优点: 既限制了平均速度,又兼顾了突发的洪峰。


🎡 二、故事场景:医院与游乐场

为了彻底搞懂它们的区别,我们看看日常生活中的两个经典场景。

1. 漏桶算法 —— “医院打吊瓶”

  • 场景: 你生病了,护士给你挂点滴。
  • 入水: 护士拿来一整袋药水(大量的突发请求),一下子挂在架子上。
  • 出水: 无论袋子里剩多少药,滴管(漏桶出口)永远是“滴答、滴答”匀速滴下来的。
  • 为什么: 因为病人的血液(后端服务器)承受能力有限,如果一大袋药水瞬间灌进去,人就没了。
  • 结论:漏桶是为了保护脆弱的下游系统,不让它被冲垮。

2. 令牌桶算法 —— “游乐场检票口”

  • 场景: 迪士尼乐园的快速通道。

  • 生产令牌: 工作人员(系统)每秒钟往检票箱里放 10 张票。

  • 存票: 如果这一分钟没人来,箱子里就积攒了 100 张票(达到上限)。

  • 突发情况:

  • 突然来了一个 50 人的旅行团(突发流量)。

  • 因为箱子里有 100 张票,这 50 个人每人拿一张,瞬间全部通过,不需要像打吊瓶那样排队。

  • 紧接着又来了 80 人。前 50 人拿走了剩下的 50 张票,后 30 人没票了,只能乖乖等工作人员发新票。

  • 结论:令牌桶是为了在限制平均流量的同时,允许用户“爽一把”(处理突发请求)。


🥊 三、总结:Nginx 与 Guava 的选择

维度漏桶 (Leaky Bucket)令牌桶 (Token Bucket)
流出速率恒定(平滑)可变(允许瞬间飙升)
突发流量不支持支持
核心作用削峰填谷,保护下游限制平均速率,兼顾体验
典型代表Nginx(limit_req模块)Guava(RateLimiter类)
适用场景流量整形,防止数据库被打挂网关限流,API 调用配额

一句话总结:

  • 如果你希望请求走得**“稳”**,选漏桶。
  • 如果你希望请求走得**“快”**,选令牌桶。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 14:23:53

Kali Linux 内网渗透:深度工程实施手册

第一阶段:隧道与代理(内网渗透的 “高速公路”)在内网中,你经常遇到的情况是:你只能控制一台 Web 服务器,但它身后有 10.10.10.x/24 的核心网段。你的 Kali 无法直接访问内网 IP,必须通过 Web 服…

作者头像 李华
网站建设 2026/6/1 20:38:01

【Python 技术深度解析】核心特性、生态架构与实战价值

文章目录 目录一、Python 核心定位与背景1. 核心定位与优势2. 版本现状3. 核心应用领域 二、Python 核心语言特性1. 语法简洁优雅,可读性极强2. 动态类型与强类型3. 丰富的内置数据结构4. 装饰器(Decorator):函数增强的优雅方式5.…

作者头像 李华
网站建设 2026/6/1 17:34:02

[AI] 模型安全防护实战:Prompt Injection、Jailbreak 与输入净化全攻略

目标:为本地/私有化大模型构建安全防护方案,覆盖 Prompt Injection/Jailbreak 类型、检测与拦截策略、输入净化、提示工程约束及灰度验证方法。 1. 攻击面与威胁 Prompt Injection:恶意指令覆盖系统提示(如“忽略以上规则”)。 Jailbreak:通过花式提示绕过安全边界(角色…

作者头像 李华
网站建设 2026/6/7 7:59:28

高斯消元法简介

高斯消元法(Gaussian Elimination)是一种经典的数学方法,主要用来求解线性方程组。它就像是“逐步简化”一个复杂的方程系统,通过一些简单的行操作,把它变成一个容易计算的上三角形矩阵,然后从下往上求出每…

作者头像 李华
网站建设 2026/6/4 20:46:33

mfc40loc.dll文件丢失找不到损坏了 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华