This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
all-in-kingsoft/hzh/MS/02-服务治理/API网关

tags, create time
tags create time
microservice
api-gateway
kong
apisix
spring-cloud-gateway
2026-05-05

API 网关

概述

API Gateway 是所有外部请求的统一入口,承担以下职责:

graph LR
    Client["客户端 App / Web"] --> GW["API Gateway"]
    GW --> Auth["鉴权 & 限流"]
    GW --> Route["路由转发"]
    GW --> Transform["协议转换"]
    GW --> Log["日志 & 监控"]
    GW -.-> CB[(配置中心)]

常见实现:Kong、APISIX、Spring Cloud Gateway、Nginx + Lua。

网关应该做什么?

[!summary] 网关职责清单

✅ 适合放 ❌ 不应该放
鉴权与认证 业务逻辑(如订单创建)
限流熔断 复杂的数据聚合查询
HTTPS 终结 大量 CPU 密集型计算
请求/响应转换 涉及数据库写操作
路由分发 跨服务事务管理
日志 & 监控 邮件/短信发送等异步任务

[!tip] 核心原则 网关保持瘦——它是 traffic cop(交通警察),不是 warehouse manager(仓库管理员)。重逻辑应下沉到业务服务。

分层鉴权模型

[!question] 权衡题 有人说:"鉴权放到网关统一做,避免每个服务重复写。"但如果某个内部服务不需要鉴权呢?或者不同团队要求不同的鉴权方式呢?

分层鉴权架构:

graph TB
    External["外部用户"] --> GW["API Gateway<br/>JWT 校验 + OAuth2"]
    GW --> S1[公开接口<br/>无需额外鉴权]
    GW --> S2[内部接口<br/>Service Token]
    
    S1 --> UserSvc[[User Service]]
    S2 --> OrderSvc[[Order Service]]
    S2 --> PaySvc[[Payment Service]]
    
    OrderSvc -->|"mTLS + JWT"| DB[(DB)]
    PaySvc -->|"mTLS + JWT"| DB
  • 第一层(网关):校验外部用户的 JWT/OAuth Token,拦截非法请求
  • 第二层(服务间):通过 Service Token 或 mTLS 保证调用方身份可信
  • 第三层(数据层):RBAC / ABAC 细粒度权限控制

路由策略

基础路由规则

# APISIX 路由示例
routes:
  - uri: /api/orders/*
    upstream:
      nodes:
        "order-service:8080": 1
      type: roundrobin
  
  - uri: /api/payments/*
    upstream:
      nodes:
        "payment-service:8080": 1
      type: roundrobin

高级路由策略

策略 场景 示例
路径匹配 按 URL 前缀路由 /api/v1/* → v1 版本服务
Header 匹配 A/B 测试、灰度发布 x-canary: true → 新版本
权重路由 金丝雀发布 90% 流量 → v1, 10% → v2
正则匹配 复杂 URL 模式 /api/user/(?P<id>\d+)/*

网关插件体系

网关的核心价值在于 可插拔的中间件链,类似 Express/Koa 的 middleware 概念。

graph LR
    Req["Request"] -->|Plugin 1| RateLimiter["限流"]
    RateLimiter -->|Plugin 2| Auth["鉴权"]
    Auth -->|Plugin 3| CBR["熔断"]
    CBR -->|Plugin 4| Transform["协议转换"]
    Transform -->|Plugin 5| Logger["日志"]
    Logger --> Backend["Backend Service"]

常用插件列表

插件 作用 推荐算法
Rate Limiting 防刷限流 令牌桶 / 漏桶
CORS 跨域处理 预检缓存
IP 黑白名单 访问控制 Redis Bloom Filter
Response Rewrite 修改响应体 JSON Patch
Request Transformation Header/Body 改写 Map-based
Prometheus Exporter 指标采集 自动埋点
Fault Injection 混沌测试注入延迟/错误 按比例注入

网关的高可用设计

graph TB
    DNS["DNS / CLB"] --> GW1["Gateway Node 1"]
    DNS --> GW2["Gateway Node 2"]
    
    subgraph GW_Cluster["网关集群"]
        GW1
        GW2
    end
    
    GW1 --> B1["backend-pool-v1"]
    GW2 --> B2["backend-pool-v1"]
    
    B1 --> Svc1[[order-service]]
    B1 --> Svc2[[user-service]]
    B2 --> Svc1
    B2 --> Svc2
    
    GW1 -.-> Config["配置中心 (同步)"]
    GW2 -.-> Config

关键点:

  • 网关无状态设计,可横向扩展
  • 配置通过注册中心实时同步,无需重启
  • 多节点前接负载均衡器(CLB/Nginx)

关联笔记