3. 网关选型与治理能力:Kong、APISIX、Zuul、Spring Cloud Gateway 的治理能力对比

选网关,说白了就是选治理能力。

我见过太多团队,一开始图省事随便选一个,结果到了要上灰度、做限流、搞可观测的时候,发现根本玩不转。那时候再换网关,成本就高了去了。

今天咱们就把市面上最主流的四款网关——Kong、APISIX、Zuul、Spring Cloud Gateway——放在一起,看看它们在治理能力上到底差在哪。我会结合我自己的踩坑经历,给你一些实在的建议。

核心观点: 网关选型不是选“谁最火”,而是选“谁的治理模型跟你团队的技术栈和运维习惯最匹配”。

3.1 四款网关的出身与定位

先简单过一遍背景。这四款网关,分属两个阵营:

  • Kong:基于 OpenResty (Nginx + Lua),老牌网关。社区生态很成熟,插件市场丰富。我个人习惯把它当作“API 管理平台”来用。
  • APISIX:也是 OpenResty 系,但更年轻。Apache 顶级项目,性能比 Kong 还好一点。我最近几个新项目都在用,确实顺手。
  • Zuul:Netflix 出品,基于 Servlet 容器。属于“上古神器”了。我 2017 年做微服务时用过,那时候还没别的选择。
  • Spring Cloud Gateway:Spring 官方出品,基于 WebFlux (Reactor)。如果你团队全是 Java,且重度依赖 Spring 生态,那它几乎是默认选项。

嗯,这里要注意:Zuul 1.x 已经基本被淘汰了,Zuul 2.x 虽然性能有提升,但社区活跃度远不如前。除非你维护的是老系统,否则我不建议新项目再选它。

3.2 治理能力对比:一张表说清楚

治理能力,我把它拆成六个维度:路由、负载均衡、限流熔断、安全认证、可观测性、扩展性。下面这张表,是我根据实际项目经验整理的。

治理维度 Kong APISIX Zuul (1.x/2.x) Spring Cloud Gateway
路由 基于域名/路径,支持条件路由 基于域名/路径/Header/Query,支持权重路由 基于路径,需自定义 Filter 基于路径/Header/Query,支持权重路由
负载均衡 内置,支持多种算法 内置,支持一致性哈希 需集成 Ribbon 内置,集成 LoadBalancer
限流熔断 插件实现,支持计数器/令牌桶 插件实现,支持计数器/令牌桶/并发限流 需集成 Hystrix/Sentinel 需集成 Sentinel/Resilience4j
安全认证 插件丰富 (OAuth2/JWT/Key-Auth) 插件丰富,支持消费者管理 需自定义 Filter 需集成 Spring Security
可观测性 插件支持 Prometheus/Zipkin 原生支持 Prometheus/SkyWalking/OpenTelemetry 需集成 Sleuth/Zipkin 原生支持 Micrometer
扩展性 Lua 插件,有 Go/Python 扩展 Lua/Java/Go/Python 多语言插件 Java Filter Java Filter/GlobalFilter

我的建议: 如果你需要“开箱即用”的治理能力,APISIX 和 Kong 是首选。它们把限流、熔断、认证这些都做成了插件,你配一下就能用。而 Spring Cloud Gateway 和 Zuul 更像是一个“框架”,很多能力需要你自己写代码或者集成第三方库。

3.3 核心差异:动态化与运维模型

表格看完了,你可能觉得“都差不多啊”。别急,真正的差距在下面。

3.3.1 动态化:热加载 vs 重启

这是最要命的区别。

  • Kong 和 APISIX:配置变更后,不需要重启网关。它们通过 Admin API 或控制面,直接把配置推送到数据面,Nginx 的 Lua 代码会热加载。我在项目中做过灰度发布,一条命令切 10% 流量到新版本,整个过程网关零中断。
  • Zuul 和 Spring Cloud Gateway:配置变更后,通常需要重启网关实例,或者通过 Spring Cloud Bus 刷新上下文。虽然也能做到动态,但过程比较重,而且刷新期间可能会有短暂的服务不可用。

为什么会这样?因为 Kong 和 APISIX 的数据面是 Nginx,它天生就是为动态配置设计的。而 Zuul 和 Spring Cloud Gateway 跑在 JVM 上,配置变更本质上是 Bean 的重新注入。

避坑指南: 我曾经在一个 Zuul 项目里,为了做动态路由,自己写了一套配置监听 + 刷新 Filter 的逻辑。结果上线后,刷新时出现了几秒钟的 500 错误。后来排查发现是 Filter 的加载顺序出了问题。如果你对 JVM 热加载不是特别熟悉,建议优先考虑 Kong 或 APISIX。

3.3.2 运维模型:DB 驱动 vs 配置中心

Kong 和 APISIX 的配置是存在数据库里的(PostgreSQL/etcd),通过 Admin API 来管理。这意味着你可以用任何语言写一个控制面,甚至可以用 curl 直接操作。

Spring Cloud Gateway 和 Zuul 的配置通常存在配置中心(Nacos/Consul)里,通过 Spring Cloud 的配置刷新机制来生效。这跟 Spring 生态绑定得很紧。

我个人习惯是:如果团队运维能力强,喜欢用 DB + API 的方式,选 APISIX;如果团队已经上了 Spring Cloud 全家桶,那 Spring Cloud Gateway 的集成成本更低。

3.4 场景化选型建议

说了这么多,到底怎么选?我按场景给你拆一下:

  • 场景一:传统企业,Java 技术栈,已有 Spring Cloud 体系
    → 选 Spring Cloud Gateway。虽然动态化弱一点,但跟 Nacos、Sentinel、Sleuth 的集成是原生的,开发效率高。
  • 场景二:互联网公司,多语言技术栈,追求高性能
    → 选 APISIX。性能比 Kong 好一点,而且支持 Java/Go/Python 多语言插件,非 Lua 团队也能玩得转。
  • 场景三:API 管理平台,需要丰富的插件生态
    → 选 Kong。它的插件市场是最成熟的,从认证到日志到转换,基本你能想到的都有现成的。
  • 场景四:维护老系统,已经用了 Zuul
    → 建议逐步迁移到 Spring Cloud Gateway 或 APISIX。Zuul 1.x 的同步模型在并发高时很容易成为瓶颈。

3.5 一张图看懂选型逻辑

下面这张 SVG 图,我把选型的关键维度画出来了。你可以对照着看。

API 网关选型决策树 技术栈与团队能力 Java 生态 (Spring) 多语言 / 高性能 Spring Cloud Gateway Zuul (维护期) APISIX Kong 选型关键考量: • 动态化能力:APISIX / Kong 支持热加载,配置变更零中断 • 运维模型:APISIX / Kong 使用 DB + Admin API,Spring Cloud Gateway 依赖配置中心 • 扩展性:APISIX 支持多语言插件,Kong 以 Lua 为主,Spring Cloud Gateway 以 Java Filter 为主

3.6 我的最终建议

网关选型没有银弹。你想想看,一个做 IoT 的团队跟一个做金融支付的团队,对网关的要求能一样吗?

我个人建议是:优先考虑 APISIX 和 Spring Cloud Gateway。前者代表了新一代网关的治理能力,后者代表了 Java 生态的集成深度。Kong 虽然生态好,但 Lua 的门槛确实让很多团队头疼。Zuul 嘛,除非你已经在用了,否则就别碰了。

最后说一句:选型文档写得再漂亮,都不如搭一个 Demo 跑一遍。我每次做技术选型,都会花一周时间把候选方案都部署一遍,用真实的业务流量压一压。嗯,实践出真知。