API 网关

API Gateway 是所有外部流量进入微服务前的统一处理层,承担鉴权、限流、路由、监控等横切关注点。

定位

客户端
   │
   ▼
API Gateway  ←── 所有请求的唯一入口
   │
   ├── user-service
   ├── order-service
   ├── payment-service
   └── ai-service

没有 API Gateway 时,每个微服务都要自己实现鉴权、限流、日志,造成大量重复逻辑。

核心能力

鉴权(Authentication & Authorization)

  • JWT 验证:网关解析 Token,注入用户信息到 Header,后端无需重复验证
  • OAuth2:统一授权,支持第三方登录
  • API Key:对外开放接口的简单鉴权
请求携带 JWT Token
   │
   ▼
网关解析 Token
   ├── 合法 → 注入 X-User-Id: 123 → 转发
   └── 非法 → 401 Unauthorized

限流(Rate Limiting)

策略说明
全局限流所有请求总 QPS 上限
用户级限流每个用户 N 次/秒
IP 限流防止单 IP 刷接口
接口限流核心接口单独保护

算法:

  • 令牌桶(Token Bucket):允许突发流量
  • 滑动窗口(Sliding Window):精准控制时间窗口内请求数
  • 漏桶(Leaky Bucket):平滑输出,防止突刺

路由(Routing)

路由维度示例
路径路由/api/user → user-service
Header 路由X-Version: v2 → v2 服务
灰度路由5% 流量 → 新版本 Pod
地域路由国内请求 → 国内集群

其他能力

  • 协议转换:REST → gRPC、WebSocket 升级
  • 请求/响应改写:添加 Header、修改 Body
  • API 聚合:将多个服务的响应合并后返回(BFF 模式)
  • 统一日志:所有请求的访问日志集中采集
  • OpenAPI 文档:自动生成接口文档

主流方案对比

网关语言特点适用场景
KongGo + Lua插件生态最丰富,商业版功能强企业级,多语言团队
APISIXGo + Lua国产,性能强,动态配置高并发,国内团队
Envoy GatewayGoService Mesh 生态,K8s Gateway API 标准云原生,Istio 配套
Spring Cloud GatewayJavaSpring 生态无缝集成Java 微服务团队
TraefikGo自动发现,配置简单中小规模,K8s 原生

K8s Gateway API

K8s 官方正在用 Gateway API 替代 Ingress,提供更强的表达能力:

GatewayClass → Gateway → HTTPRoute → Service

相比 Ingress 的优势:

  • 多租户(不同团队管理不同 Route)
  • 支持 Header/Query 路由
  • 支持流量权重(金丝雀发布原生支持)
  • 支持 TLS 终止配置

网关 vs Ingress vs Service Mesh

维度API GatewayIngressService Mesh
流量方向南北向(外→内)南北向(外→内)东西向(内→内)
部署位置集群边界集群边界每个 Pod Sidecar
鉴权基础mTLS
限流插件支持
熔断
可观测基础深度

Java 实战(Spring Cloud)