内容简介: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/https
, Dubbo
、 Spring Cloud
、 GRPC
、 Motan
、Sofa
、 Tars
等。
同时内置十分丰富的功能插件,如 熔断
,限流
,鉴权
,黑白名单
,防火墙
,监控
,参数更改
等等插件。其架构图如下:
流量控制
对流量的控制是网关的灵魂,针对流量控制,Apache ShenYu
设计了选择器
,规则
2个概念,来控制流量。
选择器
和 规则
是 Apache ShenYu
网关中最灵魂
的东西。掌握好它,你可以对任何流量进行管理。
一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的一级筛选,规则就是最终的筛选。
对一个插件而言,我们希望根据我们的配置,达到满足条件的流量,插件才会被执行。
选择器和规则就是为了让流量在满足特定的条件下,才去执行我们想要的,这种规则首先要明白。
插件、选择器和规则执行逻辑如下,当流量进入到Apache ShenYu网关之后,会先判断是否有对应的插件,该插件是否开启;然后判断流量是否匹配该插件的选择器。
然后再判断流量是否匹配该选择器的规则。如果请求流量能满足匹配条件才会执行该插件,否则插件不会被执行,处理下一个。
Apache ShenYu网关就是这样通过层层筛选完成流量控制。其流程图如下 :
流量筛选
流量筛选,是选择器
和规则
的灵魂
,对应为选择器与规则里面的匹配条件(conditions),根据不同的流量筛选规则,我们可以处理各种复杂的场景。
流量筛选可以从Header
, URI
, Query
, Cookie
等等Http请求获取数据,
然后可以采用 Match
,=
,SpEL
,Regex
,Groovy
等匹配方式,匹配出你所预想的数据。
多组匹配添加可以使用And/Or
的匹配策略。上述都是采用SPI的设计思想
,用户可以自主进行扩展
:更多的请查看 : https://shenyu.apache.org/zh/projects/shenyu/selector-and-rule/
其过程图如下 :
数据同步与缓存
为了提升网关的性能
,Apache ShenYu
网关会将所有的流量控制规则缓存在JVM
内存里面。在集群部署/分布式
场景中,Apache ShenYu
自主研发了一套 将 Admin 控制台的数据,远程同步到每一个 Apache ShenYu 网关节点 JVM内存 的方案
。
每一种方案,采用 SPI
设计思想,以供用户灵活
的选择。目前支持的方案有 HttpLongPull
, Websocket
, Zookeeper
, Nacos
, Consul
, ETCD
。 其整体流程如下 :
Admin控制台
为了方便用户快速便捷的控制流量以及网关的所有功能特性,Apache ShenYu
提供了 一个十分精美的Admin控制台
,用户可以中英文切换
,在这上面,可以随意的控制流量
,启停插件
,配置不同的参数与策略
,这些操作更改通过上述的数据同步原理
,同步到网关的 JVM内存
。其后台示意图如下:
##### 菜单/数据权限
网关的后台管理是十分重要的,为了针对企业级的用户,跨部门应用代理,Apache ShenYu
设计了一整套的权限控制体系
,它包含按钮级别的菜单权限
,以及行数据级别的数据权限
。并且这些权限控制在 Admin控制台
自主自动可配。
协议代理
协议代理是网关最核心的功能,目前 Apache ShenYu
支持 http
转成 http/https
, Websocket
,Dubbo
、 Spring Cloud
、 GRPC
、 Motan
、Sofa
、 Tars
等协议的转换,未来将支持 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框架灰度发布增强,包含
SpringCloud
,GRPC
,Dubbo
,Sofa-RPC
,Tars
等。 -
新增
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
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》 这本书的介绍吧!