什麼是API網關
API網關是一個服務器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統內部架構,爲每個客戶端提供一個定製的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜態響應處理。
API網關方式的核心要點是,所有的客戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。通常,網關也是提供REST/HTTP的訪問API。服務端通過API-GW註冊和管理服務。
API網關解決的問題
- 客戶端請求多個微服務,增加客戶端複雜度
- 存在跨域,認證不統一問題
- 與微服務耦合太強,微服務變更,客戶端需要變更
如何構建API網關
API網關的作用
API網關所處的位置通常爲:
使用API網關的好處:
- 易於監控
- 統一認證
- 減少客戶端與微服務交互,解耦接口依賴
網關大致分類
單節點API網關
Backends for frontends網關
開源網關
Netflix Zuul是一種提供動態路由、監視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器(Spring Cloud使用)。
提供能力:
- 身份認證與安全
- 審查與監控
- 動態路由
- 壓力測試
- 負載分配
- 靜態響應處理
API網關存在的問題及解決方案
問題
- 拿單節點網關來說,這種網關相當於是處於 Web 層和 Service 之間,用來聚合服務的?注意,我們需要的是聚合服務,而以上這些開源項目都不具備這個功能,我說的聚合具體指的是開箱即用。
- 除了單點問題,還有一個問題,網關需要承擔日誌,監控,安全,服務發現,版本控制等,甚至超時,熔斷,重試,聚合查詢等職能,這很容易造成性能問題。
解決方案
單點問題:Keepalived + LVS(LVS原理介紹) 保證一個網關掛掉時,迅速進行失效轉移
性能問題:雙重網關(雙重網關,外部網關處理安全,認證,限流,監控,日誌等,內部網關處理緩存,重試,熔斷等)