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:
    • 内部逻辑路由
    • 和业务深度耦合
相关推荐
我命由我1234512 分钟前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
都叫我大帅哥2 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.3 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
心念枕惊4 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
景同学6 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
C++、Java和Python的菜鸟6 小时前
第7章 后端Web实战(Tlias系统)
java
憧憬成为java架构高手的小白7 小时前
黑马八股--spring框架学习
java·学习·spring
唐青枫7 小时前
Java Picocli 实战详解:用注解写出好用的命令行工具
java
X-⃢_⃢-X7 小时前
四、OpenFeign远程调用
java·微服务·springboot·springcloud