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标配)
我的小建议: 别光看性能数字。你想想看,如果团队全是Java人,硬上APISIX,后面维护Lua脚本会哭的。我踩过这个坑。

3.2 Kong:老牌劲旅,生态成熟

Kong 是我最早接触的网关之一。它基于 OpenResty,说白了就是 Nginx + Lua 的豪华版。

优点很明显:

  • 插件市场大,从认证限流到日志监控,基本开箱即用
  • 社区活跃,遇到问题 Stack Overflow 上基本有答案
  • 企业版功能全,适合大厂

但坑也不少:

  • 依赖数据库(PostgreSQL 或 Cassandra),部署起来有点重
  • 插件用 Lua 写,Java 团队上手有门槛
  • 性能虽然高,但跟 APISIX 比还是差一截
避坑指南: 我曾经在生产环境遇到 Kong 的数据库连接池爆满,导致路由更新失败。后来加了连接池监控才解决。如果你用 Kong,记得给 DB 连接数留够余量。

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
一个小技巧: 用 Spring Cloud Gateway 时,记得把 Filter 写成全局的,别每个路由都配一遍。我刚开始就犯过这个错,代码冗余到想哭。

3.6 Envoy:云原生时代的「数据面之王」

Envoy 是 Lyft 开源的,用 C++ 写的。它不只是一个网关,更是一个高性能的代理。

为什么说它牛?

  • 性能极高,内存占用还低
  • 支持 xDS 协议,跟 Istio、Consul 等控制面无缝对接
  • 可观测性极强,内置了分布式追踪、指标、日志
  • 支持热重载,改配置不断连

但门槛也高:

  • 配置复杂,YAML 能写几百行
  • 调试困难,出了问题得看 C++ 日志
  • 如果不用 Istio,自己搭控制面成本很高
避坑指南: 我曾经在 Envoy 里配了一个复杂的路由规则,结果流量全打到了错误的后端。后来发现是 VirtualHost 的域名匹配优先级搞错了。Envoy 的配置逻辑跟 Nginx 不一样,千万别想当然。

3.7 选型建议:到底选哪个?

你想想看,选网关其实是在选「团队的技术债」。我一般按这个逻辑来:

  1. Java 团队,不想折腾: 选 Spring Cloud Gateway。虽然性能不是最强,但胜在熟悉,出问题能自己修。
  2. 追求极致性能,云原生: 选 APISIX 或 Envoy。APISIX 更轻量,Envoy 更适合跟 Istio 配合。
  3. 老项目,需要丰富插件: 选 Kong。插件多,社区大,遇到问题有人帮。
  4. 还在用 Zuul 1.x: 赶紧换。别犹豫,真的。

最后说一句: 没有完美的网关,只有最适合你的。我见过用 Envoy 用得痛不欲生的团队,也见过用 Zuul 跑得稳稳当当的小项目。关键看你的场景和团队能力。

好了,这一章就聊到这。下一章咱们深入 APISIX,看看它的路由和插件到底怎么玩。