cloud中gateway存在的意義是什么?
先讓我們看這樣一個場景吧,一個電商網站做了服務化,后端服務分別拆成了用戶服務、商品服務、支付服務、物流服務(為了舉例,做了簡化,實際場景會遠比這個復雜);前端有網頁版和 APP,前端的所有操作都需要調用后端的各個服務。
在這個過程中,可能會有這樣的問題:
問題1.前端應用需要知道后端每個服務的地址,或者必須接入服務中心;但是服務的地址和端口可能會動態變化。
問題2.每個服務的技術棧必須相同,遵守相同的接口規范,接口協議必須相同,否則對于前度極度不友好。
問題3網頁版和 APP 展示相同的內容時,可能粒度不同,要么服務端提供粗粒度和細粒度兩種 API,要么只提供一組最細粒度的 API,前者增加了后端的開發量,后者可能會導致一次前端需要多次調用細粒度的 API,才能得到想要的數據。
問題4不同的客戶端設備展示的數據不同,比如網頁版能展示的數據更詳細一些,APP 展示的數據少,那么也會有“提供一個大而全的接口”還是“為不同的調用方提供不同接口”的問題。
問題5日志、認證和鑒權、計費、監控等等功能,需要各個后端來完善,或者接入到對應的公共組件中(接入也是需要開發的),這就多多少少增加了后端服務的工作。
API Gateway 就是為了解決以上種種問題的;API Gateway 是系統的唯一入口,它屏蔽掉了系統的內部架構,為調用方定制了統一的 API。
單節點網關多網關集群我們可以看到 API Gateway 的作用:把后端各個服務的 API 聚合起來,提供統一且唯一規范的入口,這樣使得內部的架構對于調用方透明,客戶端和服務端的耦合度降低;各個后端服務之間,可以采用不同的實現方案,而 API Gateway 會屏蔽掉這些差異;
后端的每個服務也都是在不斷迭代和升級的,API Gateway 可以將請求路由到不同的接口版本上,可以實現灰度發布;
API Gateway 可以進行服務編排,實現數據聚合,也就是調用方一次請求,API Gateway 調用多個服務拿到數據后返回;
API Gateway 知道所有服務實例的地址,可以對不同的服務采用不同的路由策略;
日志、認證和鑒權、計費、監控等等功能都可以在 API Gateway 上實現;
API Gateway 還可以對流量進行控制,通過熔斷、降級、限流等方式,保護后端服務。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注;關注我后,可私信發送數字【1】,獲取海量學習資料。