当前位置: 首页 > news >正文

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的最大数值和

题目&#xff1a; 题解&#xff1a; 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)工程:技巧与最佳实践

在人工智能领域&#xff0c;AI作画已成为一个令人兴奋的创新点&#xff0c;它结合了艺术与科技&#xff0c;创造出令人惊叹的视觉作品。本文将探讨在使用AI作画时的提示词工程&#xff0c;提供技巧与最佳实践。 理解AI作画 AI作画通常依赖于深度学习模型&#xff0c;尤其是生成…...

leetcode滑动窗口问题

想成功先发疯&#xff0c;不顾一切向前冲。 第一种 定长滑动窗口 . - 力扣&#xff08;LeetCode&#xff09;1456.定长子串中的元音的最大数目. - 力扣&#xff08;LeetCode&#xff09; No.1 定长滑窗套路 我总结成三步&#xff1a;入-更新-出。 1. 入&#xff1a;下标为…...

QT 控件使用案例

常用控件 表单 按钮 Push Button 命令按钮。Tool Button&#xff1a;工具按钮。Radio Button&#xff1a;单选按钮。Check Box&#xff1a;复选框按钮。Command Link Button&#xff1a;命令链接按钮。Dialog Button Box&#xff1a;按钮盒。 容器组控件(Containers) Group Box…...

【MySQL 10】表的内外连接 (带思维导图)

文章目录 &#x1f308; 一、内连接⭐ 0. 准备工作⭐ 1. 隐式内连接⭐ 2. 显式内连接 &#x1f308; 二、外连接⭐ 0. 准备工作⭐ 1. 左外连接⭐ 2. 右外连接 &#x1f308; 一、内连接 内连接实际上就是利用 where 子句对两张表形成的笛卡儿积进行筛选&#xff0c;之前所有的…...

【C语言】:与文件通信

1.文件是什么&#xff1f; 文件通常是在磁盘或固态硬盘上的一段已命名的存储区。C语言把文件看成一系列连续的字节&#xff0c;每个字节都能被单独的读取。这与UNIX环境中&#xff08;C的 发源地&#xff09;的文件结构相对应。由于其他环境中可能无法完全对应这个模型&#x…...

HTTPS通讯全过程

HTTPS通讯全过程 不得不说&#xff0c;https比http通讯更加复杂惹。在第一次接触https代码的时候&#xff0c;不知道为什么要用用证书&#xff0c;公钥是什么&#xff1f;私钥是什么&#xff1f;他们作用是什么&#xff1f;非对称加密和对称加密是啥&#xff1f;天&#xff0c;…...

建筑物规则化(实现) --- 特征边分组、重构、直角化

规则化建筑物 一、摘 要 建筑物多边形在地图综合中的两类处理模型:化简与直角化。 建筑物矢量数据来源广泛&#xff0c;在数据获取过程中&#xff0c;受GPS精确度、遥感影像分辨率或人为因素的影响&#xff0c;数据往往存在不同程度的误差。其中&#xff0c;图像分割、深度学习…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...