分布式系統API網關原理及選型


什么是網關?

兩個獨立的局域網之間通信的橋梁/ 或可以理解為外部所有請求都會打在網關上,網關對請求分發路由等處理,隱藏了內部服務的各種API接口

 

 

網關作用及功能

1. 動態路由   根據請求路由到對應的服務上去,如果服務不可用還會有重試機制

2. 負載均衡   多服務器提供同一種服務,網關會從注冊中心拉取各服務注冊信息,然后將請求負載均衡處理

3. 流量控制   限制流量 避免內部系統受到沖擊

4. 統一鑒權  網關對相關權限驗證 (請求者的訪問權限,還可實現SSO單點登錄)

5. 熔斷降級 當服務不可用或者訪問量過大,網關可以將請求做降級  打到其他服務器或者做其他處理,提示用戶暫時不可用

6. 灰度發布 只給少量服務器升級,通過網關將少量的服務打到已升級的服務器用來測試升級的服務器,大量請求還是打在老版本服務器

7. 日志服務  服務訪問情況報表,請求吞吐量,並發數,日常告警

 

常用網關框架

Zuul  SringCloud對應的網關  

Kong   Nginx + Lua 在Nginx運行的Lua應用程序

 

 

網關涉及原理

協議轉換 : 每個系統使用的協議不同(http,grpc,dubbo協議)  通過網關進行協調統一

鏈式處理 : 網關處理請求類似責任鏈模式  經過各個過濾器處理請求

異步請求 : 網關中線程數量有限,每個線程帶着請求去訪問服務 然后等待服務訪問結果返回   這個過程是很浪費時間的,在高並發下無法完成  

異步請求 工作線程不必要等待服務返回結果就可以去處理下一個請求,網關的Reactor線程專門負責select輪詢 Socket訪問結果,一旦發現有結果返回 就通知工作線程來處理返回結果

 

網管實現動態路由:

動態路由(不必要每次服務地址變動都要重新配置網關重新啟動)

原理:

可以在網關數據庫建一張表,用來存儲不同服務對應的配置信息。然后配置一個前端入口,每次動態的在頁面修改配置信息完成數據庫修改。

后端網關路由讀取這張表完成配置

 

 

限流概念

高並發架構三要素: 緩存 + 降級 + 限流

 

限流的類型:  

1.並發量限流, 例如每秒限制100個請求,在一定時間范圍內限制和請求頻率

2.請求頻率限流, 例如來自某個ip/某個用戶的請求,限制每秒鍾請求不能超過5次

3.上傳下載速率, 例如限制某個用戶的下載速度最多 100KB/S, 在下載場景下比較常用,比如一些資源下載站會限制普通用戶的下載速度,只有購買會員才能提速,這種限流的做法實際上和請求頻率限流類似,只不過一個限制的是請求量的多少,一個限制的是請求數據報文的大小。

 

限流后的處理:被限流的請求會如何響應

1.拋棄,直接拋異常或直接跳轉一個友好頁面

2.排隊,利用消息隊列起到消峰和限流作用

3.降級,直接做降級處理,例如商品詳情頁只返回容易查到的最基礎商品數據(兜底數據),復雜數據不再查詢直接返回。 

 

限流方式:

1.接入層限流,如Nginx,網關處入口實現請求路由+限流,如果是及網關集群 還需要利用分布式中間件,將請求數量等信息共享

2.池化技術限流,如利用Hystrix的線程池,線程池+等待隊列這種形式實現限流

 

限流算法:

1.固定窗口算法,

2.滑動窗口算法,

3.漏桶算法,

4.令牌桶算法

 


免責聲明!

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



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