API网关之Apache ShenYu

2024-08-22 07:04
文章标签 api 网关 apache shenyu

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095573

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止

Apache HttpClient使用详解

转载地址:http://eksliang.iteye.com/blog/2191017 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟