1565 字
8 分钟
现代微服务 API 网关完全指南 2026:Apache APISIX vs Envoy vs Kong 选型 + 动态路由 + 插件实战
在分布式微服务架构中,API 网关(API Gateway) 处于整座系统架构的最前端,是所有外部流量进出的咽喉要道。
它承担着动态路由寻址、协议转换(HTTP 转 gRPC)、统一鉴权认证(JWT/OAuth2)、全链路安全防刷限流、灰度金丝雀分流与分布式链路追踪等关键职责。传统的静态 nginx.conf 频繁 reload 已无法适应现代微服务的高频发布诉求。
本文遵循 EEAT 架构专家标准,深度横评 2026 年三大主流网关(Apache APISIX vs Envoy vs Kong),并以 Apache APISIX 为实战基准,全面拆解动态路由、插件开发与生产高可用落地。
架构对比:三大主流 API 网关全维度选型矩阵
| 维度 | Apache APISIX 3.x+ | Envoy Proxy (1.30+) | Kong Gateway 3.x+ | 传统 Nginx 反代 |
|---|---|---|---|---|
| 核心开发语言 | Nginx C + LuaJIT | 纯 C++ | OpenResty C + Lua | 纯 C 语言 |
| 控制面存储 | 🥇 etcd (分布式共识) | xDS (动态 gRPC 控制面) | PostgreSQL / DB-less YAML | 本地静态配置文件 |
| 路由匹配算法 | 🥇 Radix Tree (基数树,O(K)复杂度) | Trie 树 / 正则匹配 | 正则与前缀逐条匹配 | 逐条 Location 匹配 |
| 配置热更新机制 | 🥇 Zero-Reload (毫秒级 etcd Watch) | 🥇 Zero-Reload (xDS 流式推送) | 毫秒级 (依赖轮询/DB-less) | ❌ 必须 nginx -s reload (断连接) |
| 插件多语言支持 | 🥇 Lua, Wasm, Go, Python, Java | C++, Wasm | Lua, Go, JavaScript | 仅支持 C 模块 / NGINX Lua |
| 单机并发吞吐量 | 🥇 极高 (15万~25万 QPS) | 🥇 极高 (15万~20万 QPS) | ⭐⭐⭐⭐ (10万~15万 QPS) | 极高 (但无业务动态能力) |
| Kubernetes 网关集成 | APISIX Ingress Controller | 🥇 Envoy Gateway (标准 Gateway API) | Kong Ingress Controller | Ingress-Nginx |
| 生产最佳适用场景 | 企业统一业务 API 网关、多租户中台 | Service Mesh 服务网格数据面、云原生网关 | 经典老牌系统迁移、海外 SaaS 生态集成 | 纯静态资源托管、简单四层端口转发 |
一、API 网关在微服务全栈中的核心定位
[ 客户端: Web / iOS / Android / 开放平台 API ] │ HTTPS / WSS ▼ ┌──────────────────────────────────────────────┐ │ Apache APISIX API Gateway (统一接入层) │ │ - SSL 卸载 / SNI 动态证书 │ │ - JWT / OIDC / API Key 统一鉴权 │ │ - 限流熔断 (Limit-Req / Circuit-Breaker) │ │ - 动态金丝雀灰度发布 (Traffic Split) │ │ - OpenTelemetry / Prometheus 自动可观测 │ └───────────────────────┬──────────────────────┘ │ 毫秒级动态路由分发 ┌───────────────────────┴───────────────────────┐ │ gRPC (Protobuf) │ HTTP REST ▼ ▼ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │ User Microservice (Go) │ │ Order Microservice (Rust) │ │ - gRPC Server (:50051) │ │ - Axum HTTP Server (:8080) │ └──────────────┬──────────────┘ └──────────────┬──────────────┘ │ │ └───────────────────────┬───────────────────────┘ ▼ [ 数据存储: PostgreSQL / Redis ]二、Docker Compose 生产级部署 APISIX + etcd + Dashboard
services: # ── 1. etcd 配置共识中枢 ───────────────────────────────────── etcd: image: bitnami/etcd:3.5.14 container_name: apisix-etcd restart: unless-stopped environment: - ALLOW_NONE_AUTHENTICATION=yes - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 volumes: - etcd_data:/bitnami/etcd ports: - "2379:2379" networks: - apisix-net
# ── 2. Apache APISIX 网关数据面 ────────────────────────────── apisix: image: apache/apisix:3.9.1-debian container_name: apisix-server restart: unless-stopped volumes: - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro ports: - "80:9080" # 外部 HTTP 流量入口 - "443:9443" # 外部 HTTPS 流量入口 - "9180:9180" # Admin API 控制面管理端口 (必须内网隔离!) - "9091:9091" # Prometheus Metrics 监控指标端口 networks: - apisix-net depends_on: - etcd
# ── 3. APISIX Dashboard 可视化管理控制台 ───────────────────── apisix-dashboard: image: apache/apisix-dashboard:3.0.1-alpine container_name: apisix-dashboard restart: unless-stopped volumes: - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:ro ports: - "9000:9000" # 控制台访问端口 networks: - apisix-net depends_on: - apisix
volumes: etcd_data:
networks: apisix-net: driver: bridge三、APISIX 动态路由与核心功能实战(Admin API)
所有配置通过 REST API 直接与 etcd 交互,完全无需 Reload 即可在全网关节点毫秒级生效。
3.1 创建高可用负载均衡上游(Upstream)
curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" \ -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" \ -X PUT -d '{ "type": "roundrobin", "name": "user-service-cluster", "nodes": { "192.168.1.50:8080": 80, "192.168.1.51:8080": 20 }, "checks": { "active": { "http_path": "/health", "healthy": { "interval": 2, "successes": 1 }, "unhealthy": { "interval": 1, "http_failures": 2 } } } }'3.2 创建包含 JWT 鉴权与精准限流的路由(Route)
curl "http://127.0.0.1:9180/apisix/admin/routes/100" \ -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" \ -X PUT -d '{ "uri": "/api/v1/orders/*", "name": "order-api-route", "methods": ["GET", "POST", "PUT"], "upstream_id": "1", "plugins": { "jwt-auth": {}, "limit-req": { "rate": 100, "burst": 50, "key_type": "var", "key": "consumer_name", "rejected_code": 429 }, "prometheus": { "prefer_name": true }, "opentelemetry": { "sampler": { "name": "always_on" } } } }'3.3 金丝雀灰度发布实战(Traffic Split 按比例分流)
在不中断线上服务的情况下,将 10% 流量无缝切往新版 v2 服务,验证无误后逐步平滑提升至 100%:
curl "http://127.0.0.1:9180/apisix/admin/routes/101" \ -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" \ -X PUT -d '{ "uri": "/api/v1/payment/*", "name": "canary-payment-route", "plugins": { "traffic-split": { "rules": [ { "weighted_upstreams": [ { "upstream_id": "1", "weight": 90 }, { "upstream": { "name": "payment-v2-canary", "type": "roundrobin", "nodes": { "192.168.1.60:8080": 1 } }, "weight": 10 } ] } ] } } }'四、自定义插件开发实战(Lua 极速插件)
当内置 100+ 插件无法满足特定的企业私有协议验证时,可以在 5 分钟内编写一个高性能自定义插件:
-- /usr/local/apisix/apisix/plugins/tenant-auth.lualocal core = require("apisix.core")local plugin_name = "tenant-auth"
local schema = { type = "object", properties = { header_key = { type = "string", default = "X-Tenant-ID" } }, required = { "header_key" }}
local _M = { version = 0.1, priority = 2500, -- 优先级高于普通业务插件 name = plugin_name, schema = schema}
function _M.check_schema(conf) return core.schema.check(schema, conf)end
-- 在请求进入上游前的 access 阶段执行校验function _M.access(conf, ctx) local tenant_id = core.request.header(ctx, conf.header_key)
if not tenant_id or tenant_id == "" then core.log.warn("Missing tenant header: ", conf.header_key) return 401, { message = "Unauthorized: Missing Tenant Header" } end
-- 将租户 ID 注入上游请求头与 OpenTelemetry 上下文中 core.request.set_header(ctx, "X-Internal-Tenant", tenant_id)end
return _M五、生产环境高可用与性能调优黄金法则
- etcd 高可用集群构建:
- 生产环境严禁使用单节点 etcd,必须部署至少 3 节点分布式 etcd 集群,并配置独立 SSD 磁盘保证低写延迟(<10ms)。
- 连接池复用与 Keepalive 调优:
config.yaml nginx_config:http:keepalive_timeout: 60skeepalive_requests: 10000 - 隔离控制面 Admin API:
- Admin API(端口 9180)绝对禁止向公网开放,必须绑定内网 IP 或通过安全组/VPN 进行严格访问限制。
相关文章:
- Nginx 进阶完全指南 2026:反向代理 + HTTPS + 负载均衡
- Go 微服务开发完全指南 2026:gRPC + Protobuf + Gin + OpenTelemetry
- 现代微服务可观测性完全指南 2026:OpenTelemetry + Grafana LGTM 栈
- Kubernetes 生产级集群运维与加固完全指南 2026
- Docker 完全指南 2026:Compose 多服务编排与生产部署
本文基于 Apache APISIX 3.9+、Envoy 1.30+ 及 etcd 3.5+ 编写。对于追求极致低延迟与动态可扩展性的微服务架构,Apache APISIX 是目前国内云原生落地的首选方案之一。
现代微服务 API 网关完全指南 2026:Apache APISIX vs Envoy vs Kong 选型 + 动态路由 + 插件实战
https://971918.xyz/posts/docs/api-gateway-apisix-envoy-guide/