微服务服务网关详解(图文全面总结)

微服务服务网关是大型架构的必备技能,也是微服务的核心,下面我重点详解微服务服务网关@mikechen

微服务服务网关

微服务服务网关,是一种位于客户端和后端微服务之间的独立服务。

它充当着所有外部请求的统一入口点,负责接收来自客户端的请求,并将这些请求路由到相应的后端微服务上。

微服务服务网关详解(图文全面总结)

简单来说,网关就是微服务架构的“入口”,所有的外部流量都必须经过它,然后由它智能地分发到各个内部服务。

同时,网关还可以在请求到达微服务之前或响应返回客户端之后,执行一系列横切关注点(Cross-cutting Concerns)。

比如:认证、授权、限流、日志记录…等,都可以集成到微服务网关来解决。

 

微服务服务网关功能

服务网关的功能非常丰富,涵盖了从流量管理到安全防护的多个层面。

如下图所示:

微服务服务网关详解(图文全面总结)

 

动态路由 

根据预定义的规则,将请求转发到不同的后端服务实例。

比如:按照路径匹配、主机名、HTTP 方法、请求头、查询参数…等,请求分发。

spring:
  cloud:
    gateway:
      routes:
        - id: user_service
          uri: lb://user-service
          predicates:
            - Path=/user/**

 

统一认证与授权 

在请求到达后端服务前,统一对用户进行身份验证(如OAuth2, JWT校验)。

@Component
public class AuthFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        if (token == null || !validateToken(token)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
}

执行权限校验,确保用户有权,访问请求的资源。

 

限流

限制客户端在一定时间内的请求次数,防止恶意攻击或流量突增导致系统过载。

spring:
  cloud:
    gateway:
      routes:
        - id: order_service
          uri: lb://order-service
          predicates:
            - Path=/order/**
          filters:
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 1000
                redis-rate-limiter.burstCapacity: 2000

防止服务过载,支持基于令牌桶等算法的分布式限流,以及熔断降级机制。

 

微服务服务网关原理

服务网关的核心实现逻辑,一般包括以下几个步骤:

微服务服务网关详解(图文全面总结)

1. 请求接收与解析

客户端发起请求,网关作为第一个接收者。

网关解析请求的路径、方法、Header、参数等。

2. 路由匹配与服务发现

通过静态配置或注册中心(如 Nacos、Eureka)获取目标服务地址。

根据匹配规则(如 URL、版本号、Header)确定下游服务。

3. 前置处理(前置过滤器)

执行身份验证、日志打印、限流策略、安全检查等。

4. 请求转发

使用异步、非阻塞机制(如 Netty、Reactor)将请求转发到目标服务。

5. 后置处理(后置过滤器)

处理响应结果,添加统一响应头、包装返回体、记录日志。

6. 响应返回

将结果异步返回客户端,保证低延迟与高吞吐。

 

微服务网关选型

微服务网关选型,如下图所示:

网关 核心语言 阻塞模型 可扩展性 性能 Spring 集成度 云原生适配
Spring Cloud Gateway Java + Reactor 非阻塞 ✅ 强 ✅ 深度融合
Zuul 1.x Java(Servlet) 阻塞
Zuul 2 Java + Netty 非阻塞
Kong Lua + Nginx 非阻塞 插件化
Nginx C 非阻塞 弱(需改配置或脚本) 极高
Traefik Go 非阻塞 插件化 ✅ K8s友好
Envoy Gateway / Istio Gateway C++ 非阻塞 云原生优先 ✅ Service Mesh

 

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧