4. 主流网关产品:Kong、APISIX、Envoy、Nginx Plus的配额能力对比
在云原生架构中,API网关的配额管理能力直接决定了流量治理的精细度与可靠性。Kong、Apache APISIX、Envoy Proxy 和 Nginx Plus 是目前市场占有率最高的四款网关产品,它们在配额模型、性能开销、扩展方式上存在显著差异。本节从架构视角出发,围绕配额模型、限速算法、动态生效、分布式支持四个维度进行横向对比。
4.1 配额模型与核心能力矩阵
下表从配额作用域、算法支持、动态配置、集群一致性四个关键维度,梳理四款产品的核心能力差异:
| 对比维度 | Kong (OSS/Enterprise) | Apache APISIX | Envoy Proxy | Nginx Plus |
|---|---|---|---|---|
| 配额作用域 | Route / Service / Consumer | Route / Service / Consumer / Plugin | Listener / Route / Cluster | Location / Server / Zone |
| 限速算法 | 令牌桶 + 滑动窗口 | 令牌桶 + 漏桶 + 滑动窗口 + 并发限制 | 令牌桶 (全局/每路由) | 漏桶 + 令牌桶 (通过模块) |
| 动态生效 | DB 变更 + 缓存刷新 (秒级) | etcd 推送 + 热加载 (毫秒级) | xDS 推送 (毫秒级) | 配置重载 (秒级,需 reload) |
| 分布式支持 | Redis / 集群模式 | Redis / etcd / 内置集群 | 全局服务 + 外部限速器 | 共享内存 + 外部模块 |
| 配额持久化 | 支持 (Enterprise) | 支持 (通过插件) | 需外部组件 | 需外部组件 |
| 配额预热 | 不支持 | 支持 (burst 预填充) | 支持 (令牌桶初始容量) | 不支持 |
架构选型提示: 如果团队追求毫秒级动态生效和丰富的算法组合,APISIX 的 etcd 驱动模型优势明显;如果已有 Nginx 生态且对动态性要求不高,Nginx Plus 的共享内存方案更易集成;Envoy 适合作为 Service Mesh 数据面,配额能力依赖外部限速器扩展;Kong 的 Consumer 级配额在 API 经济场景中最为成熟。
4.2 配额架构对比:中心化 vs 去中心化
四款产品在配额架构上分为两大流派:中心化存储型(Kong、APISIX)和 去中心化内存型(Envoy、Nginx Plus)。中心化方案依赖 Redis/etcd 做全局计数器,适合多节点强一致场景;去中心化方案使用共享内存或本地计数器,性能更高但跨节点协调复杂。
下图展示了两种架构的配额数据流差异:
4.3 接口调用实战:四款产品的配额配置对比
以下通过一个相同的业务场景——对 /api/v1/orders 路由设置每分钟 100 次请求配额,展示四款产品的配置差异:
4.3.1 Kong (使用 rate-limiting 插件)
# 通过 Admin API 为路由绑定配额
curl -X POST http://localhost:8001/routes/{route_id}/plugins \
-H "Content-Type: application/json" \
-d '{
"name": "rate-limiting",
"config": {
"minute": 100,
"policy": "redis",
"redis_host": "redis-cluster.example.com",
"redis_port": 6379,
"fault_tolerant": true
}
}'
4.3.2 Apache APISIX (使用 limit-req 插件)
# 通过 Admin API 为路由配置配额
curl -X PUT http://localhost:9180/apisix/admin/routes/1 \
-H "X-: edd1c9f034335f136f87ad84b625c8f1" \
-d '{
"uri": "/api/v1/orders/*",
"plugins": {
"limit-req": {
"rate": 100,
"burst": 20,
"rejected_code": 429,
"key": "remote_addr",
"redis_host": "127.0.0.1",
"redis_port": 6379,
"redis_timeout": 1000
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"order-service:8080": 1
}
}
}'
4.3.3 Envoy Proxy (使用本地限速过滤器)
# Envoy 配置文件片段:HTTP 连接管理器中的本地限速
http_filters:
- name: envoy.filters.http.local_ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: http_local_rate_limiter
_bucket:
max_tokens: 100
tokens_per_fill: 100
fill_interval: 60s
filter_enabled:
default_value:
numerator: 100
denominator: HUNDRED
filter_enforced:
default_value:
numerator: 100
denominator: HUNDRED
response_headers_to_add:
- header:
key: "X-RateLimit-Limit"
value: "100"
4.3.4 Nginx Plus (使用 limit_req 模块)
# nginx.conf 配置片段
http {
# 定义共享内存区域,大小 10MB
limit_req_zone $binary_remote_addr zone=orders_zone:10m rate=100r/m;
server {
location /api/v1/orders/ {
# 应用配额限制,burst 允许瞬时峰值
limit_req zone=orders_zone burst=20 nodelay;
limit_req_status 429;
proxy_pass http://order_backend;
}
}
}
配置避坑指南: Kong 和 APISIX 的 Redis 策略在生产中必须配置哨兵或集群模式,避免单点故障导致配额失效;Envoy 的本地限速器不支持跨节点配额聚合,多副本场景需配合全局限速服务(如 Lyft 的限速器);Nginx Plus 的 limit_req_zone 在 reload 时会丢失计数器状态,高精度场景建议使用外部模块。
4.4 性能与扩展性对比
基于社区基准测试和官方数据,四款产品在配额场景下的性能表现如下:
- Kong: 启用 rate-limiting 插件后,单节点 QPS 下降约 15%-20%(Redis 策略),集群模式下配额一致性较好,但 Redis 延迟会直接影响限速精度。
- APISIX: 使用 limit-req 插件时,性能损耗约 5%-10%,得益于 etcd 推送和 LuaJIT 优化,动态配置生效时间在 50ms 以内。
- Envoy: 本地限速器性能损耗极低(<3%),但全局限速场景需引入外部 gRPC 限速服务,增加架构复杂度。
- Nginx Plus: 共享内存限速性能优秀(<5% 损耗),但配置变更需 reload,对长连接场景不友好。
4.5 选型决策树
根据团队技术栈和业务需求,可参考以下决策路径:
架构建议: 对于新建云原生平台,推荐 APISIX 作为 API 网关,其配额模型原生支持 etcd 驱动,动态生效快且算法丰富;如果团队已有 Envoy 网格基础设施,建议使用全局限速服务(如基于 Redis 的限速器)补充配额能力,避免引入第二个网关层。