API 网关:微服务入口的统一管控

·... 次阅读
分享:

什么是 API 网关

API 网关是微服务架构中的反向代理入口,所有外部请求先经过网关,再由网关路由到对应的微服务。

没有网关时,客户端需要知道每个微服务的地址,耦合严重。引入网关后,客户端只需知道网关地址,由网关统一处理横切关注点。

核心职责

1. 路由转发

根据请求路径、Header 等规则,将请求转发到对应的后端服务。

/api/users/**    → user-service
/api/orders/**   → order-service
/api/products/** → product-service

2. 认证与鉴权

在网关层统一校验 JWT Token、OAuth2 等,避免每个微服务重复实现认证逻辑。校验通过后将用户信息通过 Header 透传给下游。

3. 限流与熔断

保护后端服务不被突发流量冲垮:

  • 限流:令牌桶、滑动窗口,按用户/IP/API 维度控制 QPS
  • 熔断:下游服务异常时快速失败,避免级联故障

4. 请求聚合

将多个微服务的响应合并为一次返回,减少客户端请求次数。例如首页需要用户信息 + 订单列表 + 推荐商品,网关可以并发请求三个服务后聚合返回。

5. 日志与监控

网关是所有流量的必经之路,天然适合做:

  • 统一日志记录
  • 请求耗时统计
  • 调用链起始点(生成 TraceID)

主流方案

Spring Cloud Gateway(Java 生态)

基于 WebFlux 的响应式网关,性能优秀:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/users/**
          filters:
            - StripPrefix=1
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 10

优势:与 Spring 生态无缝集成,支持服务发现、负载均衡。

Kong / APISIX(通用网关)

基于 OpenResty (Nginx + Lua) 的高性能网关,通过插件扩展:

  • Kong:插件丰富,企业级功能完善
  • APISIX:性能更高,支持多语言插件
# APISIX 创建路由
curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{
  "uri": "/api/users/*",
  "upstream": {
    "type": "roundrobin",
    "nodes": { "user-service:8080": 1 }
  },
  "plugins": {
    "limit-req": { "rate": 100, "burst": 50 }
  }
}'

网关选型建议

方案 适用场景 性能 生态
Spring Cloud Gateway Java 技术栈 强(Spring 全家桶)
Kong 多语言/混合架构 强(插件市场)
APISIX 高性能场景 极高 中(快速成长)
Traefik K8s/容器化 强(云原生)
Envoy + Istio Service Mesh 最高 强(CNCF 毕业)

注意事项

  1. 网关不要做重业务逻辑:网关是基础设施,保持轻量
  2. 注意网关自身高可用:网关挂了全部服务不可用,需要多副本 + 健康检查
  3. 超时配置:聚合请求场景要合理设置超时和降级策略
  4. 避免网关成为瓶颈:IO 密集型的网关适合异步非阻塞模型

评论