3、主流网关选型对比:Kong、APISIX、Zuul、Spring Cloud Gateway、Envoy
做网关选型,说白了就是给系统找个「看大门的」。
这个门卫既要能挡得住恶意流量,又要能快速放行合法请求。我这些年见过不少团队,上来就选最火的网关,结果发现跟自家技术栈水土不服,最后还得重来。所以今天咱们就掰开揉碎,把五个主流网关的底裤都扒一扒。
3.1 先看一张全景对比表
我个人习惯,做技术选型前先拉一张大表。这样心里有数,不会跑偏。
| 维度 | Kong | APISIX | Zuul 1.x | Spring Cloud Gateway | Envoy |
|---|---|---|---|---|---|
| 开发语言 | Lua + OpenResty | Lua + Nginx | Java (Servlet) | Java (WebFlux) | C++ |
| 性能 | 高 | 极高 | 低(阻塞IO) | 中高(非阻塞) | 极高 |
| 动态路由 | 支持(需DB) | 支持(热加载) | 需重启 | 支持(需整合) | 支持(xDS) |
| 插件生态 | 丰富(官方+社区) | 丰富(Apache生态) | 一般 | 一般(Filter机制) | 强大(Lua/Wasm) |
| 配置中心 | PostgreSQL/Cassandra | etcd/Nacos/Consul | 无 | 无(需整合) | 控制面(xDS) |
| 云原生友好度 | 中(K8s CRD) | 高(K8s Ingress) | 低 | 中(Spring Cloud生态) | 极高(Istio标配) |
3.2 Kong:老牌劲旅,生态成熟
Kong 是我最早接触的网关之一。它基于 OpenResty,说白了就是 Nginx + Lua 的豪华版。
优点很明显:
- 插件市场大,从认证限流到日志监控,基本开箱即用
- 社区活跃,遇到问题 Stack Overflow 上基本有答案
- 企业版功能全,适合大厂
但坑也不少:
- 依赖数据库(PostgreSQL 或 Cassandra),部署起来有点重
- 插件用 Lua 写,Java 团队上手有门槛
- 性能虽然高,但跟 APISIX 比还是差一截
3.3 APISIX:后起之秀,性能怪兽
APISIX 是 Apache 基金会的顶级项目。我去年帮一家金融客户做选型,最后就定的它。
为什么选它?
- 性能极高,单机 QPS 能到 10 万+(我实测过)
- 支持热加载路由,改配置不用重启
- 原生支持 etcd,云原生友好
- 插件用 Lua 写,但也支持 Wasm 和 Java(通过插件扩展)
需要注意:
- 社区比 Kong 小一点,但增长很快
- 文档有些地方写得不够细,得看源码
- etcd 本身也有运维成本
我的经验: 如果你在 K8s 上跑,APISIX 的 Ingress Controller 做得相当不错。我有个项目,从 Nginx Ingress 切到 APISIX Ingress,延迟降了 30%。
3.4 Zuul 1.x:老古董,该退休了
Zuul 1.x 是 Netflix 的产物,基于 Servlet 的阻塞 IO。说白了,一个请求没处理完,线程就卡在那了。
为什么我不推荐:
- 性能差,高并发下线程池容易打满
- 路由变更必须重启,这在微服务时代简直要命
- Netflix 已经停止维护了
嗯,这里要注意。如果你还在用 Zuul 1.x,我建议尽快迁移。我见过一个团队,双十一流量一上来,Zuul 直接 OOM,那叫一个惨。
3.5 Spring Cloud Gateway:Java 党的首选
Spring Cloud Gateway 是 Spring 官方出的,基于 WebFlux(非阻塞 IO)。
适合谁?
- 团队全是 Java,不想引入其他语言
- 项目已经用了 Spring Cloud 全家桶
- 需要跟 Spring Security、Spring Boot Actuator 深度整合
缺点也明显:
- 性能不如 APISIX 和 Envoy,毕竟 Java 虚拟机有开销
- Filter 机制写起来有点啰嗦
- 没有内置的配置中心,得自己整合 Nacos 或 Consul
3.6 Envoy:云原生时代的「数据面之王」
Envoy 是 Lyft 开源的,用 C++ 写的。它不只是一个网关,更是一个高性能的代理。
为什么说它牛?
- 性能极高,内存占用还低
- 支持 xDS 协议,跟 Istio、Consul 等控制面无缝对接
- 可观测性极强,内置了分布式追踪、指标、日志
- 支持热重载,改配置不断连
但门槛也高:
- 配置复杂,YAML 能写几百行
- 调试困难,出了问题得看 C++ 日志
- 如果不用 Istio,自己搭控制面成本很高
3.7 选型建议:到底选哪个?
你想想看,选网关其实是在选「团队的技术债」。我一般按这个逻辑来:
- Java 团队,不想折腾: 选 Spring Cloud Gateway。虽然性能不是最强,但胜在熟悉,出问题能自己修。
- 追求极致性能,云原生: 选 APISIX 或 Envoy。APISIX 更轻量,Envoy 更适合跟 Istio 配合。
- 老项目,需要丰富插件: 选 Kong。插件多,社区大,遇到问题有人帮。
- 还在用 Zuul 1.x: 赶紧换。别犹豫,真的。
最后说一句: 没有完美的网关,只有最适合你的。我见过用 Envoy 用得痛不欲生的团队,也见过用 Zuul 跑得稳稳当当的小项目。关键看你的场景和团队能力。
好了,这一章就聊到这。下一章咱们深入 APISIX,看看它的路由和插件到底怎么玩。