Zuul、Gateway 和 Nginx 有什么区别?
一则或许对你有用的小广告
欢迎 加入小哈的星球 ,你将获得: 专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目: 《Spring AI 项目实战(问答机器人、RAG 增强检索、联网搜索)》 正在持续爆肝中,基于
Spring AI + Spring Boot3.x + JDK 21..., 点击查看; - 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot3.x + JDK 17..., 点击查看项目介绍; 演示链接: http://116.62.199.48:7070/; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
面试考察点
- 技术选型能力:面试官不仅仅是想知道你能背出三者的区别,更是想知道你在实际项目中能否根据场景选择合适的网关方案,而不是 "领导说用啥就用啥"。
- 架构分层理解:考察你是否理解这三者并不是互斥的竞争关系,而是可以分层次配合使用的——Nginx 在外层做流量入口,Gateway 在内层做微服务网关。
- 底层原理认知:能否从 I/O 模型、编程模型、性能瓶颈等维度分析差异,而不是只停留在 "功能对比" 层面。
核心答案
这三者的定位完全不同,不存在 "谁替代谁" 的关系,而是分属不同层次:
| 维度 | Nginx | Zuul | Spring Cloud Gateway |
|---|---|---|---|
| 定位 | 通用反向代理 / Web 服务器 | 微服务网关(第一代) | 微服务网关(第二代) |
| 开发语言 | C | Java | Java |
| I/O 模型 | epoll(异步非阻塞) | Zuul 1.x:同步阻塞;Zuul 2.x:异步非阻塞 | Netty + Reactor(异步非阻塞) |
| 性能 | 极高(C 语言 + epoll) | 一般 | 高 |
| 微服务集成 | ❌ 无 | ✅ 内置服务发现 | ✅ 内置服务发现 |
| 动态路由 | 需修改配置并 reload | ✅ 支持 | ✅ 支持 |
| 过滤器扩展 | Lua(OpenResty) | Java | Java |
| 维护状态 | 活跃 | ❌ 已停更 | ✅ Spring 官方主推 |
| 适用层次 | 最外层流量入口 | 微服务网关层 | 微服务网关层 |
一句话总结:Nginx 是 "大门保安",负责流量分发和静态资源;Gateway 是 "楼层前台",负责微服务路由和业务鉴权;Zuul 是 "退休的前台",已经没人用了。
深度解析
一、三者在架构中的定位
上图展示了三者在一个典型生产环境中的分层架构:
- Nginx 在最外层:作为整个系统的流量入口,处理 SSL、静态资源、跨域等通用逻辑,通过
upstream将请求分发到多个 Gateway 实例 - Gateway 在中间层:作为微服务网关,从注册中心获取服务列表,动态路由到各个微服务,同时处理鉴权、限流等业务相关逻辑
- Zuul 已经出局:不再出现在新架构中
关键点在于,Nginx 和 Gateway 不是 "二选一" 的关系,而是 Nginx 在外、Gateway 在内的分层协作。各司其职,不要让 Gateway 去扛 Nginx 该干的活。
二、Zuul 1.x vs Zuul 2.x vs Gateway 底层对比
这三个的 I/O 模型差异是面试重点:
上图对比了同步阻塞与异步非阻塞两种 I/O 模型的核心差异:
- Zuul 1.x:基于 Servlet 模型,每个请求占用一个线程,线程在等待后端响应时被阻塞,无法处理其他请求。当并发量上来后,线程池打满,新请求只能排队,吞吐量受限
- Gateway / Zuul 2.x:基于 Netty + Reactor 模型,少量 Event Loop 线程通过事件驱动处理大量并发。发起请求后不等待,注册一个回调就释放线程,响应回来时再触发回调。同样的硬件配置下,吞吐量远超同步模型
关键区别:同步模型是 "一个请求占一个线程等到底",异步模型是 "一个线程处理多个请求,谁响应了就处理谁"。后者的资源利用率远远更高。
三、全维度对比表
| 对比维度 | Nginx | Zuul 1.x | Zuul 2.x | Spring Cloud Gateway |
|---|---|---|---|---|
| 语言 | C | Java | Java | Java |
| I/O 模型 | epoll 异步非阻塞 | Servlet 同步阻塞 | Netty 异步非阻塞 | Netty + Reactor 异步非阻塞 |
| 并发模型 | 多进程 + 事件驱动 | 线程池(Tomcat) | Event Loop | Event Loop(Reactor) |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 服务发现集成 | ❌ | ✅ Eureka | ✅ Eureka | ✅ Nacos / Eureka |
| 动态路由 | 需 reload | ✅ | ✅ | ✅ |
| 负载均衡 | upstream 配置 | ✅ Ribbon | ✅ Ribbon | ✅ LoadBalancer |
| 限流 | limit_req 模块 | ❌ | ❌ | ✅ 内置 + Sentinel |
| 熔断降级 | ❌ | ✅ Hystrix | ✅ Hystrix | ✅ Sentinel |
| 鉴权过滤 | Lua(OpenResty) | Java Filter | Java Filter | Java GlobalFilter |
| 监控 | 简单 | ✅ | ✅ | ✅ Actuator + Prometheus |
| 维护状态 | ✅ 活跃 | ❌ 停更 | ❌ 停更 | ✅ Spring 官方主推 |
| 学习成本 | 中(Nginx + Lua) | 低 | 中 | 中 |
| 部署形态 | 独立进程 | Spring Boot 应用 | 独立进程 | Spring Boot 应用 |
四、常见误区
误区 1:"有了 Gateway 就不需要 Nginx 了"
错。生产环境中 Nginx 和 Gateway 各司其职:
- Nginx 负责 SSL 终止、静态资源、流量分发、防 DDoS
- Gateway 负责微服务路由、业务鉴权、限流熔断
误区 2:"Gateway 性能比 Nginx 好"
错。Gateway 是 Java 应用,Nginx 是 C 语言写的,单纯比 I/O 吞吐量 Nginx 碾压 Gateway。但 Gateway 胜在微服务集成能力强,用 Java 写过滤器团队维护成本低。
误区 3:"Zuul 2.x 和 Gateway 差不多"
原理上确实都用了异步非阻塞,但 Zuul 2.x 已不在 Spring Cloud 官方路线图内,社区生态和维护支持远不如 Gateway。新项目没有理由选 Zuul。
五、生产环境推荐架构
- 外层:Nginx 多实例 + Keepalived 实现高可用,负责 SSL、静态资源、流量分发
- 内层:Gateway 多实例部署,Nginx 通过
upstream做负载均衡分发到各 Gateway 实例 - 服务层:各微服务多实例部署,Gateway 从 Nacos 获取服务列表做动态路由
面试高频追问
- Nginx 和 Gateway 可以只用一个吗?
- 小项目可以只用 Gateway,但生产环境建议 Nginx + Gateway 分层。Nginx 扛得住更大的并发,且 Gateway 挂了不影响 Nginx 层的静态资源和 SSL
- Zuul 为什么被淘汰了?
- Zuul 1.x 同步阻塞性能差;Zuul 2.x 虽然改为异步但跳票太久(从 2016 到 2018),Spring 官方等不及自己开发了 Gateway;加之 Netflix 大量组件停更,社区转向了 Spring Cloud Alibaba 体系
- Gateway 如何实现高可用?
- Gateway 本身无状态,通过多实例部署 + Nginx 负载均衡实现高可用。某个 Gateway 实例挂了,Nginx 自动将流量转发到其他实例
- Nginx 怎么和 Gateway 配合?
- Nginx 配置
upstream指向多个 Gateway 实例,请求先经过 Nginx 的 SSL 终止和流量分发,再转发到 Gateway 进行业务路由
- Nginx 配置
常见面试变体
- "生产环境中 Nginx 和 Spring Cloud Gateway 怎么配合使用?"
- "为什么不用 Nginx 直接做微服务网关?"
- "Gateway 和 Zuul 的底层 I/O 模型有什么区别?"
- "网关层如何设计高可用方案?"
记忆口诀
三者定位:Nginx 是大门,Gateway 是前台,Zuul 已退休
Nginx 扛流量(C 语言 + epoll),Gateway 管路由(Java + 微服务生态),Zuul 别再提(已停更)。
生产环境分层用:外面 Nginx 挡,里面 Gateway 转。
总结
Nginx、Gateway、Zuul 三者定位不同:Nginx 是通用反向代理(C 语言,性能极高),Gateway 是微服务网关(Java,深度集成 Spring Cloud),Zuul 是已淘汰的第一代微服务网关。生产环境推荐 Nginx(外层流量入口)+ Gateway(内层微服务网关) 的分层架构,各司其职,不要混用。