Spring Cloud Gateway 是 Spring Cloud 社区官方推出的一个基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.x 的下一代 API 网关(API Gateway)解决方案。它旨在为微服务架构提供统一、简洁、高效的 API 网关层。
你可以把它想象成一个大门口的智能保安和交通枢纽。所有外部客户端(如Web浏览器、移动App)对微服务集群的请求,都需要先经过这个网关。网关负责检查、过滤、路由请求到后端的各个具体微服务,并在请求进入和离开时执行各种逻辑。
与 Spring Boot、Spring WebFlux 等无缝集成,开发体验良好。
内部使用 Project Reactor(Mono, Flux),能够高效处理高并发请求,性能优异。
大部分配置可以通过 YAML/Properties 文件或 Spring Cloud Config 动态管理。
提供多种内置过滤器,并支持自定义过滤器,实现灵活的请求处理逻辑。
在微服务架构中,服务数量众多,接口分散,直接暴露给外部客户端会带来诸多问题。API 网关的出现是为了解决这些痛点:
将所有微服务的入口统一到网关,简化客户端调用,隐藏内部服务细节。
根据请求的 URL、Header 等信息,将请求智能地转发到对应的微服务实例。
在请求到达具体微服务之前,进行身份认证、权限校验、非法请求拦截等。
可以在网关层对后端微服务实例进行简单的负载均衡(通常与 Spring Cloud LoadBalancer 结合)。
保护后端微服务,防止因流量过大或异常请求导致服务崩溃(通常与 Sentinel、Resilience4j 等结合)。
统一记录所有通过网关的请求和响应信息,便于监控和问题排查。
可以在网关层进行协议转换,例如将 HTTP 请求转换为内部 RPC 调用。
Spring Cloud Gateway 的核心功能由以下几个关键组件构成:
路由是网关的基本构建块。它包含一个唯一的 ID、一个目标 URI(指向后端微服务)、一组 Predicate(断言)和一组 Filter(过滤器)。
ID: 路由的唯一标识符。
URI: 后端服务的地址,可以是 HTTP 也可以是其他协议。
Predicate: 这是一个 Java 8 的 Predicate。输入类型是 Spring Framework 的 ServerWebExchange(包含请求和响应信息)。如果 Predicate 返回 true,则说明该请求匹配此路由。
Filter: 可以是 GatewayFilter 的实例,也可以是 GlobalFilter 的实例。Filter 用于在请求发送到后端之前或之后,对请求或响应进行修改或处理。
用于匹配 HTTP 请求的各个方面,如路径(Path)、方法(Method)、头信息(Header)、参数(Query)、来源 IP(RemoteAddr)等。只有当所有配置的 Predicate 都返回 true 时,请求才会匹配该路由。Spring Cloud Gateway 提供了多种内置 Predicate_FACTORY。
这是网关实现各种复杂逻辑的核心。Filter 可以分为两类:
GatewayFilter: 作用于特定的路由。可以对请求路径进行重写、添加请求头、设置超时时间、记录日志等。
GlobalFilter: 作用于所有路由。通常用于实现横切关注点,如认证、限流、监控等。Spring Cloud Gateway 提供了一些内置的 GlobalFilter。
一个典型的请求在 Spring Cloud Gateway 中的处理流程如下:
网关服务器接收到来自客户端的 HTTP 请求。
网关根据请求的属性(如 URL 路径、HTTP 方法等),遍历所有已配置的路由。
对于每个路由,执行其关联的 Predicate。如果所有 Predicate 对该请求返回 true,则认为请求匹配了该路由。
执行该路由关联的 GatewayFilter(如果有)。这些过滤器可以在请求发送到后端之前修改请求内容或执行其他逻辑(如认证)。
将处理后的请求转发到路由中指定的后端 URI。
网关接收到后端微服务返回的响应。
执行该路由关联的 GatewayFilter(如果有)。这些过滤器可以在响应返回给客户端之前修改响应内容或执行其他逻辑(如日志记录)。
将最终处理后的响应返回给客户端。
核心功能,根据规则将请求路由到不同的微服务。
可以轻松集成 Hystrix 或 Resilience4j,当后端服务不可用时,返回降级响应。
可以基于各种维度(如 Key-Resolver 定义的键、IP、用户等)对请求进行限流,防止系统过载。
可以通过过滤器实现 JWT 解析、OAuth2 认证等安全机制。
使用 GatewayFilter 修改请求头、请求参数、响应状态码、响应头等。
通过 GlobalFilter 记录请求耗时、参数、状态码等信息,用于监控和审计。
可以通过配置中心(如 Nacos, Consul, Spring Cloud Config)动态更新路由规则,无需重启网关。
所有微服务对外暴露的 API 都通过 Gateway 进行统一管理。
需要集中进行认证、授权的场景。
需要对 API 进行限流、熔断保护的场景。
需要统一记录 API 调用日志和监控指标的场景。
需要对外提供统一的 API 版本管理或协议转换的场景。
Spring Cloud Gateway 是现代微服务架构中的核心组件,作为高性能API网关,它能集中处理路由、安全和限流等功能,简化客户端与微服务的交互,提升系统稳定性和安全性,是Spring Cloud微服务的首选网关方案。