在单体应用时代,客户端直接调用后端服务,简单直接。
但当系统拆分为数十甚至上百个微服务后,问题来了:
- 前端要记住每个服务的 IP 和端口?
- 每个服务都要重复实现鉴权、限流、日志?
- 如何统一处理 HTTPS、跨域、路径重写?
- 灰度发布、A/B 测试怎么做?
这时候,微服务网关(API Gateway) 就成了整个系统的“统一入口”和“智能守门人”。
本文将带你深入理解微服务网关的价值、核心功能、主流方案对比,并通过 Spring Cloud Gateway 实战一个带鉴权和限流的网关示例。
一、什么是微服务网关?
微服务网关是位于客户端与后端微服务之间的反向代理层,所有外部请求必须先经过网关,再由网关路由到具体服务。
架构对比
无网关(混乱):
Client → Service A (8081)
Client → Service B (8082)
Client → Service C (8083)
有网关(统一):
Client → API Gateway (80)
↓
→ Service A
→ Service B
→ Service C
网关是微服务架构的标准组件,就像小区的门卫——统一登记、安检、分流。
二、微服务网关的核心功能
1. 统一入口
客户端只需知道网关地址(如 https://api.yourcompany.com)
隐藏内部服务拓扑,提升安全性
2. 路由转发
根据路径、域名、Header 等规则路由到不同服务
例如:/user/** → 用户服务,/order/** → 订单服务
3. 认证鉴权
在网关层统一校验 Token(如 JWT)
无效请求直接拦截,避免穿透到业务服务
4. 限流熔断
防止突发流量打垮后端(如每秒最多 1000 请求)
集成 Sentinel、Resilience4j 实现熔断降级
5. 日志与监控
记录请求日志、响应时间、状态码
对接 Prometheus + Grafana 实现可观测性
6. 协议转换
将 HTTP 请求转为 gRPC、WebSocket 等(部分网关支持)
7. 安全防护
防重放、防注入、IP 黑名单、CORS 配置
三、主流网关方案对比

推荐选择:
如果你是 Spring Boot 技术栈 → 选 Spring Cloud Gateway
如果你需要 超高性能 + 多语言支持 → 选 Kong
四、实战:用 Spring Cloud Gateway 构建网关
我们将搭建一个网关,实现:
- 路由到用户服务
- JWT 鉴权
- 基于 Redis 的限流
4.1. 创建网关项目
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
4.2. 配置路由(application.yml)
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/api/user/**
filters:
- StripPrefix=1 # 去掉 /api 前缀
4.3. 自定义鉴权过滤器
@Component
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token == null || !isValidToken(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
private boolean isValidToken(String token) {
// 简化:实际应解析 JWT 并校验签名
return token.startsWith("Bearer valid-token");
}
@Override
public int getOrder() {
return -100; // 优先级高
}
}
4. 集成 Redis 限流(基于令牌桶)
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/api/user/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10 # 每秒生成 10 个令牌
redis-rate-limiter.burstCapacity: 20 # 最大突发 20
key-resolver: "#{@userKeyResolver}"
五、网关设计最佳实践
1. 不要在网关做业务逻辑
网关只负责“通用横切关注点”(auth、log、rate limit)
业务校验交给具体服务
2. 高可用部署
网关本身需集群部署 + 负载均衡(如 Nginx 前置)
避免单点故障
3. 性能监控
监控网关 CPU、内存、请求延迟
设置告警(如错误率 > 1%)
4. 灰度发布支持
通过 Header 或 Cookie 路由到新版本服务
predicates:
- Header=X-Canary, true
六、常见误区
误区 1:网关能替代服务注册中心
网关负责路由,但服务发现仍需 Eureka/Nacos/Consul。
误区 2:所有逻辑都塞进网关
网关不是“万能胶水”,过度使用会导致性能瓶颈和维护困难。
误区 3:忽略网关自身的安全
网关是攻击第一入口,必须做好防 DDoS、防注入等措施。
结语
微服务网关不是“可有可无”的组件,而是# 保障系统稳定性、安全性和可维护性的关键基础设施。
无论你选择 Spring Cloud Gateway 的轻量集成,还是 Kong 的高性能插件生态,核心目标都是一致的:让客户端无感,让服务专注业务。
从今天开始,为你的微服务系统加上一道“智能门禁”吧!