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 网关,由一个统一的入口管理接口,降低了证书更换时的复杂度。
posted @ 2025-02-16 11:25 Brian_Huang 阅读(64) 评论(1) 推荐(0) 编辑
摘要: 记忆封装 - Memory (langchain memory) Memory:这里不是物理内存,从文本的角度,可以理解为“上文”、“历史记录”或者说“记忆力”的管理 ConversationBufferMemory可也用来保留会话信息 In [ ]: from langchain.memory i 阅读全文
posted @ 2023-10-06 14:38 Brian_Huang 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 部分内容参考:https://zhuanlan.zhihu.com/p/164502624 近年来,NLP自然语言处理、推荐系统,以及计算机视觉已成为目前工业界算法岗的主流方向,无论在哪个领域,对“Embedding”这个词概念的理解都是每个庞大知识体系的基石。 “Embedding”直译是嵌入式、 阅读全文
posted @ 2023-09-24 17:57 Brian_Huang 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 环境:Python 3.11.4, LangChain 0.0.270, Jupyter Models模型简介 官方地址:LangChian - Models Langchain所封装的模型分为两类: 大语言模型 (LLM) 聊天模型 (Chat Models) Langchain的支持众多模型供应 阅读全文
posted @ 2023-09-16 20:10 Brian_Huang 阅读(870) 评论(0) 推荐(0) 编辑
摘要: 环境:Python 3.11.4, LangChain 0.0.270 1.Langchain 简介 1.1 Python Langchain官方文档 大型语言模型(LLM)正在成为一种具有变革性的技术,使开发人员能够构建以前无法实现的应用程序。然而,仅仅依靠LLM还不足以创建一个真正强大的应用程序 阅读全文
posted @ 2023-09-16 16:35 Brian_Huang 阅读(1017) 评论(0) 推荐(0) 编辑
摘要: 1. Plugins 是什么 1.1 Plugins 的工作原理 1.2 Plugin开发 官方开发文档:https://platform.openai.com/docs/plugins/introduction 可能是史上最容易开发的 plugin。只需要定义两个文件: 1. `yourdomai 阅读全文
posted @ 2023-09-16 16:11 Brian_Huang 阅读(2027) 评论(1) 推荐(0) 编辑
摘要: 1. 什么是提示工程(Prompt Engineering) 提示工程也叫指令工程。 Prompt就是你发给ChatGPT的指令,比如写个会议纪要、用Python编个一个博客网站、纪念日给另一半写个俏皮的情书等。貌似简单,但意义非凡 Prompt是AGI时代的编程语言,Prompt工程是AGI时代的 阅读全文
posted @ 2023-09-09 22:18 Brian_Huang 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 原文:What Are Transformer Models and How Do They Work? Transformer模型是机器学习中最令人兴奋的新发展之一。它们在论文Attention is All You Need中被介绍。Transformer可以用于写故事、文章、诗歌,回答问题,翻 阅读全文
posted @ 2023-08-26 16:35 Brian_Huang 阅读(979) 评论(0) 推荐(0) 编辑
摘要: 1.什么是深度学习(神经网络)? 深度学习(Deep Learning, DL)或阶层学习(hierarchical learning)是机器学习的技术和研究领域之一,通过建立具有阶层结构的人工神经网络(Artifitial Neural Networks, ANNs),在计算系统中实现人工智能 。 阅读全文
posted @ 2023-08-15 22:21 Brian_Huang 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 1.什么是机器学习? 机器学习 (ML) 是人工智能 (AI) 的一部分,属于计算科学领域,专门分析和解释数据的模式及结构,以实现无需人工交互即可完成学习、推理和决策等行为的目的。机器学习在没有明确指令的情况下,依靠既有模式和推理来执行任务。计算机系统使用机器学习算法来处理大量历史数据,并识别数据模 阅读全文
posted @ 2023-08-13 22:17 Brian_Huang 阅读(324) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示