API 网关技术选型

API 网关(API Gateway)Kong / APISIX 就是这一层常见的实现方案。

👉 API 网关 = 所有后端服务的统一入口

text 复制代码
客户端 → API网关 → 用户服务 / 订单服务 / 支付服务

它的作用不是简单转发,而是"统一管理接口"。

Kong

  • 基于 Nginx 做的 API 网关
  • 出现更早,生态成熟
  • 插件体系很丰富(认证、限流等)

Apache APISIX

  • Apache Software Foundation 旗下项目
  • 更偏云原生(支持动态配置)
  • 性能更高(很多公司宣传点)
  • 国内公司用得比较多

API 网关比 Nginx / Envoy 多了一层"业务治理能力"

1️⃣ 统一认证

  • JWT / Token 校验
  • 登录态验证

2️⃣ 限流

  • 防刷接口
  • 防止被打挂

3️⃣ 路由转发

  • /user → 用户服务
  • /order → 订单服务

4️⃣ 协议转换

  • HTTP → gRPC
  • WebSocket 支持

5️⃣ 日志 & 监控

  • 记录每个 API 的调用情况

真实架构

text 复制代码
用户 → CDN → WAF → API网关(Kong/APISIX) → 微服务 → 数据库

或者更复杂一点:

text 复制代码
用户 → CDN → WAF → API网关 → 服务A → Envoy → 服务B

当有这些需求时👇

  • 多个服务(用户、订单、支付)
  • 需要统一认证(比如所有接口都要登录)
  • 要做限流 / 风控
  • 想对外提供开放 API(给第三方)

👉 这时候 API 网关是必备的

👉 Kong / APISIX = 专门做"API 管理"的网关,比 Nginx 更高一层,比 Envoy 更偏业务入口

在现实生产环境中 Kong / APISIX 不太会一起用------它俩本质是"同一层、同一定位"的产品,通常是二选一,而不是叠加使用。

但是和 Spring Cloud Gateway 却不一样,它俩中的任何一个是可以和 Spring Cloud Gateway 进行协同使用的。

vs Spring Cloud Gateway

Kong / APISIX

  • 独立服务(单独部署)
  • 通过配置或管理后台控制
  • 不用写业务代码

👉 更像:运维/平台提供的网关

Spring Cloud Gateway

  • 写在 Java 项目里,比较灵活(想怎么写就怎么写),但很多功能要自己实现
  • 需要自己开发、打包、部署

👉 更像:自己写的一个网关服务

Kong / APISIX 属于平台级网关,可以被独立部署,属于基础设施层,可以为多个服务提供统一的流量治理能力;而 Spring Gateway 是嵌在某个 Java 服务里的网关,更偏应用层。

对于一个"多服务系统"来说,需要统一入口,所有请求统一经过网关做鉴权和路由。这个时候 Kong / APISIX 就有优势了,因为它使得所有服务共用一套网关,不需要每个服务都写一套 Gateway;并且它提供需要开箱即用的能力,比如限流、认证、黑白名单,可以插件直接用,而不用自己开发。如果使用 Spring Gateway 的话,很多要自己写。并且 Kong / APISIX 拥有动态配置能力,修改路由或限流策略时不需要重启服务,但是 Spring Gateway 通常要改配置或代码再发布。

Kong / APISIX 支持多语言,如果系统不是纯 Java,比如还有 Go / Python 服务,Kong / APISIX 更适合做统一入口。Spring Gateway 强绑定 Spring / Java。

如果是一个小型系统,或者团队完全基于 Spring 技术栈,使用 Spring Gateway 会更简单,开发效率也更高。

整体来看,在需要统一治理、插件能力强、支持动态配置的微服务架构下,优先选择 Kong / APISIX ;如果是单体或轻量级 Java 系统,Spring Gateway 也是一个很好的选择。

在大型系统中,Kong / APISIX 通常作为北向流量入口,而 Spring Gateway 可以作为南向或业务内部网关,两者是可以分层协作的。

常见架构

text 复制代码
用户 → Kong/APISIX → Spring Gateway → 微服务
  • Kong / APISIX:
    • 对外入口
    • 安全、限流、认证
  • Spring Gateway:
    • 内部逻辑路由
    • 和业务深度耦合
相关推荐
simple-L61 小时前
Java开发痛点技术文章大纲
java·开发语言
千寻girling2 小时前
滑动窗口刷了快一个月(26天)了 , 还没有刷完. | 含(操作系统学什么的Java 后端)
java·开发语言·javascript·c++·人工智能·后端·python
小手cool2 小时前
Java字符串按空行分割,包括末尾的空行
java
呱牛do it2 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 9)
java
鸡蛋灌Bean2 小时前
mybatis分页深入了解
java·数据库·mybatis
野生技术架构师2 小时前
Tomcat Service的设计和实现:StandardService
java·tomcat
Gofarlic_OMS2 小时前
UG/NX许可证管理高频技术问题解答汇编
java·大数据·运维·服务器·汇编·人工智能
逐星ing2 小时前
IDEA 无法识别 `mvn install` 最新 SNAPSHOT 依赖的根因与完整解决方案
java·ide·intellij-idea
流觞 无依3 小时前
Spring Boot 未授权访问漏洞排查与修复指南
java·spring boot·后端