限流不是为了让系统“变慢”而是为了让系统在突发流量、恶意请求或超过承载能力时仍然能保住核心服务。一句话概括限流是在入口处控制请求速度或并发数量Nginx 常用漏桶算法控制请求流出速率Spring Cloud Gateway 常用令牌桶算法决定请求是否允许通过。外部请求入口限流Tomcat最大连接数Nginx漏桶限速Nginx连接数限制Gateway令牌桶限流自定义拦截器请求按固定速率进入后端拿到令牌才允许通过为什么要限流项目中做限流一般有两个原因业务确实有突发流量比如优惠券抢购平时 QPS 只有 10 到 50活动时瞬间到 2000。防止恶意刷接口比如登录、短信、下单、支付等接口被频繁请求。面试回答时最好带具体业务场景不要只说“为了保护系统”。Nginx 漏桶限流漏桶算法可以想成一个桶请求像水一样进入桶。桶按固定速率漏水。后端按固定速率处理请求。桶满后多余请求等待或被丢弃。未满已满突发请求进入漏桶缓存请求桶是否已满请求进入桶中等待请求被拒绝或延迟按固定速率漏出后端服务稳定处理Nginx 常见配置思路limit_req_zone $binary_remote_addr zoneperip:10m rate10r/s; location /api/ { limit_req zoneperip burst20 nodelay; }几个参数要能说清楚参数含义key限流对象比如客户端 IPzone共享存储区用来保存访问状态rate最大访问速率比如10r/sburst突发请求容量相当于桶大小nodelay不排队等待尽快处理或拒绝rate、burst、nodelay怎么直观理解假设配置是limit_req_zone $binary_remote_addr zoneperip:10m rate10r/s; location /api/ { limit_req zoneperip burst20 nodelay; }可以这样理解rate10r/s稳定情况下每秒最多按 10 个请求的速度处理。burst20允许额外暂存 20 个突发请求。没有nodelay突发请求会排队按 10r/s 慢慢放行。有nodelay突发请求不排队等待会尽快处理超过burst的请求直接被限流。否是瞬间进来 35 个请求10 个按速率正常处理20 个进入 burst 突发容量是否配置 nodelay排队等待按固定速率放行尽快处理突发请求超过容量的 5 个请求被拒绝或返回限流响应这个例子比单纯背参数更好用。面试时只要说出“稳定速率 突发容量 是否排队”就基本讲清楚了。Nginx 并发连接数限制除了控制请求速率Nginx 也能限制连接数limit_conn perip 20; limit_conn perserver 100;含义perip 20单个 IP 最多同时保持 20 个连接。perserver 100当前虚拟主机最多处理 100 个并发连接。速率限制解决“请求来得太快”连接数限制解决“连接占用太多”。Gateway 令牌桶限流令牌桶算法的逻辑和漏桶不一样系统按固定速率生成令牌。令牌放入令牌桶。桶满后暂停生成。请求必须先拿到令牌。没有令牌的请求会被阻塞或拒绝。是否令牌生成器按固定速率生成令牌令牌桶请求进入网关是否拿到令牌请求放行请求被限流Spring Cloud Gateway 可以通过RequestRateLimiter做局部过滤器限流参数含义key-resolver定义限流对象比如 IP、路径、用户 IDreplenishRate每秒填充令牌的平均速率burstCapacity令牌桶总容量漏桶和令牌桶怎么选对比点漏桶算法令牌桶算法核心思想请求按固定速率流出拿到令牌才放行突发流量更平滑削峰明显支持一定突发能力常见位置NginxGateway适合场景控制后端稳定处理速率允许短时间突发但限制总体速率面试回答模板可以这样答我们项目在活动接口上做过限流。平时 QPS 大概几十活动高峰可能到 2000为了防止突发流量打垮系统在入口层做了限流。Nginx 侧用漏桶算法控制请求速率让请求以固定速率进入后端也可以限制单 IP 连接数。网关侧可以使用 Spring Cloud Gateway 的RequestRateLimiter底层是令牌桶算法通过key-resolver指定限流对象比如 IP 或路径通过replenishRate和burstCapacity控制令牌生成速率和桶容量。小结限流要讲业务背景也要讲算法差异漏桶更强调平滑流出令牌桶更强调拿令牌放行并允许一定突发。项目回答里带上 QPS、限流位置和参数比只背算法更像真实经验。