Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

栏目: 软件资讯 · 发布时间: 3年前

内容简介:Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单 声明:本文中的Apache ShenYu 都指的是 Apache ShenYu (incubating) 本人作者:肖宇 Apache ShenYu(incubating) Founder && PPMC 2.4.0 Release Manager : ...

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

声明:本文中的Apache ShenYu 都指的是 Apache ShenYu (incubating)
本人作者:肖宇 Apache ShenYu(incubating) Founder && PPMC
2.4.0 Release Manager : 张永伦 Apache ShenYu(incubating) PPMC && Apache ShardingSphere PMC

所有的朋友们:

Apache ShenYu网关是原 Dromara/soul 网关捐献给Apache基金会后改名而来,
此次发布的 2.4.0 版本是 Apache ShenYu 网关进入Apache孵化器后的首个版本。这个版本涉及很多新功能的增加,
项目名称,包名以及maven依赖坐标的变更。

Apache ShenYu 是什么?

Apache ShenYu是使用Java reactor编程方式开发的,具有异步高性能跨语言等特性的 API 网关
在流量控制方面,有精美的Admin控制台,能够精准动态控制流量,满足复杂的业务场景。
在功能方面,它使用插件化的设计思想,支持许多常见的协议:如 http/httpsDubboSpring CloudGRPCMotanSofaTars 等。
同时内置十分丰富的功能插件,如 熔断限流鉴权黑白名单防火墙监控参数更改等等插件。其架构图如下:

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

流量控制

对流量的控制是网关的灵魂,针对流量控制,Apache ShenYu 设计了选择器规则 2个概念,来控制流量。

选择器规则Apache ShenYu 网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。

一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的一级筛选,规则就是最终的筛选。

对一个插件而言,我们希望根据我们的配置,达到满足条件的流量,插件才会被执行。

选择器和规则就是为了让流量在满足特定的条件下,才去执行我们想要的,这种规则首先要明白。

插件、选择器和规则执行逻辑如下,当流量进入到Apache ShenYu网关之后,会先判断是否有对应的插件,该插件是否开启;然后判断流量是否匹配该插件的选择器。

然后再判断流量是否匹配该选择器的规则。如果请求流量能满足匹配条件才会执行该插件,否则插件不会被执行,处理下一个。

Apache ShenYu网关就是这样通过层层筛选完成流量控制。其流程图如下 :

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

流量筛选

流量筛选,是选择器规则灵魂,对应为选择器与规则里面的匹配条件(conditions),根据不同的流量筛选规则,我们可以处理各种复杂的场景。

流量筛选可以从Header, URI, Query, Cookie 等等Http请求获取数据,

然后可以采用 Match=SpELRegexGroovy等匹配方式,匹配出你所预想的数据。

多组匹配添加可以使用And/Or的匹配策略。上述都是采用SPI的设计思想,用户可以自主进行扩展 :更多的请查看 : https://shenyu.apache.org/zh/projects/shenyu/selector-and-rule/

其过程图如下 :

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

数据同步与缓存

为了提升网关的性能Apache ShenYu 网关会将所有的流量控制规则缓存在JVM 内存里面。在集群部署/分布式场景中,Apache ShenYu 自主研发了一套 将 Admin 控制台的数据,远程同步到每一个 Apache ShenYu 网关节点 JVM内存 的方案

每一种方案,采用 SPI 设计思想,以供用户灵活的选择。目前支持的方案有 HttpLongPull, Websocket, Zookeeper, Nacos, Consul, ETCD。 其整体流程如下 :

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

Admin控制台

为了方便用户快速便捷的控制流量以及网关的所有功能特性,Apache ShenYu 提供了 一个十分精美的Admin控制台,用户可以中英文切换,在这上面,可以随意的控制流量启停插件配置不同的参数与策略,这些操作更改通过上述的数据同步原理,同步到网关的 JVM内存。其后台示意图如下:

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

##### 菜单/数据权限

网关的后台管理是十分重要的,为了针对企业级的用户,跨部门应用代理,Apache ShenYu设计了一整套的权限控制体系,它包含按钮级别的菜单权限,以及行数据级别的数据权限。并且这些权限控制在 Admin控制台 自主自动可配。

Apache ShenYu(incubating) 2.4.0: 让 API 网关更简单

协议代理

协议代理是网关最核心的功能,目前 Apache ShenYu 支持 http 转成 http/httpsWebsocket,DubboSpring CloudGRPCMotanSofaTars 等协议的转换,未来将支持 TCP, MQTT,MQTT 等协议。

#### Divide插件

Divide插件,是用来专门代理 http/https/websocket 等方式请求 Apache ShenYu 网关的插件。 它具有 负载均衡流量预热, 节点发现超时重试超时控制 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 -->Divide插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/http-proxy/

xml <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-divide</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-httpclient</artifactId> <version>${project.version}</version> </dependency>

#### Dubbo插件

Dubbo插件,是Apache ShenYu网关将 http/https 请求转换成 dubbo协议的插件 。 它采用了Dubbo泛化调用的机制,整合了 Dubbo的客户端,具有服务发现负载均衡 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> dubbo插件将其设置为 开启,并且配置上注册中心, 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/dubbo-proxy/

xml ¨K16K <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-alibaba-dubbo</artifactId> <version>${project.version}</version> </dependency> ¨K17K <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-apache-dubbo</artifactId> <version>${project.version}</version> </dependency>

#### SpringCloud插件

SpringCloud插件,是Apache ShenYu网关代理 SpringCloud微服务业务的插件 。 它整合了 SpringCloud的注册中心,以及负载均衡服务,实现了服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> SpringCloud插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/spring-cloud-proxy/

xml <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-springcloud</artifactId> <version>${project.version}</version> </dependency>

#### GRPC插件

GRPC插件,是Apache ShenYu网关将 http/https 请求转换成 GRPC协议的插件 。 它整合了 GRPC 客户端,实现了 GRPC服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> GRPC插件将其设置为 开启。 更详细的介绍请看 :https://shenyu.apache.org/zh/projects/shenyu/grpc-proxy/

xml <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-grpc</artifactId> <version>${project.version}</version> </dependency>

#### Tars插件

Tars插件,是Apache ShenYu网关将 http/https 请求转换成 Tars协议的插件 。 Tars是腾讯开源的 RPC框架, 该插件整合了 Tars-JAVA 客户端,实现了 Tars服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Tars插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/tars-proxy/

xml <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-tars</artifactId> <version>${project.version}</version> </dependency>

#### Sofa插件

Sofa插件,是Apache ShenYu网关将 http/https 请求转换成 Sofa-RPC协议的插件 。 它采用了Sofa泛化调用的机制,整合了 Sofa-RPC的客户端,具有服务发现负载均衡 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> sofa插件将其设置为 开启,并且配置上注册中心。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sofa-proxy/

xml <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-sofa</artifactId> <version>${project.version}</version> </dependency>

熔断限流

Hystrix 插件

Hystrix插件,是Apache ShenYu网关整合Hystrix框架,提供请求熔断的功能,Hystrix熔断参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Hystrix插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/hystrix-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-hystrix</artifactId>
   <version>${project.version}</version>
</dependency>

Sentinel 插件

Sentinel插件,是Apache ShenYu网关整合Sentinel框架,提供请求熔断限流的功能,Sentinel熔断限流参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Sentinel插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sentinel-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-sentinel</artifactId>
   <version>${project.version}</version>
</dependency>

Resilience4j 插件

Resilience4j插件,是Apache ShenYu网关整合Resilience4j框架,提供请求熔断限流的功能,Resilience4j熔断限流参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Resilience4j插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/resilience4j-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-resilience4j</artifactId>
   <version>${project.version}</version>
</dependency>

RateLimiter 插件

RateLimiter插件,是Apache ShenYu网关使用redis,提供请求集群限流的功能,限流算法策略有:令牌桶算法,并发限流漏桶算法滑动窗口算法。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> RateLimiter插件将其设置为 开启,并且配置上redis。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/rate-limiter-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-ratelimiter</artifactId>
   <version>${project.version}</version>
</dependency>

安全/权限认证

Waf插件

Waf插件,是Apache ShenYu网关,用来对流量实现防火墙,主要用来拦截非法请求,或者异常请求,并且给与相关的拒绝策略,它提供了黑白名单配置的功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Waf插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/waf-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-waf</artifactId>
   <version>${project.version}</version>
</dependency>

Sign 插件

Sign插件,是Apache ShenYu网关,用来对请求进行签名认证。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Sign插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sign-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-sign</artifactId>
   <version>${project.version}</version>
</dependency>

JWT 插件

JWT插件,是Apache ShenYu网关,是针对 http 请求头的 token 属性或者是 authorization 属性携带值进行鉴权判断,兼容 OAuth2.0。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> jwt插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/jwt-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-jwt</artifactId>
   <version>${project.version}</version>
</dependency>

OAuth2 插件

OAuth2插件,是Apache ShenYu网关,使用 Webflux OAuth2客户端实现,用于支持 OAuth2 协议。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> oauth2插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/oauth2-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-oauth2</artifactId>
   <version>${project.version}</version>
</dependency>

个性化处理

Rewrite 插件

Rewrite插件,是Apache ShenYu网关,支持使用正则表达式来重写URI的插件。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> rewrite插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/rewrite-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-rewrite</artifactId>
   <version>${project.version}</version>
</dependency>

Redirect 插件

Redirect插件,是Apache ShenYu网关,将请求进行重定向的插件,支持网关内部接口与外部地址。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> redirect插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/redirect-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-redirect</artifactId>
   <version>${project.version}</version>
</dependency>

Request 插件

Request插件,是Apache ShenYu网关容许用户对请求参数请求头 以及 Cookie 进行添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> request插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/request-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-request</artifactId>
   <version>${project.version}</version>
</dependency>

Context-Path 插件

Context-Path插件,是Apache ShenYu网关,容许用户对请求路径上的 Context-Path,进行 添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> context_path插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/context-path-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-context-path</artifactId>
   <version>${project.version}</version>
</dependency>

Param-Mapping 插件

Param-Mapping插件,是Apache ShenYu网关,容许用户对请求体中的 Body,进行 添加修改删除字段等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> param_mapping插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/param-mapping-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-param-mapping</artifactId>
   <version>${project.version}</version>
</dependency>

ModifyResponse 插件

ModifyResponse插件,是Apache ShenYu网关,用来对请求响应体中的 响应头,状态码响应内容,进行 添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> modifyResponse插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/modify-response-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-modify-response</artifactId>
   <version>${project.version}</version>
</dependency>

可观测性

Monitor 插件

Monitor插件,是Apache ShenYu网关,使用 prometheus来完成对请求量QPS, JVM等相关metrics进行监控的插件。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> monitor插件将其设置为 开启, 并且配置 prometheus相关参数。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/monitor-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-monitor</artifactId>
   <version>${project.version}</version>
</dependency>

Logging 插件

Monitor插件,是Apache ShenYu网关,容许用户日志中打印本次请求信息,包含 请求路径请求方法请求参数响应头响应体等信息。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> logging插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/logging-plugin/

<dependency>
  <groupId>org.apache.shenyu</groupId>
  <artifactId>shenyu-spring-boot-starter-plugin-logging</artifactId>
   <version>${project.version}</version>
</dependency>

下一个版本规划

  • RPC框架灰度发布增强,包含 SpringCloudGRPCDubboSofa-RPCTars等。

  • 新增ShenYu-Agent模块,打造网关metrics, tracing, logging 等可观测性体系。

  • 自定义插件动态加载,方便用户快速,不停机扩展与更新。

  • 集成测试 + 单元测试 全面覆盖。

如何加入我们

Apache ShenYu 是完全由国人主导的社区性开源项目,处在高速发展时期,功能开发文档完善BUG修复 等大量的事情需要完成。
Apache ShenYu 社区遵循 Apache Way的社区理念,打造一个完全开放治理的社区。

邮件订阅

  • 发送订阅邮件。

用自己的邮箱向dev-subscribe@shenyu.apache.org发送一封邮件,主题和内容任意。

  • 接收确认邮件并回复。

完成步骤1后,您将收到一封来自dev-help@shenyu.apache.org的确认邮件(如未收到,请确认该邮件是否已被拦截,或已经被自动归入订阅邮件、垃圾邮件、推广邮件等文件夹)。直接回复该邮件,或点击邮件里的链接快捷回复即可,主题和内容任意。

  • 接收欢迎邮件。

完成以上步骤后,您会收到一封主题为WELCOME to dev@shenyu.apache.org的欢迎邮件,至此您已成功订阅Apache ShenYu的邮件列表。

GitHub

  • 网关 : https://github.com/apache/incubator-shenyu
  • 前端 : https://github.com/apache/incubator-shenyu-dashboard
  • 官网 : https://github.com/apache/incubator-shenyu-websit

Gitee

  • 网关 : https://gitee.com/Apache-ShenYu/incubator-shenyu
  • 前端 : https://gitee.com/Apache-ShenYu/incubator-shenyu-dashboard
  • 官网 : https://gitee.com/Apache-ShenYu/incubator-shenyu-websit

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2006-12-28 / USD 59.95

Web mining aims to discover useful information and knowledge from the Web hyperlink structure, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is n......一起来看看 《Web Data Mining》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具