聲明:本文中的
Apache ShenYu
都指的是Apache ShenYu (incubating)
本人做者:肖宇 Apache ShenYu(incubating) Founder && PPMC 2.4.0 Release Manager : 張永倫 Apache ShenYu(incubating) PPMC && Apache ShardingSphere PMC前端
全部的朋友們:react
Apache ShenYu
網關是原 Dromara/soul
網關捐獻給Apache
基金會後更名而來, 這次發佈的 2.4.0
版本是 Apache ShenYu
網關進入Apache孵化器
後的首個版本。這個版本涉及不少新功能的增長, 項目名稱,包名以及maven
依賴座標的變動。git
Apache ShenYu
是使用Java reactor
編程方式開發的,具備異步
,高性能
,跨語言
等特性的 API 網關
。 在流量控制方面,有精美的Admin控制檯,可以精準
,動態
控制流量,知足複雜的業務場景。 在功能方面,它使用插件化的設計思想,支持許多常見的協議:如 http/https
, Dubbo
、 Spring Cloud
、 GRPC
、 Motan
、 Sofa
、 Tars
等。 同時內置十分豐富的功能插件,如 熔斷
,限流
,鑑權
,黑白名單
,防火牆
,監控
,參數更改
等等插件。其架構圖以下:github
對流量的控制是網關的靈魂,針對流量控制,Apache ShenYu
設計了選擇器
,規則
2個概念,來控制流量。web
選擇器
和 規則
是 Apache ShenYu
網關中最靈魂
的東西。掌握好它,你能夠對任何流量進行管理。正則表達式
一個插件有多個選擇器,一個選擇器對應多種規則。選擇器至關因而對流量的一級篩選,規則就是最終的篩選。redis
對一個插件而言,咱們但願根據咱們的配置,達到知足條件的流量,插件纔會被執行。算法
選擇器和規則就是爲了讓流量在知足特定的條件下,纔去執行咱們想要的,這種規則首先要明白。spring
插件、選擇器和規則執行邏輯以下,當流量進入到Apache ShenYu網關以後,會先判斷是否有對應的插件,該插件是否開啓;而後判斷流量是否匹配該插件的選擇器。apache
而後再判斷流量是否匹配該選擇器的規則。若是請求流量能知足匹配條件纔會執行該插件,不然插件不會被執行,處理下一個。
Apache ShenYu網關就是這樣經過層層篩選完成流量控制。其流程圖以下 :
流量篩選,是選擇器
和規則
的靈魂
,對應爲選擇器與規則裏面的匹配條件(conditions),根據不一樣的流量篩選規則,咱們能夠處理各類複雜的場景。
流量篩選能夠從Header
, URI
, Query
, Cookie
等等Http請求獲取數據,
而後能夠採用 Match
,=
,SpEL
,Regex
,Groovy
等匹配方式,匹配出你所預想的數據。
多組匹配添加可使用And/Or
的匹配策略。上述都是採用SPI的設計思想
,用戶能夠自主進行擴展
:更多的請查看 : shenyu.apache.org/zh/projects…
其過程圖以下 :
爲了提高網關的性能
,Apache ShenYu
網關會將全部的流量控制規則緩存在JVM
內存裏面。在集羣部署/分佈式
場景中,Apache ShenYu
自主研發了一套 將 Admin 控制檯的數據,遠程同步到每個 Apache ShenYu 網關節點 JVM內存 的方案
。
每一種方案,採用 SPI
設計思想,以供用戶靈活
的選擇。目前支持的方案有 HttpLongPull
, Websocket
, Zookeeper
, Nacos
, Consul
, ETCD
。 其總體流程以下 :
爲了方便用戶快速便捷的控制流量以及網關的全部功能特性,Apache ShenYu
提供了 一個十分精美的Admin控制檯
,用戶能夠中英文切換
,在這上面,能夠隨意的控制流量
,啓停插件
,配置不一樣的參數與策略
,這些操做更改經過上述的數據同步原理
,同步到網關的 JVM內存
。其後臺示意圖以下:
網關的後臺管理是十分重要的,爲了針對企業級的用戶,跨部門應用代理,Apache ShenYu
設計了一整套的權限控制體系
,它包含按鈕級別的菜單權限
,以及行數據級別的數據權限
。而且這些權限控制在 Admin控制檯
自主自動可配。
協議代理是網關最核心的功能,目前 Apache ShenYu
支持 http
轉成 http/https
, Websocket
,Dubbo
、 Spring Cloud
、 GRPC
、 Motan
、 Sofa
、 Tars
等協議的轉換,將來將支持 TCP
, MQTT
,MQTT
等協議。
Divide
插件,是用來專門代理 http/https/websocket
等方式請求 Apache ShenYu
網關的插件。 它具備 負載均衡
,流量預熱
, 節點發現
,超時重試
,超時控制
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
-->Divide插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<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
插件,是Apache ShenYu
網關將 http/https
請求轉換成 dubbo
協議的插件 。 它採用了Dubbo泛化
調用的機制,整合了 Dubbo的客戶端
,具備服務發現
,負載均衡
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> dubbo插件
將其設置爲 開啓
,而且配置上註冊中心
, 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<!-- apache shenyu alibaba dubbo plugin start-->
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-alibaba-dubbo</artifactId>
<version>${project.version}</version>
</dependency>
<!-- apache shenyu apache dubbo plugin start-->
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-apache-dubbo</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
SpringCloud
插件,是Apache ShenYu
網關代理 SpringCloud
微服務業務的插件 。 它整合了 SpringCloud
的註冊中心,以及負載均衡服務,實現了服務的代理。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> SpringCloud插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-springcloud</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
GRPC
插件,是Apache ShenYu
網關將 http/https
請求轉換成 GRPC
協議的插件 。 它整合了 GRPC
客戶端,實現了 GRPC
服務的代理。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> GRPC插件
將其設置爲 開啓
。 更詳細的介紹請看 :shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-grpc</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Tars
插件,是Apache ShenYu
網關將 http/https
請求轉換成 Tars
協議的插件 。 Tars
是騰訊開源的 RPC框架, 該插件整合了 Tars-JAVA
客戶端,實現了 Tars
服務的代理。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Tars插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-tars</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Sofa
插件,是Apache ShenYu
網關將 http/https
請求轉換成 Sofa-RPC
協議的插件 。 它採用了Sofa泛化
調用的機制,整合了 Sofa-RPC的客戶端
,具備服務發現
,負載均衡
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> sofa插件
將其設置爲 開啓
,而且配置上註冊中心
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-sofa</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Hystrix
插件,是Apache ShenYu
網關整合Hystrix
框架,提供請求熔斷的功能,Hystrix
熔斷參數可動態化配置。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Hystrix插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-hystrix</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Sentinel
插件,是Apache ShenYu
網關整合Sentinel
框架,提供請求熔斷限流的功能,Sentinel
熔斷限流參數可動態化配置。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Sentinel插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-sentinel</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Resilience4j
插件,是Apache ShenYu
網關整合Resilience4j
框架,提供請求熔斷限流的功能,Resilience4j
熔斷限流參數可動態化配置。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Resilience4j插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-resilience4j</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
RateLimiter
插件,是Apache ShenYu
網關使用redis
,提供請求集羣限流的功能,限流算法策略有:令牌桶算法
,併發限流
,漏桶算法
,滑動窗口算法
。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> RateLimiter插件
將其設置爲 開啓
,而且配置上redis
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-ratelimiter</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Waf
插件,是Apache ShenYu
網關,用來對流量實現防火牆,主要用來攔截非法請求,或者異常請求,而且給與相關的拒絕策略,它提供了黑白名單配置的功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Waf插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-waf</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Sign
插件,是Apache ShenYu
網關,用來對請求進行簽名認證。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> Sign插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-sign</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
JWT
插件,是Apache ShenYu
網關,是針對 http
請求頭的 token
屬性或者是 authorization
屬性攜帶值進行鑑權判斷,兼容 OAuth2.0
。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> jwt插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-jwt</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
OAuth2
插件,是Apache ShenYu
網關,使用 Webflux OAuth2
客戶端實現,用於支持 OAuth2
協議。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> oauth2插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-oauth2</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Rewrite
插件,是Apache ShenYu
網關,支持使用正則表達式來重寫URI
的插件。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> rewrite插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-rewrite</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Redirect
插件,是Apache ShenYu
網關,將請求進行重定向的插件,支持網關內部接口與外部地址。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> redirect插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-redirect</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Request
插件,是Apache ShenYu
網關允許用戶對請求參數
、請求頭
以及 Cookie
進行添加
、修改
、刪除
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> request插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-request</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Context-Path
插件,是Apache ShenYu
網關,允許用戶對請求路徑上的 Context-Path
,進行 添加
、修改
、刪除
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> context_path插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-context-path</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Param-Mapping
插件,是Apache ShenYu
網關,允許用戶對請求體中的 Body
,進行 添加
、修改
、刪除
字段等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> param_mapping插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-param-mapping</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
ModifyResponse
插件,是Apache ShenYu
網關,用來對請求響應體中的 響應頭
,狀態碼
,響應內容
,進行 添加
、修改
、刪除
等功能。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> modifyResponse插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-modify-response</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Monitor
插件,是Apache ShenYu
網關,使用 prometheus
來完成對請求量
,QPS
, JVM
等相關metrics
進行監控的插件。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> monitor插件
將其設置爲 開啓
, 而且配置 prometheus
相關參數。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-monitor</artifactId>
<version>${project.version}</version>
</dependency>
複製代碼
Monitor
插件,是Apache ShenYu
網關,允許用戶日誌中打印本次請求信息
,包含 請求路徑
、請求方法
、請求參數
、響應頭
、響應體
等信息。用戶想要使用它,請在網關添加以下依賴, 而後在 Admin控制檯
--> 插件管理
--> logging插件
將其設置爲 開啓
。 更詳細的介紹請看 : shenyu.apache.org/zh/projects…
<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
的社區理念,打造一個徹底開放
,治理
的社區。每半個月,會進行一次全體社區會議,社區的committers,contributors, users都會參與其中,在會議上你們能夠暢所欲言,提出本身的觀點和見解,好比對不一樣的功能,不一樣的代碼進行討論,最好達成一致性的觀點。在Apache ShenYu 社區中,咱們推崇郵件列表 > Github Issue > 微信羣的溝通優先級的原則。 主要的目的是讓每個問題,沒一個觀點,都有記錄存檔,更好的幫助他人,以推動社區的可持續發展。
用本身的郵箱向dev-subscribe@shenyu.apache.org發送一封郵件,主題和內容任意。
完成步驟1後,您將收到一封來自dev-help@shenyu.apache.org的確認郵件(如未收到,請確認該郵件是否已被攔截,或已經被自動納入訂閱郵件、垃圾郵件、推廣郵件等文件夾)。直接回復該郵件,或點擊郵件裏的連接快捷回覆便可,主題和內容任意。
完成以上步驟後,您會收到一封主題爲WELCOME to dev@shenyu.apache.org的歡迎郵件,至此您已成功訂閱Apache ShenYu的郵件列表。