网关技术选型的优劣对比
常见的网关技术
在微服务架构中,API 网关通常承担统一入口、路由转发、认证鉴权、限流熔断、灰度发布、日志监控等功能。不同公司的网关技术选型往往与技术栈、业务规模、团队能力密切相关。常见网关技术主要有以下几类:
Java 生态
- Apache ShenYu
- Spring Cloud Zuul
- Spring Cloud Gateway
Nginx / Lua 生态
- Kong
- Apache APISIX
- Nginx + Lua(OpenResty)
云原生网关
- Envoy
- Higress
- Traefik
自研网关
- 基于 Netty / Servlet 自研网关
- 基于 Nginx + Lua(OpenResty)自研网关
网关技术的优劣对比
Kong
Kong 本质上是基于 Nginx + Lua(OpenResty)实现的 API 网关。
- 特点:
- 运行在 Nginx 之上
- 使用 Lua 编写网关逻辑
- 提供丰富的插件机制
- 支持认证、限流、日志、监控等功能
- 优点:
- 性能高,依托 Nginx 的高并发能力
- 插件生态丰富,很多功能开箱即用
- 配置和扩展比较灵活
- 缺点:
- Lua 技术栈在很多公司并不常见
- 深度定制开发需要熟悉 Nginx 和 OpenResty
- 运维复杂度相对较高
- 适用场景:
- 对性能要求高
- 能接受 Lua 技术栈
- 不希望自己开发大量网关功能
Spring Cloud Zuul
Zuul 是 Spring Cloud 技术栈中的网关组件,基于 Java + Servlet 模型实现。注意,Zuul 1.x 基于 Servlet,性能一般;Zuul 2.x 改为基于 Netty,性能大幅提升,但开源版本功能不完整。
- 特点:
- 与 Spring Cloud 体系深度整合
- 可以直接通过 Java 代码扩展
- 与微服务生态(Eureka、Ribbon 等)天然兼容
- 优点:
- Java 技术栈,开发和维护成本低
- 易于二次开发
- 与 Spring Cloud 微服务体系集成简单
- 缺点:
- 基于 Servlet + Tomcat
- 并发性能相比 Nginx 较弱
- 限流、灰度发布、动态路由等功能通常需要自己实现
- 适用场景:
- 中小规模业务
- Java 技术栈团队
- Spring Cloud 微服务体系
Spring Cloud Gateway
Spring Cloud Gateway 是 Spring Cloud 体系中的新一代网关组件,用于替代 Zuul。它基于 Spring WebFlux + Reactor + Netty 构建,采用异步非阻塞模型,在性能和扩展性方面相比 Zuul 有明显提升。
特点:
- 基于 Spring WebFlux(Reactive 编程模型)
- 底层使用 Netty,采用非阻塞 I/O 架构
- 与 Spring Cloud 生态(Eureka、Config、Nacos、Sentinel 等)深度整合
- 提供 Filter(过滤器)机制,支持全局过滤器和路由过滤器
- 支持 Predicate(断言)机制,用于灵活匹配路由规则
优点:
- 基于 Reactor + Netty,并发性能比 Zuul
1.x更高 - 原生支持动态路由、限流、熔断、重试、负载均衡
- 与 Spring Cloud 生态集成非常方便
- Java 技术栈,易于开发和扩展
- 支持响应式编程模型(Reactive)
- 基于 Reactor + Netty,并发性能比 Zuul
缺点:
- 依赖 Reactive 编程模型,学习成本较高
- 调试难度比传统 Servlet 模型稍高
- 对传统阻塞式组件兼容性较差
适用场景:
- Spring Cloud 微服务体系
- Java 技术栈团队
- 中大型微服务架构
- 需要较高并发能力的网关系统
Nginx + Lua(OpenResty)
Nginx + Lua(OpenResty)这种方案通常是直接基于 OpenResty 开发自己的网关组件。OpenResty = Nginx + LuaJIT + Lua 模块生态 在很多技术体系中,都会涉及如何基于 Nginx + Lua 自主实现类似 Kong 的网关组件。
- 优点:
- 极高并发性能
- 充分利用 Nginx 生态
- 可完全定制网关逻辑
- 缺点:
- Lua 技术栈门槛较高
- Nginx 源码复杂(基于 C 语言)
- 深度定制开发难度较大
- 适用场景:
- 超高并发系统
- 有 OpenResty 经验的团队
- 需要深度定制网关能力
基于 Netty / Servlet 自研网关
基于 Netty / Servlet 自研网关组件,很多互联网大厂都会选择自研网关。
- 常见实现技术:
- Netty
- Servlet
- Reactor
- 实现的核心功能:
- 动态路由
- 认证鉴权
- 限流熔断
- 灰度发布
- 服务治理
- 日志监控
- 优点:
- 完全掌控源码
- 性能可以做到非常高
- 可以根据业务需求深度定制
- 缺点:
- 研发成本高
- 需要长期维护
- 需要较强的基础设施团队
- 适用场景:
- 大型互联网公司
- 流量规模巨大
- 需要深度定制能力
大厂与中小公司的网关选型对比
- 大厂
- 常见大厂:
- BAT(百度、阿里、腾讯)
- 字节
- 京东
- 美团
- 滴滴
- 常见方案:
- 基于 Netty 自研网关
- 基于 Nginx + Lua(OpenResty)自研网关
- 选择原因:
- 流量规模巨大
- 需要深度定制能力
- 有基础设施团队支撑
- 可以长期维护自研系统
- 常见大厂:
- 中小型公司
- 中小型公司更倾向于成熟开源方案。
- 常见方案:
- Spring Cloud 技术栈
- Spring Cloud Zuul
- Spring Cloud Gateway
- Dubbo 技术栈
- Kong
- Apache ShenYu
- 有些公司甚至不使用网关,其架构是:
用户 -> Nginx(反向代理 + 负载均衡)-> 微服务
- Spring Cloud 技术栈
