首页
编程语言

分类

当前位置: 天天编程网 > 技术新闻 > 编程语言 >正文

架构设计(四) Java生态的网关对比 Spring Cloud Gateway和Apache ShenYu

更新时间:2025-02-16  作者:佚名   来源: 网络转载

架构设计(四) Java生态的网关对比 Spring Cloud Gateway和Apache ShenYu

1. 项目背景

Spring Cloud Gateway (https://spring.io/projects/spring-cloud-gateway)
- 由 Spring 官方开发,属于 Spring Cloud 生态的一部分。
- 定位为微服务架构中的 API 网关,专注于为微服务提供路由、负载均衡、限流、熔断等功能。
- 基于 Spring 6、Project Reactor 和 Spring Boot 3 构建,支持异步非阻塞模型。

Apache ShenYu (https://shenyu.apache.org/)
- 由 Apache 基金会孵化,前身为 Dromara 社区的 Soul 网关。
- 定位为高性能、全异步的 API 网关,支持多种协议(HTTP、WebSocket、gRPC 等)。
- 强调插件化架构,支持动态扩展,适合复杂的微服务场景。

2. 核心功能对比

功能特性 Spring Cloud Gateway  Apache ShenYu
路由功能 1.支持基于路径、Header、Query 参数的路由配置
2.支持动态路由(通过 Spring Cloud Config 或注册中心)。
1.支持基于路径、Header、Cookie、IP 等的路由配置
2.支持动态路由(通过 Nacos、Zookeeper、Consul 等)
负载均衡 1.集成 Ribbon 或 Spring Cloud LoadBalancer
2.支持简单的负载均衡策略(如轮询、随机)。
1.支持多种负载均衡策略(随机、轮询、权重等)
2.支持自定义负载均衡算法。
限流 1.支持基于 Redis 的分布式限流
2.集成 Resilience4j 或 Sentinel 实现限流。
1.支持多种限流算法(令牌桶、漏桶等)
2.支持分布式限流,集成 Sentinel。
熔断 集成 Hystrix 或 Resilience4j  支持熔断降级,集成 Sentinel
协议支持 1.主要支持 HTTP/HTTPS
2.对 WebSocket 和 gRPC 的支持较弱
支持 HTTP/HTTPS、WebSocket、gRPC、Dubbo 等
插件化架构 不支持插件化,功能扩展依赖 Spring 生态 
1.高度插件化,支持动态加载和扩展。
2.提供丰富的官方插件(如限流、鉴权、监控等)。
动态配置
1.支持通过 Spring Cloud Config 动态更新配置。
2.依赖 Spring 生态的配置中心。
1.支持通过 Nacos、Zookeeper、Consul 等动态更新配置。
2.提供 Admin 控制台,支持可视化配置。
监控与日志
1.集成 Micrometer 和 Actuator,支持监控指标。
2.日志功能依赖 Spring Boot 的日志框架。
1.提供丰富的监控指标和日志记录。
2.支持 Prometheus、Grafana 等监控工具集成。
性能
1.基于 Reactor 模型,性能较高。
2.在高并发场景下可能存在性能瓶颈。
1.全异步设计,基于 Netty,性能优异。
2.适合高并发、大规模微服务场景。

 

3. 架构设计

Spring Cloud Gateway
- 基于 Spring WebFlux,采用 Reactor 模型,支持非阻塞 I/O。
- 架构简单,与 Spring 生态无缝集成,适合 Spring Cloud 用户。
- 配置方式以代码配置为主,支持 YAML 文件配置。

Apache ShenYu
- 采用全异步设计,基于 Netty 实现高性能通信。
- 插件化架构,核心功能通过插件实现,支持动态扩展。
- 提供 Admin 控制台,支持可视化配置和管理。

4. 生态系统

Spring Cloud Gateway
- 深度集成 Spring Cloud 生态(如 Eureka、Consul、Nacos 等)。
- 依赖 Spring Boot 和 Spring 框架,适合 Spring 技术栈的用户。
- 社区活跃,文档丰富,但功能扩展依赖 Spring 生态。

Apache ShenYu
- 支持多种注册中心(Nacos、Zookeeper、Consul 等)。
- 支持多种协议和插件,适合多语言、多协议的场景。
- 社区活跃,Apache 基金会支持,生态逐渐完善。

5. 性能对比

Spring Cloud Gateway
- 基于 Reactor 模型,性能较高,适合中小型微服务场景。
- 在高并发场景下可能存在性能瓶颈。

Apache ShenYu
- 全异步设计,基于 Netty,性能优异,适合高并发、大规模微服务场景。
- 在复杂路由和插件扩展场景下表现更好。

 

6. 适用场景

Spring Cloud Gateway
- 适合 Spring Cloud 生态的用户,尤其是中小型微服务项目。
- 需要快速集成 Spring 生态组件(如 Eureka、Hystrix 等)。
- 对性能要求不是极端高的场景。

Apache ShenYu
- 适合需要高性能、多协议支持的大型微服务项目。
- 需要高度插件化和动态扩展能力的场景。
- 对高并发、复杂路由有较高要求的场景。

 7. 优缺点总结

项目 优点 缺点
Spring Cloud Gateway 1. 与 Spring 生态无缝集成。
2. 配置简单,易于上手。
3. 社区活跃,文档丰富。
1. 功能扩展依赖 Spring 生态。
2. 插件化能力较弱。
3. 性能在高并发场景下可能不足。
Apache ShenYu 1. 高性能,全异步设计。
2. 插件化架构,扩展性强。
3. 支持多协议,适合复杂场景。
1. 学习曲线较陡峭。
2. 对 Spring 生态的依赖较弱。
3. 文档和社区支持相对较少。

 如果你的项目基于 Spring Cloud 生态,且对性能要求不是特别高,Spring Cloud Gateway是一个简单易用的选择。如果你的项目需要高性能、多协议支持,或者需要高度插件化和动态扩展能力,Apache ShenYu 是更好的选择。

9.补充网关的基本功能

现在的网关系统一般需要提供下面这些功能
请求转发:将请求转发到目标微服务。
负载均衡:根据各个微服务实例的负载情况或者具体的负载均衡策略配置对请求实现动态的负载均衡。安全认证:对用户请求进行身份验证并仅允许可信客户端访问 API,并且还能够使用类似 RBAC 等方式来授权。
参数校验:支持参数映射与校验逻辑。
日志记录:记录所有请求的行为日志供后续使用。
监控告警:从业务指标、机器指标、JVM 指标等方面进行监控并提供配套的告警机制。
流量控制:对请求的流量进行控制,也就是限制某一时刻内的请求数。
熔断降级:实时监控请求的统计信息,达到配置的失败阈值后,自动熔断,返回默认值。
响应缓存:当用户请求获取的是一些静态的或更新不频繁的数据时,一段时间内多次请求获取到的数据很可能是一样的。对于这种情况可以将响应缓存起来。这样用户请求可以直接在网关层得到响应数据,无需再去访问业务服务,减轻业务服务的负担。
响应聚合:某些情况下用户请求要获取的响应内容可能会来自于多个业务服务。网关作为业务服务的调用方,可以把多个服务的响应整合起来,再一并返回给用户。
灰度发布:将请求动态分流到不同的服务版本(最基本的一种灰度发布)。
异常处理:对于业务服务返回的异常响应,可以在网关层在返回给用户之前做转换处理。这样可以把一些业务侧返回的异常细节隐藏,转换成用户友好的错误提示返回。
API 文档: 如果计划将 API 暴露给组织以外的开发人员,那么必须考虑使用 API 文档,例如 Swagger 或 OpenAPI。
协议转换:通过协议转换整合后台基于 REST、AMQP、Dubbo 等不同风格和实现技术的微服务,面向 Web Mobile、开放平台等特定客户端提供统一服务。
证书管理:将 SSL 证书部署到 API 网关,由一个统一的入口管理接口,降低了证书更换时的复杂度。
上一篇:11. Docker 微服务实战(将项目打包生成镜像,在 Docker 当中作为容器实例运行) - Rainbow 下一篇:rust学习十八.1、RUST的OOP和简单示例
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

天天编程网 版权所有

陕ICP备2023002928号-1