2、网关分类:商业网关、开源网关(Kong、Zuul、Spring Cloud Gateway)对比

聊到网关选型,我见过不少团队一上来就纠结「用哪个」。其实说白了,你得先搞清楚一个核心问题:你的网关到底要扛多重的活?

我个人习惯把网关分成三大类:商业网关、开源网关、以及云厂商自带的网关。今天咱们重点聊前两类,顺便拿三个典型开源产品——Kong、Zuul、Spring Cloud Gateway——做个深度对比。

2.1 商业网关:花钱买省心

商业网关,说白了就是「你出钱,厂商帮你搞定一切」。典型代表有:

  • Kong Enterprise(Kong 的商业版)
  • NGINX Plus(NGINX 的商业版)
  • Apigee(Google 的 API 管理平台)
  • Amazon API Gateway(AWS 的托管网关)

我在项目中遇到过一家金融客户,他们直接买了 Kong Enterprise。为什么?因为合规要求太严了——安全审计、流量加密、API 密钥管理,这些功能商业版开箱即用。你想想看,如果自己拿开源版去拼,光安全模块就得折腾好几个月。

商业网关的核心优势:

  • 开箱即用,功能完整
  • 有官方技术支持
  • 安全合规方面更省心
  • 性能调优通常已经做过

注意:商业网关的坑也不少。我曾经见过一个团队买了 Apigee,结果发现它的定价是按 API 调用次数算的。业务量一上来,账单直接翻了好几倍。所以选商业网关前,一定把计费模型算清楚。

2.2 开源网关:免费但需要动手

开源网关嘛,好处是免费、灵活、社区活跃。但坏处也很明显——你得自己搭、自己配、自己修 bug。我接触最多的三个开源网关是:Kong、Zuul、Spring Cloud Gateway。

咱们一个一个来看。

2.2.1 Kong:基于 Nginx 的高性能网关

Kong 的核心是 OpenResty(Nginx + Lua)。所以它的性能天生就强,特别适合高并发场景。

我记得有一次帮一个电商团队做压测,Kong 在 4 核 8G 的机器上轻松扛住了 5 万 QPS。Zuul 在同配置下,跑到 1 万 QPS 就开始抖了。

Kong 的架构是这样的:

请求 → Kong(Nginx 核心) → 插件链(认证、限流、日志...) → 上游服务

它的插件机制很灵活。官方有 100+ 插件,你也可以用 Lua 自己写。嗯,这里要注意:Lua 的学习成本不低,团队里得有懂 Lua 的人。

我的建议:如果你的团队有 Nginx 运维经验,或者业务对性能要求极高(比如每秒几万请求),Kong 是首选。但如果你团队全是 Java 工程师,那就要慎重了——Lua 的坑不少。

2.2.2 Zuul:Netflix 的 Java 网关

Zuul 是 Netflix 开源的,基于 Servlet 架构。说白了,它就是一堆 Filter 串起来的请求处理链。

Zuul 1.x 的问题很明显:它是阻塞式的。每个请求都会占用一个线程,直到响应返回。高并发下,线程池很容易被打满。

我曾经在一个项目中用 Zuul 1.x 做网关,上线第一天就被流量打挂了。后来一查,线程池满了,请求全排队,最后超时。那叫一个惨。

Zuul 2.x 改成了异步非阻塞,性能好了不少。但说实话,它来得太晚了。Spring Cloud Gateway 已经成了主流。

// Zuul 1.x 的 Filter 示例
public class MyFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre"; // 前置过滤
    }

    @Override
    public Object run() {
        // 这里做鉴权、限流等操作
        return null;
    }
}

避坑指南:如果你还在用 Zuul 1.x,我建议尽快迁移。它已经停止维护了。Zuul 2.x 虽然还在更新,但社区活跃度远不如 Spring Cloud Gateway。

2.2.3 Spring Cloud Gateway:Spring 生态的首选

Spring Cloud Gateway 是 Spring 官方推出的网关,基于 Spring WebFlux(响应式编程)。它的核心是路由 + 过滤器链。

我个人最喜欢它的地方是:配置简单,和 Spring Boot 无缝集成。你只要在 application.yml 里写几行配置,就能搞定路由转发。

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1

你看,这段配置的意思是:所有 /user/ 开头的请求,都转发到 user-service 服务,并且去掉路径前缀。

Spring Cloud Gateway 的性能比 Zuul 1.x 好很多,和 Kong 比的话,单机性能略低一些,但胜在生态好。如果你团队全是 Spring 技术栈,那选它准没错。

三个开源网关的对比总结:

特性 Kong Zuul Spring Cloud Gateway
底层技术 Nginx + Lua Servlet(1.x)/ Netty(2.x) Spring WebFlux(Netty)
性能 极高 一般(1.x)/ 较好(2.x)
学习成本 中(需懂 Lua) 低(Java 即可) 低(Spring 生态)
插件生态 丰富(100+ 插件) 一般 中等(可自定义 Filter)
社区活跃度 低(1.x 已停更)
适用场景 高并发、API 管理 遗留系统、小规模 Spring 微服务生态

2.3 怎么选?我的经验之谈

你可能会问:「那我到底该选哪个?」

嗯,这个问题没有标准答案。但我可以给你几个判断依据:

  1. 看团队技术栈:如果全是 Java/Spring,无脑选 Spring Cloud Gateway。如果团队有 Nginx 运维经验,Kong 更合适。
  2. 看性能要求:QPS 超过 2 万,优先考虑 Kong。低于 2 万,Spring Cloud Gateway 完全够用。
  3. 看功能需求:需要丰富的插件(认证、限流、日志、监控),Kong 的插件生态最成熟。如果只是简单的路由转发,Spring Cloud Gateway 更轻量。
  4. 看预算:有钱且不想折腾,直接上商业版。没钱但有人力,开源版也能玩得转。

一个小建议:我个人习惯先拿 Spring Cloud Gateway 做原型验证。如果性能瓶颈了,再考虑迁移到 Kong。这样前期开发快,后期也有兜底方案。

好了,这一章就聊到这儿。下一章咱们深入讲讲网关的路由策略——怎么配、怎么调、怎么避坑。到时候见。