微服务限流

一、限流的核心作用

  1. 保护服务:限制单服务最大处理请求数,避免线程池、连接池耗尽;
  2. 削峰填谷:突发峰值流量平缓处理,防止数据库瞬间压力暴增;
  3. 区分流量:保障核心接口、VIP 用户流量,丢弃非核心、低频请求;
  4. 防攻击:拦截高频爬虫、恶意刷接口,节省服务器资源。

二、四种主流限流算法

1. 固定窗口计数器

原理:按固定时间窗口(1s)统计请求总数,超过阈值直接拒绝。 优点:实现简单,Redis incr 即可完成; 缺陷:临界窗口突刺问题。比如阈值 100,0.99s 涌入 100 条,1.01s 再涌入 100 条,1 秒内实际 200 条,超出限制。

2. 滑动窗口计数器(优化固定窗口)

把 1 秒拆分成多个小格子,滚动统计最近完整窗口总请求。 解决临界突刺,但窗口拆分越多,内存、计算开销越大;Redis 实现复杂度提升。

3. 漏桶算法

想象水桶,请求匀速流出处理;流入速度不受控,溢出直接丢弃。 特点:流出速率固定,强制抹平流量峰值,适合需要平稳下游压力场景; 缺点:无法应对突发流量扩容,不能应对瞬时高并发。

4. 令牌桶算法(生产最常用)

系统按固定速率生成令牌存入桶,每个请求必须拿到令牌才能放行;桶有最大容量。

  • 流量平稳:匀速拿令牌,正常放行;
  • 突发流量:桶内囤积令牌,短时间允许大量请求通过,支持流量突增; 优点:可控制平均速率,同时容忍峰值,网关、业务服务限流首选; Sentinel 底层默认采用令牌桶。

三、微服务分层限流(从外到内多层防护,线上标准架构)

1. 网关层限流(第一层,全局拦截)

SpringCloud Gateway / Nginx 作用:全链路第一道防线,拦截恶意流量,不用转发到后端服务,节省内网资源。 限流维度:全平台总 QPS、单 IP、单接口、用户账号。

2. 应用服务限流(第二层,细粒度接口管控)

使用 Sentinel/Hystrix,针对单个接口、核心业务单独限流。 例如:下单接口阈值 5000QPS,商品详情 10000QPS,非核心评价接口仅 1000QPS。

3. 分布式限流(多实例集群统一限流)

单机限流只限制单实例,多节点部署会失效,需要全局统一计数: 基于 Redis + Lua 脚本实现分布式令牌桶 / 滑动窗口,多服务共享限流计数器,保证全集群流量可控。

4. 底层资源限流(兜底)

数据库连接池、MQ 消费线程数限制,防止上层限流失效后压垮存储中间件。

四、限流粒度(区分不同控制维度)

  1. 全局限流:整个服务所有请求总和限制;
  2. 接口粒度:针对单个 API 单独设置阈值;
  3. IP 粒度:限制同一客户端 IP 访问频率,防爬虫;
  4. 用户粒度:登录用户按 userId 限流,区分普通用户和 VIP;
  5. 调用方粒度:基于服务名限流,第三方调用方配额管控。

五、流量限流后的四种处理策略

  1. 快速失败(默认):直接返回提示 "访问频繁,请稍后重试",性能损耗最低;
  2. 排队等待:超出流量放入队列缓冲,适用于允许少量延迟的业务;
  3. 预热冷启动:流量缓慢放开,避免服务刚启动瞬间高并发打垮系统;
  4. 降级兜底:限流触发直接返回缓存默认数据,不抛异常,提升用户体验。

六、主流技术实现对比

1. Nginx 限流

基于漏桶,单机网关层限流,适合前置拦截,无分布式能力。

2. Spring Cloud Gateway + Sentinel

网关整合 Sentinel,可视化配置流控规则,支持预热、IP 限流、分布式限流。

3. Sentinel(业务服务首选)

  1. 无侵入 / 注解两种接入方式;
  2. 支持令牌桶,多种限流粒度;
  3. 控制台动态修改规则,无需重启服务;
  4. 限流、熔断、降级、系统保护一体化;
  5. 支持集群分布式限流,解决多实例流量均分问题。

4. Redis Lua 分布式限流

自研方案,基于滑动窗口 / 令牌桶,适合自定义特殊限流规则; 缺点:需要自己维护规则、持久化、监控,开发成本高。

七、生产落地避坑与最佳实践

  1. 分层限流不能只做一层:只做服务限流,恶意流量依然会占用网关带宽;
  2. 区分核心 / 非核心接口:大促时优先保障下单、支付,降低评价、收藏阈值;
  3. 开启预热冷启动:服务重启后缓慢释放流量,避免冷启动大量请求触发 Full GC;
  4. 集群场景必须开启分布式限流,单机限流会被多实例突破阈值;
  5. 限流阈值依据压测结果设置,不能凭经验估算;
  6. 限流日志埋点监控,配置告警,流量突增及时收到通知;
  7. 不要无限排队,队列设置最大长度,防止内存堆积 OOM。

简短总结

限流用于控制请求流量、保护服务避免雪崩;主流四种算法里令牌桶兼顾平稳与峰值,线上最常用;微服务采用多层限流架构:网关全局限流、应用接口细粒度限流、Redis 分布式集群限流;主流工具是 Sentinel,支持动态规则、多粒度限流,触发限流可快速失败、排队或降级兜底。

相关推荐
doiito(Do It Together)2 小时前
【Web安全,微服务安全】HashiCorp Vault 项目深度分析报告
web安全·微服务·安全架构
亿牛云爬虫专家3 小时前
2026架构前沿:将Declarative Crawler(声明式爬虫)引入你的技术栈
爬虫·架构·爬虫代理·requests·隧道代理·声明式爬虫·转发模式
ai_coder_ai3 小时前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行设备相关操作
数据库·云原生·自动化
bukeyiwanshui3 小时前
20260626 k8sControllers介绍
云原生·容器·kubernetes
oradh3 小时前
Oracle DG主备架构的基本维护操作总结
数据库·oracle·架构·dg主备架构的基本维护操作总结
东方佑3 小时前
FRSMASH v3.7:当门控机制成为长上下文的枷锁——一个极简修复背后的架构洞见
人工智能·架构
Niuguangshuo3 小时前
TTS 架构的六代演进(一):三段式链路与评测框架
架构
我登哥MVP4 小时前
Hadoop成长史-从Nutch子项目到大数据生态王者
java·大数据·hadoop·分布式·云原生·云计算
武子康4 小时前
调查研究-224 Prefill 与 Decode 分离:高并发 LLM Serving 的下一层架构
人工智能·ai·架构·llm·gpu·vllm·sglang