Skip to content

网关选型

说到 API 网关选型,市场上有太多选择了:Spring Cloud Gateway、Kong、Apache APISIX、Traefik……

每个网关都宣称自己「高性能」「易扩展」「功能丰富」。但实际上,每个网关都有自己的适用场景和 Trade-off。

这篇文章帮你梳理主流网关的特点,让你能做出合适的选择。

选型维度

在开始对比之前,先明确选型需要考虑的维度:

维度说明重要性
性能QPS、延迟、吞吐
生态集成与现有技术栈的兼容性
扩展性插件系统、自定义能力
易用性学习曲线、配置复杂度
功能丰富度内置功能多少
社区活跃度文档、问题响应
运维复杂度部署、监控、升级

主流网关对比

Spring Cloud Gateway

定位:Spring Cloud 微服务生态的官方网关

特性说明
架构基于 WebFlux + Netty,异步非阻塞
性能高(单节点可达 50K QPS)
编程语言Java
配置方式YAML / Java DSL
插件开发实现 GatewayFilter 接口
优点与 Spring Cloud 无缝集成,学习成本低
缺点仅支持 Java,技术栈受限
yaml
# 典型配置
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100

Kong

定位:企业级 API 网关

特性说明
架构Nginx + OpenResty + Lua
性能极高(基于 Nginx,单节点可达 100K+ QPS)
编程语言Lua(插件)
配置方式RESTful Admin API
插件开发Lua 脚本
优点插件丰富,生态成熟,支持多种数据存储
缺点Lua 语言相对小众,架构复杂度高
bash
# 典型配置
curl -X POST http://localhost:8001/services \
    --data "name=user-service" \
    --data "url=http://user-service:8080"

curl -X POST http://localhost:8001/routes \
    --data "service.name=user-service" \
    --data "paths[]=/api/user"

curl -X POST http://localhost:8001/routes/user-route/plugins \
    --data "name=rate-limiting" \
    --data "config.minute=100"

Apache APISIX

定位:云原生 API 网关

特性说明
架构Nginx + OpenResty + Lua,etcd 配置中心
性能极高(优化过的 OpenResty,单节点可达 200K+ QPS)
编程语言Lua(插件)
配置方式Admin API + etcd
插件开发Lua 脚本(支持热加载)
优点性能最优,支持热插件加载,云原生友好
缺点etcd 依赖,学习曲线较陡
yaml
# 典型配置
routes:
  - id: user-route
    uri: /api/user/*
    upstream:
      type: roundrobin
      nodes:
        "user-service:8080": 1
plugins:
  rate-limiting:
    minute: 100
  jwt-auth:
    key: user-key

Traefik

定位:云原生边缘路由器

特性说明
架构Go 语言,异步处理
性能中等(单节点约 20K QPS)
编程语言Go
配置方式配置文件 / 标签 / Kubernetes CRD
插件开发Go 插件或中间件
优点云原生集成最佳,自动服务发现,配置简单
缺点性能相对较低,插件生态较弱
yaml
# docker-compose 标签方式
labels:
  - "traefik.http.routers.user-service.rule=PathPrefix(`/api/user`)"
  - "traefik.http.routers.user-service.middlewares=user-auth"
  - "traefik.http.middlewares.user-auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/"

横向对比

维度Spring Cloud GatewayKongApache APISIXTraefik
性能★★★★★★★★★★★★★★★★★
Java 集成★★★★★★★★★★★
插件生态★★★★★★★★★★★★★★★
云原生支持★★★★★★★★★★★★★★★★★
学习曲线★★★★★★★★★★★★★★★
配置实时生效★★★★★★★★★★★★★★★★★
多语言支持★★★★★★★★★★★★★★★★
商业支持Datadog/VMwareKong Inc.API7.aiContainous

性能对比

以下数据基于公开基准测试,实际性能因硬件、网络、配置而异

网关QPS(8核机器)P99 延迟内存占用
Spring Cloud Gateway~50,000~10ms中等
Kong~100,000~5ms较高
Apache APISIX~200,000~2ms较低
Traefik~20,000~15ms较低

性能排名:Apache APISIX > Kong > Spring Cloud Gateway > Traefik

选型决策树

                    开始选型


            ┌─────────────────────┐
            │  技术栈是什么?      │
            └─────────────────────┘

        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
   Spring/Java    多语言/跨平台    云原生/K8s
        │              │              │
        ▼              ▼              ▼
   ┌────────┐    ┌──────────┐   ┌──────────┐
   │ SC Gateway│   │ Kong/    │   │Traefik/  │
   │          │   │ APISIX   │   │APISIX    │
   └────────┘    └──────────┘   └──────────┘
        │              │              │
        ▼              ▼              ▼
    企业级需求?    需要插件生态?   自动服务发现?
        │              │              │
   ┌────┴────┐    ┌────┴────┐    ┌────┴────┐
   ▼         ▼    ▼         ▼    ▼         ▼
  SC Gateway Kong  APISIX  Traefik APISIX Traefik

场景推荐

场景一:Spring Cloud 微服务项目

推荐:Spring Cloud Gateway

理由:

  • 与 Spring Cloud 其他组件无缝集成
  • 使用 Java 开发,团队学习成本低
  • 限流、熔断、认证等功能开箱即用

场景二:需要丰富插件生态

推荐:Kong

理由:

  • 插件库最丰富(认证、限流、日志、安全等)
  • 企业版提供额外功能和支持
  • PostgreSQL + Redis 架构稳定可靠

场景三:追求极致性能

推荐:Apache APISIX

理由:

  • 基于优化过的 Nginx,性能最优
  • etcd 实现毫秒级配置同步
  • 支持热插件加载,不需要重启

场景四:Kubernetes 环境

推荐:Traefik 或 Apache APISIX

理由:

  • Traefik 与 Kubernetes 深度集成,配置最简单
  • Apache APISIX Ingress Controller 功能丰富
  • 自动服务发现,无需手动配置路由

场景五:混合云/多团队

推荐:Apache APISIX

理由:

  • 支持多租户隔离
  • etcd 集中配置,便于统一管理
  • 性能足够支撑大流量场景

成本考量

除了技术因素,还要考虑成本:

成本类型Spring Cloud GatewayKongAPISIXTraefik
软件成本开源免费开源免费/企业版付费开源免费/企业版付费开源免费
运维成本中等(Java 服务)较高(多组件)较高(etcd)较低(Go 单二进制)
人力成本中等中等较高(需要 Lua 能力)较低
硬件成本中等较高较低较低

迁移策略

如果需要从一个网关迁移到另一个:

yaml
# 路由映射示例:Zuul → Spring Cloud Gateway
# Zuul
zuul:
  routes:
    user-service:
      path: /api/user/**
      url: http://user-service:8080

# Spring Cloud Gateway
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: http://user-service:8080
          predicates:
            - Path=/api/user/**
          filters:
            - StripPrefix=1

迁移检查清单:

  • [ ] 路由规则一一对应
  • [ ] 插件/过滤器功能迁移
  • [ ] 认证方式兼容
  • [ ] 上游服务配置迁移
  • [ ] 监控指标对应
  • [ ] 测试验证(灰度切换)

总结

场景推荐选择备选
Spring Cloud 项目Spring Cloud GatewayKong
企业级应用KongAPISIX
高性能需求Apache APISIXKong
Kubernetes 环境Traefik / APISIXKong
快速上线TraefikSpring Cloud Gateway
多语言微服务Kong / APISIXTraefik

留给你的问题

网关选型是一个需要综合考虑的决策。假设你负责为一个 50 人团队的微服务项目选型网关:

  • 项目使用 Spring Cloud
  • 每天处理 1000 万次 API 调用
  • 需要支持 API 认证、限流、日志审计
  • 团队有 Java 开发者,但没有 Lua/Go 经验

你会选择哪个网关?请说明理由。

如果未来项目扩展到 10 倍规模,你需要如何应对?

基于 VitePress 构建