SpringCloud Gateway是微服务的核心,下面我全面来详解SpringCloud Gateway@mikechen
Spring Cloud Gateway
Spring Cloud Gateway是Spring官方基于Spring 5、Spring Boot 2和Project Reactor…等技术,开发的微服务API网关。
在微服务架构中,API 网关(API Gateway), 就像是所有微服务对外暴露的“门面”或“统一入口”。
在微服务架构中,系统被拆分为多个服务模块,客户端往往需要分别调用这些服务。
存在如下问题:
客户端调用复杂,维护成本高;
统一认证、限流、日志、监控等功能,无法集中处理;
缺乏统一的安全控制入口…等等问题,网关应运而生,作为系统的唯一入口,统一处理认证。
Spring Cloud Gateway核心
Spring Cloud Gateway 作为微服务架构的统一入口,扮演着至关重要的角色。
如下图所示:
涵盖:路由、限流、日志、安全…等功能。
服务路由 (Service Routing)
服务路由,这是Gateway最基本也是最重要的功能。
它像一个智能的交通指挥员,根据预设的规则(如请求路径、HTTP方法…等),将客户端发来的请求准确无误地转发到对应的后端微服务实例。
它还能与服务注册中心(如Eureka、Nacos)无缝协作,实现服务的动态发现和负载均衡。
安全认证 (Security Authentication)
Gateway能够统一处理客户端的身份认证、和权限校验,提供了一个集中的安全防护层。
这意味着在请求到达后端服务之前,网关就可以验证用户的身份(比如通过校验JWT令牌),并判断是否有权访问目标资源。
流量控制 限流
为了防止后端服务因突发流量而过载甚至崩溃,Gateway提供了强大的限流功能。
它能根据设定的策略(如每秒允许的请求数、基于IP或用户ID限流等),控制进入系统的流量,确保服务的稳定运行。
日志监控 (Logging & Monitoring)
Gateway是系统可观测性的重要一环,记录详细的请求日志、性能指标(如请求延迟、吞吐量)。
并追踪请求在各个服务间的调用路径,方便故障排查和性能分析。
熔断保护 (Circuit Breaking)
为了防止微服务间出现“雪崩效应”,Gateway提供了熔断机制。
当某个后端服务出现故障或响应变慢时,熔断器会自动“断开”,阻止新的请求继续发送到该问题服务,避免故障扩散。
Spring Cloud Gateway原理
Spring Cloud Gateway,大致流程如下图所示:
Client Request ↓ Spring Cloud Gateway(核心流程): ① 请求进入 DispatcherHandler ② RouteLocator 匹配路由(Predicates) ③ 构建 FilterChain(Global + Gateway) ④ 执行前置过滤器(认证、限流、重写等) ⑤ 调用下游服务(WebClient + LoadBalancer) ⑥ 执行后置过滤器(日志、响应改写等) ↓ Client Response
Gateway 处理一个请求的生命周期,可以概括为以下几个关键阶段:
1.请求入口
客户端的 HTTP 请求,首先被 Gateway 内嵌的 Reactor Netty 服务器接收。
请求被封装成 ServerWebExchange
对象,其中包含了 ServerHttpRequest
(请求) 和 ServerHttpResponse
(响应) 的上下文。
2.路由匹配
这是 Gateway 的核心调度器,它维护了所有加载的路由定义 (Route Definitions)。
网关根据配置的路由规则(Predicate 断言),匹配请求对应的后端服务路由。
3.过滤器链执行
对匹配路由,依次执行全局过滤器(GlobalFilter)和路由过滤器(GatewayFilter),处理认证、限流、日志等功能。
4.请求转发
经过过滤器链后,使用响应式 WebClient
非阻塞地将请求转发到目标服务。
5.响应处理
下游服务响应返回后,执行后置过滤器处理响应内容,如日志记录、响应修改等。
6.返回客户端
最终将处理后的响应返回给客户端,完成整个请求流程。
与其它网关对比
项目 | Spring Cloud Gateway | Zuul 1.x | Nginx | Kong |
---|---|---|---|---|
模型 | 响应式(WebFlux) | Servlet阻塞 | C++/C异步 | Lua + Nginx |
性能 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
扩展性 | Java,自定义 Filter | Java | Lua/配置 | 插件式 |
Spring 集成 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ❌ | ❌ |
服务发现支持 | ✅ | ✅ | ❌ | 插件支持 |