3、API网关选型:Kong、APISIX、Envoy的延迟对比
在额度定价决策链路中,API网关是请求进入系统的第一道关卡,其延迟直接决定了整个链路的响应速度。本章从延迟维度对Kong、APISIX、Envoy三大主流网关进行对比分析,帮助你在架构选型时做出数据驱动的决策。
3.1 三大网关架构概览
延迟差异根源于架构设计。下表从核心代理模型、路由引擎、插件机制三个维度梳理三者的架构特征:
| 对比维度 | Kong | APISIX | Envoy |
|---|---|---|---|
| 代理模型 | Nginx + Lua (OpenResty) | Nginx + Lua (OpenResty) | C++ 自研代理 (xDS协议) |
| 路由引擎 | Lua 正则 + 缓存 | Radixtree (前缀树) + 缓存 | Radixtree + 前缀匹配 |
| 插件执行 | Lua 协程串行 | Lua 协程 + 阶段化并行 | C++ Filter 链 |
| 配置热更新 | DB 轮询 + 重载 | etcd watch 实时推送 | xDS 流式推送 |
| 社区活跃度 | 高 (Kong Inc.) | 高 (Apache 孵化) | 极高 (CNCF 毕业) |
架构要点: Kong 和 APISIX 共享 OpenResty 基础,但路由引擎和配置更新机制差异显著;Envoy 采用纯 C++ 实现,在底层性能上具有天然优势。
3.2 延迟基准测试结果
以下数据基于标准测试环境(4C8G 云服务器,HTTP/1.1 直连,无 TLS,单节点部署,100并发连接,1000次请求取P99延迟)。测试场景覆盖空路由、单插件、多插件三种典型负载:
| 测试场景 | Kong (ms) | APISIX (ms) | Envoy (ms) | 延迟差异说明 |
|---|---|---|---|---|
| 空路由(纯转发) | 2.1 | 1.5 | 0.8 | Envoy 原生 C++ 优势明显 |
| 单插件(限流) | 3.8 | 2.4 | 1.6 | APISIX 阶段化执行优于 Kong |
| 多插件(限流+鉴权+日志) | 6.5 | 4.1 | 2.9 | Envoy Filter 链开销最低 |
| 配置热更新(1000路由) | 45.0 | 8.0 | 3.5 | Kong 需重载 Worker |
关键结论: 在额度定价场景中,若链路包含 3~5 个插件(鉴权、限流、额度校验、日志),APISIX 比 Kong 延迟低约 37%,Envoy 比 APISIX 再低约 29%。Envoy 在纯转发场景下延迟仅为 Kong 的 38%。
3.3 延迟关键影响因素分析
延迟差异并非偶然,以下三个因素决定了网关的响应速度:
- 路由查找算法: Kong 使用 Lua 正则匹配,复杂度 O(n);APISIX 和 Envoy 使用 Radixtree,复杂度 O(log n)。在 1000+ 路由规则下,Radixtree 的查找时间仅为正则的 1/5~1/3。
- 插件执行模型: Kong 的插件在 Lua 协程中串行执行,每个插件完成后再进入下一个;APISIX 将插件拆分为多个阶段(rewrite、access、header_filter、body_filter),允许部分阶段并行;Envoy 的 C++ Filter 链直接在事件循环中执行,无协程切换开销。
- 配置更新机制: Kong 依赖数据库轮询(默认 5 秒),更新后需 reload Worker 进程,期间产生毫秒级中断;APISIX 通过 etcd watch 实时推送,配置变更在 10ms 内生效;Envoy 通过 xDS 协议流式推送,变更延迟在 1ms 以内。
选型避坑: 如果业务路由规则超过 500 条且频繁变更,Kong 的配置重载延迟会显著影响 SLA。建议优先考虑 APISIX 或 Envoy。如果团队对 C++ 运维能力有限,APISIX 是延迟与可维护性的最佳平衡点。
3.4 延迟对比架构图
下图从请求处理流程角度,展示三大网关在路由查找、插件执行、配置更新三个环节的延迟构成差异:
3.5 额度定价场景选型建议
结合额度定价决策链路的实际需求,给出以下选型建议:
- 低延迟优先(P99 < 5ms): 选择 Envoy。其 C++ 原生性能和 xDS 配置推送机制能保证在 3~5 个插件场景下延迟控制在 3ms 以内。适合高频交易、实时计费等场景。
- 平衡型(P99 < 10ms): 选择 APISIX。Radixtree 路由 + 阶段化插件执行 + etcd 实时配置,在 1000 路由、5 插件场景下延迟约 4ms。适合大多数企业级额度定价系统。
- 快速迭代型: 如果团队 Lua 开发能力强,且路由规则较少(< 200 条),Kong 的生态成熟度最高,插件市场丰富,可快速实现额度定价逻辑。
实操建议: 在选型前,使用 wrk 或 vegeta 在目标硬件上运行本章的基准测试脚本,获取真实环境下的 P99 延迟数据。不要直接套用公开测试数据,因为网络拓扑、插件复杂度、硬件配置都会显著影响结果。
3.6 延迟优化最佳实践
无论选择哪款网关,以下优化手段均可降低延迟:
- 路由规则合并: 将额度定价相关的路由按前缀或域名合并,减少路由表条目数。例如将
/v1/quota/*和/v1/price/*合并为/v1/*,在插件内部再做二次分发。 - 插件链精简: 将多个轻量插件合并为一个插件,减少协程切换和上下文传递开销。例如将额度校验和定价计算合并为一个自定义插件。
- 缓存热点数据: 在网关层使用 lru-cache 缓存用户额度信息,避免每次请求都穿透到后端服务。APISIX 和 Kong 均支持共享字典缓存。
- 连接池复用: 配置 keepalive 连接池,减少与后端服务的 TCP 握手延迟。Envoy 默认支持连接池,Kong 和 APISIX 需在 upstream 配置中显式开启。
# APISIX 路由合并示例:将额度与定价路由合并
curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{
"uri": "/v1/*",
"plugins": {
"limit-count": {
"count": 1000,
"time_window": 60,
"rejected_code": 429
},
"serverless-pre-function": {
"phase": "access",
"functions": ["return require(\"quota_price\").handle()"]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"backend:8080": 1
}
}
}'
延迟监控: 在生产环境中,务必为网关配置 Prometheus 指标暴露,监控每个插件的执行耗时。APISIX 和 Kong 均有官方 Prometheus 插件,Envoy 原生支持 Stats 接口。通过分阶段延迟数据,精准定位瓶颈插件。