API网关之Apache ShenYu

news2024/11/24 14:33:48

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: nacos
    serverLists: http://nacos-server:8848
    props:
      namespace: shenyu
      username: nacos
      password: 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网关解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯2021第十二届蓝桥杯青少年组省赛试题真题

带我去看题解!!! 带我去看题单!!! 目录 第一题:[2021第十二届蓝桥杯青少年组省赛] 字符串 题目背景 题目描述 输入格式 输出格式 输入输出样例 第二题:[2021第十二届蓝桥杯…

谷歌云AI新作:CROME,跨模态适配器高效多模态大语言模型

CROME: Cross-Modal Adapters for Efficient Multimodal LLM https://arxiv.org/pdf/2408.06610 Abstract 研究对象:Multimodal Large Language Models (MLLMs) demonstrate remarkable imagelanguage capabilities, but their widespread use faces challenges in…

转行游戏测试,小白到入门我只用了5天

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2183.html Hey朋友们!👋有没有想过,AI怎么让游戏测试变得更轻松?🤔🎮作为刚入行游戏界的小白鼠&am…

使用Node-RED发送数据到巴法云

上一篇博文完成了Node-RED的安装,下面来尝试一下用Node-RED来发送数据到巴法云服务器。 我在教学用MQTT工具的思考-CSDN博客中说过,巴法云支持云云互联,可以连小米、百度,学生使用的兴趣高。所以今天先测试Node-RED和巴法云的连接…

TOMCAT入门到精通

目录 一 WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS(Cascading Style Sheets)层叠样式表 1.2.3 JavaScript 二 WEB框架 2.2后台应用架构 2.2.1单体架构 2.2.2微服务 2.2.3单体架构和微服务比较 三 tomcat的…

VScode 连接远程服务器

1、 2、 3、免密登录 1、本地生成密钥 ssh-keygen2、生成的密钥默认在 C:\Users\***\.ssh\ 中3、将私钥 C:\Users\***\.ssh\id_rsa 添加到上面的配置文件中的 IdentityFile 项内4、将公钥 C:\Users\***\.ssh\id_rsa\id_rsa.pub 拷贝到远程 ~/.ssh/authorized_keys 中 4、远程…

智能巡检新突破:防爆巡检机器人打造油气化工安全高效新标杆

一、项目背景 2023年中国石油产量达到2.08亿吨、油气勘探投资额超过840亿元,油气开发投资额约2860亿元。油气的产量和开发投资在大幅增长扩大,而油气田、石油石化企业在日常生产维护时需要大量的投入人工进行巡检。传统的人工巡检存在巡检采集点增多、高…

「C++系列」vector 容器

文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一:存储动态大小的数据集合案例二:实现栈 三、相关链接 一、vector 容器 C 中的 vector 是一个非常常用的容器(container)&#…

望繁信科技入选2024年第3批上海市高新技术成果转化项目名单

近日,上海望繁信科技有限公司(以下简称“望繁信科技”)凭借其自主研发的“数字北极星流程挖掘分析软件”项目,成功入选2024年第3批上海市高新技术成果转化项目名单。这一殊荣根据《上海市高新技术成果转化项目认定办法》&#xff…

Prism-学习笔记1-安装Prism

安装Prism 在VS2022中安装如下图: 2. 搜索Prism,安装Prism:(ps:如果安装很慢,直接往上搜关键字 Prism template Pack 下载,或者这里我下载好的Prism包,提取码:bi7c&…

Vue3 走马灯Vue3Marquee组件库的使用 文字走马灯 公告栏

介绍 Vue3Marquee 是一个用于在 Vue 3 项目中创建跑马灯(Marquee)效果的组件库,常见于网站的公告,如文字太长可以考虑使用该组件让文字进行滚动, 当然不止是文字 元素也可以。 项目地址 https://gitcode.com/gh_mir…

信息竞赛2024年第三次csp-j模拟测试赛后总结

目录 一.第一题:孤独的数列 (lonely) 二.第二题:五颜六色 (color) 三.第三题:获取字符串 (obtain) 首先自我反思,因为打错了freopen导致爆零,这是重大的失误,以后绝对不能再犯。 一.第一题:…

【前端】VUE 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用

【前端】VUE2 在线运行 模拟器 通过字符串动态渲染页面 可以灵活使用 <template><div><!-- 这里是动态组件--><component :is"component"></component><!-- 这里是动态组件--><br /><br /><br />可…

【源码+文档+调试讲解】学院网站

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次…

序列建模之循环和递归网络 - 长短期记忆和其他门控RNN篇

序言 在序列建模的广阔领域中&#xff0c;循环神经网络&#xff08; RNN \text{RNN} RNN&#xff09;以其独特的能力在处理可变长度序列数据上展现出了巨大的潜力。然而&#xff0c;传统的 RNN \text{RNN} RNN在处理长期依赖问题时&#xff0c;往往面临着梯度消失或爆炸的困境…

xss靶场 pwnfunction WW3

目录 代码 代码分析 payload构造 结果 代码 <div><h4>Meme Code</h4><textarea class"form-control" id"meme-code" rows"4"></textarea><div id"notify"></div> </div><scri…

UIAbility组件间的交互

一、Want 是UIAbility组件间交互载体。 Want启动UIAbility组件的两种方式&#xff1a; 1、显示Want启动 启动某个明确UIAbility组件时使用&#xff1b;需要在Want参数中设置启动的应用包名和UIAbility组件名。 2、隐式Want启动 需要使用某个应用的能力&#xff0c;不关心提供能…

在VBA中调用Adobe Acrobat或Reader的命令行工具,实现PDF自动打印 (‾◡◝)

在VBA&#xff08;Visual Basic for Applications&#xff09;中自动打印PDF文件通常不直接支持&#xff0c;因为VBA本身是针对Microsoft Office应用程序&#xff08;如Excel、Word和PowerPoint等&#xff09;的编程语言&#xff0c;并不直接处理PDF文件。但是&#xff0c;你可…

【JAVA多线程】CompletableFuture原理剖析

前文讲解了completablefuture的使用&#xff0c;本文将剖析其核心原理&#xff0c;前文连接&#xff1a; 【JAVA多线程】Future&#xff0c;专为异步编程而生_java future异步编程-CSDN博客 目录 1.任务组成任务链 2.默认使用ForkjoinPool作为线程池 3.任务是被串行执行的…

人工智能在Facebook的角色:创新与挑战并存

人工智能&#xff08;AI&#xff09;已经成为推动科技进步的重要力量&#xff0c;而在社交媒体领域&#xff0c;Facebook则是将AI技术广泛应用的先锋。Facebook通过AI来改善用户体验、提高内容质量以及优化广告投放&#xff0c;极大地提升了平台的功能与价值。然而&#xff0c;…