這個項目起源于去年公司相要嘗試用微服務構建項目,在網關的技術選型中,我們原本確認了ApiSix 網關,如果需要寫網關插件需要基于Lua腳本去寫,我和另外一個同事當時基于這個寫了一個簡單的插件,但是開發測試以及發布都很麻煩,而且使用Lua腳本作為插件的開發語言本身也不是我們強項。
????? 后來通過其他渠道了解到了微軟出了一個反向代理組件 Yarp,而且也有人基于它去做過一些項目,于是我就決定自己基于它來構建一個簡單的Api網關,能夠滿足基礎需求就好.
????? 項目技術使用:
????? 開發平臺:.Net 6 + MySql
????? 開發框架:Abp Vnext 5.3.2
????? 反向代理組件: Yarp (官方文檔:https://microsoft.github.io/reverse-proxy/index.html)
????? 后臺管理:Blazor (Bootstrap Blazor UI:?https://www.blazor.zone)
? 其它組件: Dto映射(Mapster)、日志組件(Serilog)
???? 開源地址(GitHub):?https://github.com/yupingyong/kite.gateway
?????注: 這篇文章會很少展示代碼實現本身
??一. 項目結構圖(以及層依賴說明):
?????
Kite.Gateway.Admin : 后臺管理項目,實現對網關服務節點的管理以及網關配置數據的管理,支持像多個節點同步刷新配置數據
Kite.Gateway.Hosting : 網關啟動項目,定義了網關過濾器以及中間件
Kite.Gateway.Application : 應用服務層,組合業務邏輯層業務,提交數據庫保存
Kite.Gateway.Application.Contracts : 應用服務公共合約層,定義應用服務層接口,DTO對象
Kite.Gateway.Domain: 領域服務層,業務邏輯處理核心層
Kite.Gateway.Domain.Shared : 領域服務共享層,定義公共的枚舉,通用工具類等
Kite.Gateway.EntityFrameworkCore : 倉儲實現層,依賴于領域服務,基于EF Core實現
二.網關執行流程介紹(含圖):
?????? 網關中間件說明,上一個版本的設計是利用Abp自帶插件機制去實現,但是這一版我去掉了這種設計模式.為什么取消插件設計模式,就是感覺這樣網關會導致具體業務關聯太深,新版的我采用網關根據配置的中間件信息去向業務服務發起Http請求或者Grpc(暫未實現)的方式實現,這樣減少業務對網關系統的依賴,以及網關對具體業務的深層依賴。
???????三.后臺管理介紹(會出現比較多的效果圖):
?????? 1.賬號管理: 登錄后臺管理的賬號管理(如果全新安裝會可以使用 admin/admin 進行登錄)
?????? 2.節點管理: 網關部署節點,后臺管理可以向節點推送配置動態刷新,可及時生效
?
?????? 3.服務治理配置: Consul信息的配置,目前支持Consul做為服務治理中間件
?????? 4.身份認證配置: Jwt校驗配置,支持自定義密鑰以及SSL證書進行token校驗
?????? 5.白名單配置: 網關過濾白名單,當請求地址出現在白名單中,則不會進行token校驗
?????? 6.路由管理: Yarp反向代理組件信息配置,支持配置路由信息、集群信息、健康檢查信息、負載均衡策略信息
7.中間件管理: 配置中間件信息
?注:更多功能,可以在下載源碼后本地跑起來實際測試了.