网关-微服务网关入门

发布于:2025-07-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

网关-微服务网关入门

在微服务架构中,网关(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-service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1
            - AuthFilter

        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/api/order/**
          filters:
            - StripPrefix=1
  • id:路由唯一标识
  • uri:目标服务地址,lb 表示使用负载均衡
  • predicates:路由匹配规则(如路径)
  • filters:请求过滤器(如鉴权、限流)

五、自定义过滤器(Filter)

@Component
public class AuthFilter implements GatewayFilter, Ordered {

    @Override
    public 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();
        }

        // 验证 token 合法性(如 JWT 解析)

        return chain.filter(exchange);
    }

    @Override
    public 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 生态集成良好,支持响应式编程模型,具备高性能和可扩展性。


网站公告

今日签到

点亮在社区的每一天
去签到