這個專案起源於去年公司相要嘗試用微服務構建專案,在閘道器的技術選型中,我們原本確認了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.節點管理: 閘道器部署節點,後臺管理可以向節點推播設定動態重新整理,可及時生效
4.身份認證設定: Jwt校驗設定,支援自定義金鑰以及SSL證書進行token校驗
5.白名單設定: 閘道器過濾白名單,當請求地址出現在白名單中,則不會進行token校驗
6.路由管理: Yarp反向代理元件資訊設定,支援設定路由資訊、叢集資訊、健康檢查資訊、負載均衡策略資訊
7.中介軟體管理: 設定中介軟體資訊
注:更多功能,可以在下載原始碼後本地跑起來實際測試了.
下一個專案我將打算構建一個釋出平臺...從設計開始到開發完成使用,都在部落格園釋出文章