网关-微服务网关入门
在微服务架构中,网关(Gateway) 是一个非常重要的组件,它位于客户端与微服务之间,作为所有请求的统一入口。网关的主要作用是对请求进行路由、过滤、限流、鉴权、负载均衡等操作,从而简化客户端与微服务之间的交互逻辑。
一、网关的作用
功能 | 说明 |
---|
路由转发(Routing) | 根据请求路径将请求转发到对应的微服务 |
统一入口(API Entry) | 所有请求都经过网关,避免客户端直接调用多个服务 |
身份认证(Authentication) | 在网关层做统一的鉴权,如 JWT 校验 |
权限控制(Authorization) | 控制不同用户或角色对 API 的访问权限 |
限流(Rate Limiting) | 限制单位时间内请求次数,防止系统过载 |
熔断与降级(Circuit Breaker) | 当服务不可用时,返回默认响应,提升系统稳定性 |
日志记录(Logging) | 记录请求日志,便于监控和审计 |
协议转换(Protocol Translation) | 如 HTTP 转 gRPC、WebSocket 等 |
负载均衡(Load Balancing) | 请求分发到多个服务实例,提高可用性 |
二、常见的网关实现方案
网关类型 | 说明 | 适用场景 |
---|
Spring Cloud Gateway | Spring 官方推荐的网关,基于 WebFlux | Spring Cloud 微服务架构 |
Zuul(Netflix) | Netflix 开源的同步网关(已过时) | 旧版 Spring Cloud 项目 |
Kong | 基于 Nginx 的高性能网关,支持插件扩展 | 企业级 API 管理、高并发场景 |
Envoy | 由 Lyft 开源,支持多种协议,适合云原生 | 服务网格(Service Mesh)环境 |
Nginx + Lua | 使用 Lua 脚本扩展 Nginx 实现网关功能 | 高性能、低延迟场景 |
Traefik | 支持自动服务发现,与 Kubernetes 集成良好 | 云原生、K8s 环境 |
三、Spring Cloud Gateway 的核心概念
1. Route(路由)
- 定义了请求如何转发到具体的服务。
- 包含:ID、目标 URI、断言(Predicate)、过滤器(Filter)等。
2. Predicate(断言)
- 用于匹配请求是否符合路由条件。
- 示例:路径、方法、Header、Query 参数等。
3. Filter(过滤器)
- 对请求和响应进行拦截处理。
- 可用于鉴权、限流、日志记录等。
四、Spring Cloud Gateway 示例配置(application.yml
)
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/api/user/**filters:- StripPrefix=1- AuthFilter- id: order-serviceuri: lb://order-servicepredicates:- Path=/api/order/**filters:- StripPrefix=1
id
:路由唯一标识uri
:目标服务地址,lb
表示使用负载均衡predicates
:路由匹配规则(如路径)filters
:请求过滤器(如鉴权、限流)
五、自定义过滤器(Filter)
@Component
public class AuthFilter implements GatewayFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token == null || !token.startsWith("Bearer ")) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() {return 0; }
}
- 在请求进入具体服务前进行身份验证
- 可结合 JWT、OAuth2、Spring Security 等实现统一鉴权
六、网关在微服务架构中的位置
[客户端] → [网关(Gateway)] → [微服务A]、[微服务B]、[微服务C]
- 所有请求必须经过网关
- 网关负责将请求路由到正确的服务
- 网关可集中处理安全、限流、日志等通用逻辑
七、网关的部署方式
部署方式 | 说明 |
---|
单实例部署 | 简单,适合小型项目 |
集群部署 | 提高可用性和性能 |
Kubernetes Ingress | 在 K8s 中使用 Ingress 作为网关 |
API 网关 + 服务网格 | 在 Istio 等服务网格中作为外部入口 |
八、总结:网关的核心价值
价值 | 说明 |
---|
统一入口 | 所有请求都通过网关进入系统 |
安全控制 | 集中处理身份认证、权限控制 |
服务治理 | 限流、熔断、负载均衡 |
日志监控 | 统一记录请求日志,便于分析 |
协议兼容 | 支持多种协议转换 |
灵活扩展 | 可通过插件或自定义 Filter 扩展功能 |
九、推荐使用场景
- 微服务数量较多,需要集中管理 API
- 需要统一鉴权、限流、日志记录
- 使用 Spring Cloud 技术栈
- 需要支持动态路由和服务发现
- 需要高并发、高性能的 API 管理能力
如果使用 Spring Boot + Spring Cloud 构建微服务系统,Spring Cloud Gateway 是一个非常推荐的选择,它与 Spring 生态集成良好,支持响应式编程模型,具备高性能和可扩展性。