API网关之Apache ShenYu
Apache ShenYu(原名Soul)是一个开源的API网关,旨在支持高性能、跨语言和云原生架构。它为管理和控制客户端与服务之间的数据流提供了一种高效且可扩展的解决方案。
文档见 Apache ShenYu 介绍 | Apache ShenYu
以下是Apache ShenYu的详细介绍:

1. 基本概念
- API网关:Apache ShenYu充当反向代理,接收所有传入的API请求,将其路由到适当的微服务,并将聚合结果返回给客户端。它简化了客户端与多个微服务之间的交互,并提供了统一的入口点。
- 插件化架构:ShenYu采用插件化设计,支持通过插件机制来扩展功能。常见的插件包括路由、负载均衡、限流、鉴权、日志、监控等。用户可以根据需求自定义和组合这些插件,以满足不同的业务场景。
- 跨语言支持:ShenYu通过支持不同的协议(如HTTP, gRPC, Dubbo等)来实现跨语言的服务调用。这使得它可以在不同语言的微服务之间无缝通信。
- 高性能:ShenYu采用了异步、非阻塞的架构设计,并利用Netty作为底层网络库,确保了高并发和低延迟的请求处理能力。
2. 核心特性
- 动态路由:支持根据请求的不同属性(如路径、请求头、参数等)动态地将请求路由到不同的微服务。
- 负载均衡:提供多种负载均衡策略(如轮询、随机、加权等)来分发请求,提高系统的可靠性和性能。
- 限流与熔断:通过限流和熔断机制,防止服务过载,保障系统的稳定性。
- 安全管理:支持多种鉴权方式(如JWT、OAuth2等)来保护API的安全性,并提供防护措施来抵御常见的网络攻击。
- 日志与监控:内置日志和监控功能,帮助开发者和运维人员实时了解系统的运行状态,并快速定位和解决问题。
3. 编程模型
- 配置中心:ShenYu通常与配置中心集成,如Apollo、Nacos等,以支持配置的动态更新。
- 插件开发:开发者可以根据业务需求编写自定义插件,插件开发相对简单,并能很好地与现有插件体系集成。
- RESTful接口:通过简单易用的RESTful API,开发者可以轻松管理和配置ShenYu网关。
4. 运行时模式
- 单机模式:适用于开发和测试环境,所有插件和配置都在本地文件中管理,易于部署和调试。
- 集群模式:适用于生产环境,通过Zookeeper或其他注册中心实现集群内多个ShenYu实例的协调,支持高可用和负载均衡。
5. 状态管理与容错
- 无状态架构:ShenYu本身是无状态的,所有状态信息(如路由配置、插件状态)都存储在外部系统中(如数据库、配置中心),这使得它能够轻松扩展并实现高可用。
- 容错机制:通过熔断和重试机制,ShenYu能够在服务异常时自动降级或切换,保障系统的连续性。
6. 生态系统与集成
- 与Spring Cloud集成:ShenYu与Spring Cloud生态紧密集成,可以作为Spring Cloud微服务的API网关。
- 与Kubernetes集成:支持在Kubernetes环境中部署和管理,适应云原生架构。
- 与服务网格的协同:可以与Istio等服务网格解决方案协同工作,提供更细粒度的流量控制和安全管理。
7. 应用与使用案例
- 电商平台:ShenYu广泛应用于电商平台的微服务架构中,通过其高性能和扩展性应对大量的并发请求。
- 金融服务:在金融领域,ShenYu的安全特性和稳定性使其成为API管理的理想选择,确保交易的安全和系统的稳定。
- 物联网:在物联网场景下,ShenYu通过其跨语言支持和高可用性,有效地管理设备与后台服务的通信。
8. 用户案例
- 字节跳动:作为全球领先的科技公司,字节跳动在其众多服务中采用了ShenYu来管理和优化其API流量。
- 其他企业:包括多个行业的领先企业(如金融、零售、科技)都在使用ShenYu来提高其系统的可靠性和效率。
9. 场景示例
假设我们有两个微服务:
- 用户服务(User Service):提供用户信息查询功能,API路径为
/user/{id}。 - 订单服务(Order Service):提供订单信息查询功能,API路径为
/order/{id}。
我们希望通过ShenYu网关来统一管理这两个服务,并且通过不同的URL前缀来路由请求到相应的服务。
步骤
9.1. 安装与配置ShenYu
首先,您需要安装和配置Apache ShenYu。可以通过Docker快速启动ShenYu:
docker pull apache/shenyu-bootstrap
docker run -d -p 9095:9095 -p 9195:9195 apache/shenyu-bootstrap
ShenYu默认会运行在9095端口,管理后台运行在9195端口。
9.2. 配置注册中心
ShenYu支持与多种注册中心集成,如Nacos、Zookeeper等。假设我们使用Nacos作为配置中心和注册中心。
在ShenYu的配置文件中(如application.yml),添加Nacos配置:
shenyu:register:registerType: nacosserverLists: http://nacos-server:8848props:namespace: shenyuusername: nacospassword: nacos
9.3. 配置路由规则
登录ShenYu管理后台,配置路由规则,将不同的URL前缀路由到相应的微服务。
-
配置用户服务路由:
- 插件类型:Divide(HTTP代理)
- 匹配条件:Path Prefix
/api/user/** - 路由到的微服务地址:
http://user-service:8080
-
配置订单服务路由:
- 插件类型:Divide
- 匹配条件:Path Prefix
/api/order/** - 路由到的微服务地址:
http://order-service:8081
9.4. 测试路由
配置完成后,可以通过ShenYu网关来访问微服务。
例如:
- 访问用户服务:
http://shenyu-gateway:9095/api/user/123 - 访问订单服务:
http://shenyu-gateway:9095/api/order/456
ShenYu会根据URL前缀,将请求分别路由到相应的微服务并返回结果。
9.5. 插件扩展
您还可以在ShenYu中启用各种插件,比如鉴权、限流、日志记录等。以启用JWT鉴权插件为例:
- 在管理后台插件管理中启用JWT插件。
- 设置JWT密钥和相关验证规则。
- 所有通过ShenYu的请求都将通过JWT插件验证后再进行路由。
Apache ShenYu通过其强大的功能和灵活的架构,成为现代化微服务架构中不可或缺的API网关解决方案。
相关文章:
API网关之Apache ShenYu
Apache ShenYu(原名Soul)是一个开源的API网关,旨在支持高性能、跨语言和云原生架构。它为管理和控制客户端与服务之间的数据流提供了一种高效且可扩展的解决方案。 文档见 Apache ShenYu 介绍 | Apache ShenYu 以下是Apache ShenYu的详细介…...
ECMA Script 6
文章目录 DOM (Document Object Model)BOM (Browser Object Model) let 和 const 命令constObject.freeze方法跨模块常量全局对象的属性 变量的结构赋值数组结构赋值对象解构赋值字符串解构赋值数值和布尔值的解构赋值函数参数解构赋值圆括号的问题 解构赋值的用途 字符串的扩展…...
如何在不破产的情况下训练AI模型
在当今的人工智能领域,训练复杂的AI模型——特别是大型语言模型(LLM)——需要巨大的算力支持。对于许多中小型企业来说,高昂的成本常常成为一个难以逾越的障碍。然而,通过采用一些策略和最佳实践,即使是在资源有限的情况下,也能有效地训练出高质量的AI模型。本文将介绍几…...
常用开发组件Docker部署保姆级教程
说明 本文总结了一些常用组件的Docker启动命令及过程,在开发过程中只需花费数分钟下载和配置即可完美使用这些服务。 Mysql MySQL 是一种开源关系数据库管理系统(RDBMS),目前由 Oracle 公司维护。MySQL 以其高性能、可靠性和易用…...
MySql高级视频笔记
索引 索引 : 是帮助MySql高效查询数据的数据结构 优势&劣势 优势: 提高数据检索的效率, 降低数据库的IO成本通过索引列队数据进行排序, 降低数据的排序成本, 降低CPU的消耗 劣势: 索引维护了主键信息, 并指向表中数据记录, 也是占用磁盘空间的索引提高了查询效率, 但索引也…...
二十二、状态模式
文章目录 1 基本介绍2 案例2.1 Season 接口2.2 Spring 类2.3 Summer 类2.4 Autumn 类2.5 Winter 类2.6 Person 类2.7 Client 类2.8 Client 类的运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 State ( 状态 )3.1.2 ConcreteState ( 具体的状态 )3.1.3 Context ( 上下文 )3.…...
Spark环境搭建-Local
目录 Local下的角色分布: Anaconda On Linux 安装 (单台服务器) 1.下载安装 2.国内源 下载Spark安装包 1.下载 2.解压 3.环境变量 测试 监控 Local下的角色分布: 资源管理: Master:Local进程本身 Worker:L…...
使用FModel提取黑神话悟空的资产
使用FModel提取黑神话悟空的资产 前言设置效果展示闲聊可能遇到的问题没有相应的UE引擎版本选项 前言 黑神话悟空昨天上线了,解个包looklook。 本文内容比较简洁,仅介绍解包黑神话所需的专项配置,关于FModel的基础使用流程,请见…...
MYSQL定时任务使用手册
开发和管理数据库时,经常需要定时执行某些任务,比如每天备份数据库、每周统计报表等。MySQL提供了一个非常有用的工具,即事件调度器(Event Scheduler),可以帮助我们实现定时任务调度的功能。本文将介绍如何…...
SAP 预扣税配置步骤文档【Withholding Tax]
1. 配置预扣税的基本概念 预扣税是对某些支付进行扣除的税,可能适用于各种财务交易(例如,供应商支付、股息支付等)。预扣税通常包括几种类型,如个人所得税、企业所得税和其他税务种类。 2. 配置步骤 以下是一般的预…...
Ubuntu ssh配置
下面给出配置和使用ubuntu ssh的指南。 环境 Ubuntu22.04 安装Install sudo apt update && sudo apt upgrade sudo apt install openssh-server使用start service ssh status sudo systemctl enable --now ssh sudo ufw allow ssh连接Connect search "conn…...
Spring Boot OAuth2.0应用
本文展示Spring Boot中,新版本OAuth2.0的简单实现,版本信息: spring-boot 2.7.10 spring-security-oauth2-authorization-server 0.4.0 spring-security-oauth2-client 5.7.7 spring-boot-starter-oauth2-resource-server 2.7.10展示三个服务…...
Java | Leetcode Java题解之第363题矩形区域不超过K的最大数值和
题目: 题解: class Solution {public int maxSumSubmatrix(int[][] matrix, int k) {int ans Integer.MIN_VALUE;int m matrix.length, n matrix[0].length;for (int i 0; i < m; i) { // 枚举上边界int[] sum new int[n];for (int j i; j <…...
AI作画提示词(Prompts)工程:技巧与最佳实践
在人工智能领域,AI作画已成为一个令人兴奋的创新点,它结合了艺术与科技,创造出令人惊叹的视觉作品。本文将探讨在使用AI作画时的提示词工程,提供技巧与最佳实践。 理解AI作画 AI作画通常依赖于深度学习模型,尤其是生成…...
leetcode滑动窗口问题
想成功先发疯,不顾一切向前冲。 第一种 定长滑动窗口 . - 力扣(LeetCode)1456.定长子串中的元音的最大数目. - 力扣(LeetCode) No.1 定长滑窗套路 我总结成三步:入-更新-出。 1. 入:下标为…...
QT 控件使用案例
常用控件 表单 按钮 Push Button 命令按钮。Tool Button:工具按钮。Radio Button:单选按钮。Check Box:复选框按钮。Command Link Button:命令链接按钮。Dialog Button Box:按钮盒。 容器组控件(Containers) Group Box…...
【MySQL 10】表的内外连接 (带思维导图)
文章目录 🌈 一、内连接⭐ 0. 准备工作⭐ 1. 隐式内连接⭐ 2. 显式内连接 🌈 二、外连接⭐ 0. 准备工作⭐ 1. 左外连接⭐ 2. 右外连接 🌈 一、内连接 内连接实际上就是利用 where 子句对两张表形成的笛卡儿积进行筛选,之前所有的…...
【C语言】:与文件通信
1.文件是什么? 文件通常是在磁盘或固态硬盘上的一段已命名的存储区。C语言把文件看成一系列连续的字节,每个字节都能被单独的读取。这与UNIX环境中(C的 发源地)的文件结构相对应。由于其他环境中可能无法完全对应这个模型&#x…...
HTTPS通讯全过程
HTTPS通讯全过程 不得不说,https比http通讯更加复杂惹。在第一次接触https代码的时候,不知道为什么要用用证书,公钥是什么?私钥是什么?他们作用是什么?非对称加密和对称加密是啥?天,…...
建筑物规则化(实现) --- 特征边分组、重构、直角化
规则化建筑物 一、摘 要 建筑物多边形在地图综合中的两类处理模型:化简与直角化。 建筑物矢量数据来源广泛,在数据获取过程中,受GPS精确度、遥感影像分辨率或人为因素的影响,数据往往存在不同程度的误差。其中,图像分割、深度学习…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...
Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...
