基於.NET CORE微服務框架 -談談surging API網關


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM