分布式系統API閘道器原理及選型

2022-06-24 16:51:09 字數 1726 閱讀 1271

什麼是閘道器?

兩個獨立的區域網之間通訊的橋梁/ 或可以理解為外部所有請求都會打在閘道器上,閘道器對請求分發路由等處理,隱藏了內部服務的各種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次

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

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

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

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

限流方式:

1.接入層限流,如nginx,閘道器處入口實現請求路由+限流,如果是及閘道器集群 還需要利用分布式中介軟體,將請求數量等資訊共享

2.池化技術限流,如利用hystrix的執行緒池,執行緒池+等待佇列這種形式實現限流

限流演算法:

1.固定視窗演算法,

2.滑動視窗演算法,

3.漏桶演算法,

4.令牌桶演算法

分布式API閘道器Gateway

現在越來越多的技術團隊開始嘗試採納微服務架構進行產品開發。而基於微服務架構後後端服務通常而言是動態的,為了簡化前端的呼叫邏輯,通常會引入api gateway作為輕量級閘道器,同時api gateway中也會實現相關的認證邏輯從而簡化內部服務之間相互呼叫的複雜度,這邊文章我們就來聊聊api gate...

分布式檔案系統比較 適用領域 原理 選型

我現在有海量的資料檔案 1000萬個檔案 需要儲存,需要讓其他計算機可以很容易地訪問,資料無價,我還希望這個檔案系統帶冗餘功能。我首先注意到的是ubuntu enterprise cloud的提供者 eucalyptus。它提供了和aws amazon web service 幾乎完全相容的雲計算介...

分布式任務排程系統選型

spring cloud 實戰 乾貨 mybatis 實戰 乾貨 spring boot 實戰 乾貨 react 入門實戰 乾貨 構建中小型網際網路企業架構 乾貨 python 學習持續更新 定位為輕量級無中心化解決方案,使用 jar 包的形式提供分布式任務的協調服務。支援分布式排程協調 彈性擴容縮...