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精确度、遥感影像分辨率或人为因素的影响,数据往往存在不同程度的误差。其中,图像分割、深度学习…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...