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

打印 上一主题 下一主题

主题 881|帖子 881|积分 2647

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 Gateway1. 与 Spring 生态无缝集成。
2. 配置简单,易于上手。
3. 社区活泼,文档丰富。
1. 功能扩展依靠 Spring 生态。
2. 插件化本领较弱。
3. 性能在高并发场景下可能不足。
Apache ShenYu1. 高性能,全异步设计。
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 网关,由一个统一的入口管理接口,降低了证书更换时的复杂度。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表