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