對於最近surging更新的API 網關你們也有所關注,也收到了很多反饋提出是否能介紹下Api網關,那麼咱們將在此篇文章中談談surging Api 網關git
開源地址:https://github.com/dotnetcore/surginggithub
API 網關是服務提供者的訪問入口,主要起到隔離外部訪問與內部系統的做用。它主要解決服務消費者的身份認證、監控、負載均衡、緩存、限流等問題。算法
API網關的流行,源於近幾年的大型互聯網的興起,從之前的單體應用,到垂直應用架構,再到如今的微服務架構,而微服務的出現,讓API網關成爲微服務的標配組件緩存
對於API網關主要起到如下做用:安全
系統隔離:隔離外部訪問與內部系統服務器
業務解耦:解耦各層的相互依賴,快速應對業務變化,使得微服務可以獨立靈活部署,統一管理session
靈活配置:對於微服務水平和垂直擴展能順利進行而搭設的工做平臺,平臺能對於服務進行靈活配置。架構
內部服務與外網都是隔離的,爲了安全考慮,應用服務都是運行在內網,不容許外部訪問,這時候API網關經過身份驗證、數據安全、容錯降級等規則,對訪問進行了初步的過濾,從而達到靈活動態配置,保證了數據的安全性和系統的可靠性。負載均衡
微服務所面向的角色包括服務提供者,服務消費者,服務運維等,各個角色都有各自的述求,爲了知足各個角色的需求和依賴關係,就須要網關動態靈活配置,讓各方專一於本身的領域需求。主要從如下幾點進行解耦框架
在知足實現業務功能外,還面臨非業務的功能性需求,好比突發性大規模服務訪問,黑客攻擊,身份驗證,數據的流量監控等,這些非業務的功能需求,不能與業務服務耦合在一塊兒,須要解耦成獨立的系統,由專業人員和專業團隊進行處理
解耦服務消費者與服務提供者
對於服務提供者主要是對業務進行實現,而業務的快速變化,爲不了不破壞業務的穩定性,這時候就須要中間層定義統一的接口、協議和報文,以知足服務消費者多變的需求。
業務和非業務可配置化
網關除了請求路由、轉發外,還須要負責數據安全、鑑權、限流、監控等,每每隨着業務的變化不斷調整,好比訪問大規模增加,這時候就須要考慮發生錯誤能及時熔斷降級,或者分流,限流,而這時候就須要網關提供可配置化的界面,便於修改,而對於網關來講更應該提供插件化的機制來支持可配置化的功能性動態擴展。
網關對於系統進行了隔離,保證了服務的安全和可靠性,對於運維也減小維護成本和變動流程。服務提供者和消費者也能減小耦合,還可以獨立進行部署,同時經過熔斷也避免了服務大規模的癱瘓,節約服務的維護開發成本,減小上線風險。
Surging網關是基於.net core針對RPC進行治理的系統,支撐微服務落地接入。經過該系統能夠進行身份認證,服務流控,服務降級,數據監控等。整個系統模塊以下圖:
Surging 提供的功能包括數據監控、服務管理、數據安全、身份認證、流量控制、分流控制,主要實現了對路由請求分發、鑑權、限流、降級、數據安全等功能,這裏介紹下實現要點。
服務管理
服務管理包括服務路由、服務元數據、容錯規則和關聯服務管理,
在微服務框架中,服務註冊中心用於存儲服務提供者地址信息、服務元數據、關聯服務信息,服務消費者經過註冊中心獲取和更新容錯規則,而經過容錯規則服務消費端就能熔斷降級。而且對調用的服務提供地址進行監控,從而標識服務提供者的健康狀態,架構以下:
身份認證
在傳統的單體架構中,經過會話(session)或者令牌來校驗用戶。而在微服務架構中,用戶須要針對於分佈式部署的微服務集合進行交互,如採用與單體應用相同的效驗模式,那麼如何讓全部的服務集合來認證用戶是否合法。此時要解決這個問題能夠採用令牌與網關相結合的方案。
這個方案全部的請求都經過網關進行認證,使用令牌進行受權,同時也能夠對於令牌進行註銷。
流量控制
在突發訪問量增大的時候,因爲服務的負載能力有限,爲了防止突發狀況的請求對服務壓力過大而拖垮服務,也就是面對大流量的時候,如何進行流量控制?
針對於服務接口的訪問量增大而採用的控制策略包括分流、降級,限流等,本文討論下限流的策略
實際傳統的架構中,咱們一般使用第三方軟件進行流量保護,好比Nginx、安全狗等軟件。而採用第三方軟件會增長運維的維護成本,也沒有基於業務的可靈活性配置。因此須要經過統一的入口API網關進行管理,而後經過算法進行限流。
流量控制能從用戶、服務二個維度進行流量控制,當流量超過設置閾值時,API網關會直接返回錯誤信息給請求者,不會再繼續調用服務提供者,從而保護了服務不被攻擊。
分流控制
爲了防止突發狀況的請求對服務壓力過大而拖垮服務,,那麼能夠採用分流策略。經過負載均衡算法在健康可用的實例之間分發請求,這樣就能夠把請求均衡地分發到各個服務器上
數據安全
在業務系統中,一般會碰到一些敏感的數據,而爲了防止敏感數據發生泄露,一般咱們會對於敏感數據進行加密。就比如如前幾年的京東數據泄露事件,CSDN的帳號泄露事件,這些事件的發生使得用戶的身份證、密碼、電話等敏感信息以明文的形式進行外泄,致使了多名用戶金錢上的損失。對於公司形成了惡劣的印象。
爲了減小數據安全與系統的耦合,能夠採用API 網關進行配置,這樣開發人員也無需知道其加密方式。
數據監控
一個穩定可靠的系統離不開監控, 不只監控服務是否存活,還要監控系統的運行情況,能及時發現崩潰,鏈接超時,內存泄漏等問題。對於運行狀況會進行採集,分析,同時發現問題能及時告警通知處理人員進行處理。
Surging 網關是統一服務入口,可方便實現對服務接口進行管控,模塊組件設計以下圖:
由於API網關處於開發初期,因此只能簡單介紹下,後期會詳細介紹下surging架構設計。如感興趣請多關注或者加入QQ羣:542283494