2. API 网关基础架构:主流网关架构对比与请求生命周期

API 网关作为微服务架构的流量入口,其架构设计直接决定了延迟基线与扩展能力。本章从主流网关的架构差异出发,深入分析请求在网关内部的关键路径,为后续延迟诊断与性能调优奠定基础。

2.1 主流网关架构对比

当前生产环境中,Nginx、Kong、APISIX 与 Envoy 是四种最具代表性的网关实现。它们在代理模型、插件机制、控制面与数据面分离程度等方面存在显著差异。

特性维度 Nginx Kong APISIX Envoy
核心语言 C OpenResty (Nginx + Lua) OpenResty + Go (控制面) C++
插件模型 静态编译 / 动态模块 Lua 脚本 (运行时加载) Lua / WASM / Go (热加载) Filter 链 (C++ / Lua / WASM)
控制面 无独立控制面 RESTful Admin API Admin API + etcd 存储 xDS 协议 (Istio / Consul)
数据面 Worker 进程模型 Nginx Worker + Lua VM Nginx Worker + 共享字典 Worker 线程 + L3/L4/L7 代理
路由性能 静态哈希 / 正则 Lua 路由 (缓存) Radix Tree (前缀树) Trie 路由 + 通配符
热更新能力 reload 进程 reload / 插件热加载 无 reload 热更新 热重启 / 热替换
多集群支持 手动配置 DB 同步 / 控制面 etcd 集群 + 控制面 xDS 多集群发现
选型建议: 若团队对延迟极度敏感且路由规则稳定,Nginx 静态编译方案延迟最低;若需要动态路由与丰富插件生态,APISIX 的 Radix Tree 路由与热更新机制在性能与灵活性之间取得了较好平衡;Envoy 更适合云原生 Service Mesh 场景,其 xDS 协议天然支持多集群通信。

2.2 请求生命周期与关键路径

无论采用哪种网关,一次完整的 API 请求在网关内部都会经历以下关键阶段。理解这些阶段是定位延迟瓶颈的前提。

  1. 连接建立:TCP 三次握手、TLS 握手(若启用 HTTPS)。
  2. 请求解析:HTTP 头部解析、Body 读取(若需要缓冲)。
  3. 路由匹配:根据 Host、Path、Method、Header 等条件查找匹配的上游服务。
  4. 插件/过滤器链:认证、限流、日志、改写等中间件依次执行。
  5. 负载均衡:从上游服务实例列表中选择目标节点。
  6. 上游连接:与上游服务建立连接(或复用连接池)。
  7. 请求转发与响应:发送请求到上游,接收响应并返回客户端。
关键路径延迟分解: 在典型生产环境中,路由匹配与插件链执行通常占总延迟的 15%~30%;上游网络往返(RTT)占 50%~70%;连接建立与解析占 5%~15%。调优应优先关注上游连接复用与插件链执行效率。
请求生命周期关键路径流程图 连接建立 请求解析 路由匹配 插件链 负载均衡 上游转发 延迟占比参考: 连接建立 5%~10% | 请求解析 3%~5% | 路由匹配 5%~10% | 插件链 10%~20% | 负载均衡 1%~3% | 上游转发 50%~70% 连接池复用可降低 60%~80% 连接建立延迟 插件链中认证/限流是主要延迟贡献者 图:请求在网关内部依次经过的 6 个关键阶段,以及各阶段典型延迟占比

2.3 多集群通信机制

在跨集群部署场景下,API 网关需要处理集群间的服务发现、流量路由与故障转移。主流网关在多集群通信上采用了不同的策略。

  • DNS 轮询 + 静态配置:Nginx 传统方案,通过 DNS 解析多个集群入口,手动配置 upstream。延迟低但缺乏动态感知。
  • 控制面同步:Kong 与 APISIX 通过数据库(PostgreSQL / etcd)在集群间同步路由与上游信息,数据面只读缓存。
  • xDS 协议:Envoy 原生支持通过 xDS 从控制面(如 Istio Pilot)获取多集群服务端点,支持自动故障转移与权重路由。
多集群延迟陷阱: 跨集群调用时,网络 RTT 通常比同集群高 2~5 倍。若网关与上游服务部署在不同可用区,连接建立阶段的 TLS 握手延迟可能从 1ms 飙升到 10ms+。建议在网关层启用连接池与 TLS 会话复用,并优先将网关与上游部署在同一集群或可用区。
多集群通信架构对比 集群 A (主集群) API 网关 (数据面) 上游服务 A1 上游服务 A2 控制面 (etcd/DB) 集群 B (远端集群) API 网关 (数据面) 上游服务 B1 上游服务 B2 控制面同步 (xDS / etcd watch) 跨集群请求转发 (HTTP/gRPC) 控制面同步延迟通常为 100ms~500ms,数据面跨集群 RTT 为 1ms~20ms(同区域)或 50ms~200ms(跨区域)

2.4 关键路径延迟分解实践

在实际调优中,我们通常使用火焰图或分布式追踪来分解请求在网关内部的耗时。以下是一个典型的 Nginx 网关延迟分解示例:

# 使用 ngx_http_reqstat_module 采集延迟分布
# 请求总延迟: 45ms
# ├── 连接建立: 3ms  (6.7%)
# ├── 请求解析: 2ms  (4.4%)
# ├── 路由匹配: 4ms  (8.9%)
# ├── 插件链:   8ms  (17.8%)  ← 认证插件占 5ms
# ├── 负载均衡: 1ms  (2.2%)
# └── 上游转发: 27ms (60.0%)  ← 上游服务响应时间
调优切入点: 若插件链延迟占比超过 20%,应优先优化认证/限流插件的执行效率(如使用本地缓存替代远程调用);若上游转发延迟占比超过 70%,应检查连接池配置与上游服务自身性能。

2.5 本章小结

API 网关的架构选择直接影响延迟基线与运维复杂度。Nginx 适合静态路由场景,Kong 与 APISIX 在动态性与性能之间取得了良好平衡,Envoy 则是云原生多集群通信的首选。请求生命周期的 6 个关键阶段中,插件链与上游转发是延迟的主要贡献者,也是调优的核心目标。多集群通信时,控制面同步延迟与跨集群 RTT 是需要重点关注的指标。