Spring Cloud Gateway 理论知识点总结(实战向)
1. 为什么要用网关
在微服务架构里,网关是流量统一入口,核心价值是把"横切能力"集中治理,而不是分散到每个业务服务。
网关常见职责:
- 统一路由:按路径、Header、参数等规则转发到不同服务
- 统一鉴权:JWT/OAuth2、黑白名单、签名校验
- 统一限流与熔断:保护下游服务,防止雪崩
- 统一协议处理:CORS、HTTPS、X-Forwarded-*、WebSocket
- 统一观测:日志、指标、链路追踪、审计
2. Spring Cloud Gateway 的定位
Spring Cloud Gateway(SCG)是基于 Spring WebFlux + Reactor 的响应式网关。
关键特点:
- 非阻塞 I/O,高并发场景下资源利用率高
- 通过 Route + Predicate + Filter 构建转发逻辑
- 与 Spring 生态结合紧密(Spring Security、Spring Cloud LoadBalancer、Micrometer)
适用场景:
- API 网关、BFF 网关、内部服务入口
- 需要动态路由、统一鉴权、灰度发布的系统
不适合场景:
- 团队完全依赖 Servlet 同步编程模型且无响应式经验
- 极度追求极致性能且已有成熟 Nginx/Lua 或 Envoy 方案
3. 核心模型:Route / Predicate / Filter
3.1 Route(路由)
Route 是"匹配 + 转发 + 处理"的最小单元,通常包含:
- id:路由唯一标识
- uri:目标地址(可为 lb://service-name)
- predicates:匹配条件
- filters:局部过滤器
3.2 Predicate(断言)
Predicate 用来判断"请求是否命中该路由"。
常用断言:
- Path:按路径匹配(最常见)
- Method:按 HTTP 方法匹配
- Header / Cookie / Query:按请求元数据匹配
- Host:按域名匹配
- After / Before / Between:按时间窗口匹配
- RemoteAddr:按客户端 IP 匹配
匹配要点:
- 路由按定义顺序尝试匹配,先匹配先处理
- Path 通配符语义要和后端接口前缀策略保持一致
3.3 Filter(过滤器)
Filter 分两类:
- GatewayFilter:单路由过滤器(只对某个 Route 生效)
- GlobalFilter:全局过滤器(对所有请求生效)
执行链路:
- pre 阶段:转发前(鉴权、限流、日志注入)
- post 阶段:转发后(响应头处理、审计、统一包装)
4. 常用过滤器理论与实践
4.1 路径改写
- StripPrefix:按段数去前缀
- RewritePath:正则重写路径
实践建议:
- 多服务统一前缀时,优先约定"网关前缀 + 后端真实路径"
- Swagger/OpenAPI 文档路径通常单独 Rewrite,避免影响业务接口
4.2 Header 处理
- AddRequestHeader / SetRequestHeader / RemoveRequestHeader
- DedupeResponseHeader(常用于 CORS 响应头去重)
4.3 安全相关
- TokenRelay(OAuth2 场景把访问令牌透传下游)
- 自定义鉴权 Filter(解析 JWT、角色权限校验)
4.4 韧性治理
- RequestRateLimiter(限流)
- CircuitBreaker(熔断降级)
- Retry(重试,需谨慎,避免放大流量)
5. lb:// 与服务发现
当 uri 使用 lb://service-name 时,SCG 会通过服务发现 + 负载均衡选取实例。
常见组合:
- Nacos/Eureka/Consul + Spring Cloud LoadBalancer
注意点:
- 服务名必须与注册中心一致
- 健康检查异常会导致实例不可达
- 灰度发布可通过 metadata + 自定义负载策略实现
6. 与 WebFlux 响应式模型的关系
SCG 基于 Reactor:
Mono:0~1 个异步结果Flux:0~N 个异步结果
开发过滤器时要注意:
- 不能写阻塞代码(如阻塞式 JDBC/HTTP 调用)
- 需通过 Reactor 上下文传递链路信息
- 错误处理要走响应式链路,避免吞异常
7. 配置优先级与生效顺序
常见优先级理解:
- 全局过滤器 vs 路由过滤器:按 order 决定先后
- 多条路由:谁先匹配到谁生效
- 多条 Rewrite/Strip 规则:按声明顺序生效
实践建议:
- 把"通用规则"放 global,把"业务差异规则"放 route
- 在复杂路由中显式设置顺序,减少隐式冲突
8. 网关高频问题排查方法
8.1 404 问题
检查顺序:
- 路由是否匹配(Path/Method/Host)
- 是否错误 Strip/Rewrite 导致后端路径不存在
- 后端服务是否注册成功、健康正常
8.2 401/403 问题
检查顺序:
- Token 是否携带且格式正确
- 网关鉴权过滤器是否放行了白名单路径
- 下游服务是否二次鉴权且权限模型一致
8.3 CORS 问题
检查顺序:
- 是否重复写入
Access-Control-Allow-* - OPTIONS 预检请求是否正确放行
- 网关和下游是否出现跨域策略冲突
8.4 性能问题
关注指标:
- 请求总量、P95/P99 延迟
- 下游调用耗时占比
- 线程与连接池资源
- GC 与内存水位
9. 生产实践建议
- 路由命名规范化:
{domain}-{scene}-api - 路径前缀统一:
/admin-api/*、/app-api/* - 文档路径单独处理:
/v3/api-docs或/v2/api-docs - 全链路观测必开:traceId、metrics、access log
- 限流与熔断默认启用,逐步调优阈值
- 网关配置纳入版本管理,变更走评审
10. 一份推荐的学习路线
- 先吃透 Route/Predicate/Filter 三件套
- 再掌握路径改写(RewritePath/StripPrefix)与鉴权
- 接着理解限流、熔断、重试的边界
- 最后补齐响应式编程与性能排障能力
11. 总结
Spring Cloud Gateway 的本质不是"转发器",而是微服务入口治理平台。
用好 SCG 的关键是:
- 路由设计清晰
- 路径改写可预期
- 过滤器职责单一
- 可观测与韧性能力前置
当你的网关从"能转发"升级到"可治理、可观测、可演进",它才真正成为系统稳定性的核心基础设施。
12. 面试高频问答(Spring Cloud Gateway)
Q1:Spring Cloud Gateway 的核心组件是什么?
A:Route、Predicate、Filter。Route 定义转发单元;Predicate 决定是否命中;Filter 负责命中后的前后置处理。
Q2:Gateway 和 Zuul 1 的关键差异是什么?
A:Gateway 基于 WebFlux + Reactor,非阻塞模型;Zuul 1 基于 Servlet 阻塞模型。在高并发下,Gateway 通常有更好的资源利用率。
Q3:StripPrefix 和 RewritePath 如何选?
A:前缀规则简单且固定时优先 StripPrefix;需要精细控制或正则映射时用 RewritePath。
Q4:为什么常出现"网关能匹配但后端 404"?
A:多半是路径改写错误。常见问题是网关转发后仍保留业务前缀,导致后端无该接口路径。
Q5:lb://service-name 的底层机制是什么?
A:通过服务注册中心拿实例列表,再由 Spring Cloud LoadBalancer 选择实例并发起转发。
Q6:GlobalFilter 和 GatewayFilter 区别?
A:GlobalFilter 作用全部路由;GatewayFilter 只作用单条路由。通用能力放全局,业务差异放路由级。
Q7:Gateway 里可以写阻塞代码吗?
A:不建议。Gateway 是响应式链路,阻塞调用会拖垮吞吐并放大延迟,应使用非阻塞客户端。
Q8:如何做统一鉴权?
A:通常在 GlobalFilter 中解析 Token、校验权限、写入用户上下文,再将必要信息透传给下游。
Q9:如何避免 CORS 响应头重复?
A:可用 DedupeResponseHeader,并避免网关和下游同时重复写同一组 CORS 头。
Q10:限流常用方案是什么?
A:RequestRateLimiter + Redis(令牌桶)。关键是按用户/IP/接口维度区分 key,并设置降级策略。
Q11:熔断与重试要注意什么?
A:重试会放大流量,不可对非幂等接口盲目重试;熔断应配合 fallback,避免级联故障。
Q12:如何排查 Gateway 性能问题?
A:看 P95/P99、下游耗时、连接池、GC、线程模型;优先确认是否混入阻塞调用。
Q13:路由匹配顺序有何影响?
A:有。通常先定义的路由先匹配,宽泛规则过早声明会"吞掉"更精确路由。
Q14:网关转发后如何保留客户端真实 IP?
A:依赖 X-Forwarded-For / X-Real-IP,并在多层代理场景下明确可信代理边界。
Q15:生产上如何管理网关配置?
A:配置中心 + Git 版本化 + 变更评审 + 灰度发布 + 可观测回放,避免"在线手改不可追溯"。
Q16:Gateway 在系统中的最佳定位?
A:入口治理层,不承载复杂业务编排。网关做"通用横切",业务逻辑放领域服务。
13. 面试速记(30 秒回答模板)
- 一句话定位:Gateway 是基于 WebFlux 的响应式 API 网关,用于统一路由与入口治理。
- 三件套:Route 决定去哪,Predicate 决定是否命中,Filter 决定怎么处理。
- 三个高频坑:路径改写、鉴权链路、CORS 头重复。
- 三个生产关键:可观测(日志/指标/链路)、韧性(限流/熔断/重试)、配置治理(版本化/灰度/回滚)。