微服务网关演化

1.静态网关

2.动态网关

3.云原生网关

静态网关

以Nginx为代表,功能强大,能力突出,

痛点:

改配置要重启,不支持动态

动态网关

以gateway 为代表,功能全面,改配置无需重启。且可以做负载,灰度,限流熔断降级。

痛点:

1. I/O 模型限制

基于servlet 或netty 的阻塞/半阻塞,在高并发下线程上下文切换开销大。

2. GC压力大

JVM的垃圾回收机制在处理大量HTTP请求和响应,容易引发STW 停顿,导致网关层出现不可控的延迟毛刺。

3. 依赖配置中心

如果配置中心(nacos/eureka)宕机,会导致回退到错误的路由状态。

4. 协议转换弱

天然支持HTTP/REST,但对于GRPC,Dubbo,webSocket 等协议支持非常笨重,通常需要写复杂的过滤器,且性能损耗极大。

云原生

以 Apache APISIX 为代表 ,支持动态配置、热更新,不用重启网关,性能极强。用它和gateway做以下对比

一、底层基座完全不一样

Apache APISIX

底层是 Nginx + LuaJIT + Go

Nginx 是工业级高性能网络 IO 模型,事件驱动、epoll 多路复用

LuaJIT 即时编译,脚本跑起来接近原生 C 性能

网络层、连接调度、内核转发都是Nginx 内核级能力

Spring Cloud Gateway

底层是 Java + Netty

跑在 JVM 之上

所有请求都要经过 JVM 堆、GC、线程调度、对象创建销毁

先天就比 Nginx 栈重一层

二、网络 IO 模型:架构天生降维打击

APISIX

多进程 + 事件驱动 + 非阻塞 IO

基于 Nginx 经典 Master-Worker 多进程模型

每个 Worker 单线程、全异步非阻塞

一个线程可以扛几万连接,不靠堆线程扛流量

无线程上下文切换开销

Spring Cloud Gateway

Netty 线程池 + 异步但仍受 JVM 约束

Netty 也是事件驱动,但跑在 JVM 里

高并发下:线程池队列膨胀、任务调度、锁竞争、JVM 调度开销明显

流量一大,线程、队列、GC 压力全上来

关键区别:

APISIX 是内核级 IO 调度,SCG 是应用层 JVM 调度。

三、运行时与内存开销

APISIX

轻量,内存占用极低

无垃圾回收困扰

路由、插件、限流、鉴权全在 Worker 内闭环,无跨进程、无对象频繁创建

Spring Cloud Gateway

每一个请求都会创建大量临时对象

高并发下 Young GC、Full GC 频繁

GC 一旦卡顿,瞬间延迟飙升、吞吐下降

JVM 本身就要占用不小堆内存

四、路由与配置更新机制

APISIX

全动态热更新

路由、插件、上游配置变更毫秒级生效,不重启、不重载

基于 etcd 增量推送,无全局刷新开销

Spring Cloud Gateway

传统基于配置文件 / 配置中心刷新

很多场景需要重启或完整刷新上下文

刷新时存在抖动、短暂不可用,且刷新开销大

五、协议与转发效率

APISIX

天然优化:

四层 / 七层转发都是 Nginx 原生

连接复用、长连接、缓冲区零拷贝做得极致

转发几乎是内核态快速转发

SCG 所有流量都要经过:

网卡 → 内核 → JVM → Netty → 业务链路 → 再回内核

多了一层 JVM 应用层中转,天生延迟更高。

六、并发能力直观对比

吞吐:APISIX 比 SCG 高 3~5 倍

延迟:高并发下 APISIX 延迟稳定,SCG 随流量上涨明显拉高

资源占用:同等流量下,APISIX CPU / 内存只有 SCG 的 1/3 甚至更低

SCG的架构图
APISIX的架构图
对比

Apache APISIX 与 Spring Cloud Gateway 核心对比表

对比项 Apache APISIX Spring Cloud Gateway
底层基座 Nginx + LuaJIT + Go JVM + Netty + Spring
并发模型 多进程单线程事件驱动 Netty 线程池 + JVM 调度
GC 影响 无 GC,延迟超稳定 高并发 GC 频繁,抖动大
资源占用 低 CPU、低内存 同等流量内存 CPU 高 2~3 倍
配置更新 etcd 热更新,毫秒无重启 需刷新上下文 / 甚至重启
多语言适配 天然兼容 Java/Go/C 也兼容,但性能拖后腿
适用场景 云原生入口、高并发网关 Java 内网微服务、小流量场景

总结

APISIX 是站在 Nginx 高性能内核上做网关;

Spring Cloud Gateway 是在 JVM 虚拟机里用 Java 应用做网关。

一个贴近内核、轻量无 GC;

一个套 JVM 重容器、天生带调度和 GC 开销。

相关推荐
大江东去浪淘尽千古风流人物4 小时前
【SANA-WM】分钟级世界模型:混合线性扩散Transformer与双分支相机控制深度解析
人工智能·深度学习·架构·spark·机器人·transformer·wm
sbjdhjd4 小时前
02 (中)| K8s Pod 生产化落地:从配置到优化全流程
linux·运维·云原生·kubernetes·开源·podman·kubelet
LONGZETECH4 小时前
新能源汽车VR仿真教学软件技术解析|职教数字化实训解决方案
大数据·架构·汽车·vr·汽车仿真教学软件
喵个咪5 小时前
Kratos + WebRTC 实战:实现浏览器 P2P 音视频通话与实时数据通信
后端·微服务·webrtc
China_Yanhy5 小时前
【云原生实战】从零构建无节点 EKS:Karpenter 极简注入与全自动算力接管指南
linux·运维·云原生
TDengine (老段)5 小时前
TDengine RPC 通信层深度解析 — 协议格式、连接管理与重试机制
大数据·数据库·rpc·架构·时序数据库·tdengine·涛思数据
蜀道山老天师5 小时前
从零搭建 Prometheus 监控 MySQL:含二进制安装、授权、exporter 配置全流程
运维·数据库·mysql·adb·云原生·prometheus
yoyo_zzm5 小时前
PHP vs Java:后端语言终极选择指南
java·spring boot·后端·架构·php
珂玥c5 小时前
添加node节点到k8s集群+配置网络插件flannel
云原生·容器·kubernetes