路由:路由網關介紹、開源產品、功能點清單

API介紹

API網關是一個服務器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統內部架構,為每個客戶端提供一個定製的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜態響應處理。

API網關方式的核心要點是,所有的客戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。通常,網關也是提供REST/HTTP的訪問API。

微服務架構風格中,一個大應用被拆分成為了多個小的服務系統提供出來,這些小的系統他們可以自成體系,也就是說這些小系統可以擁有自己的數據庫,框架甚至語言等,這些小系統通常以提供 Rest Api 風格的接口來被 H5, Android, IOS 以及第三方應用程序調用。

但是在UI上進行展示的時候,我們通常需要在一個界面上展示很多數據,這些數據可能來自於不同的微服務中。

為什麼需要使用API GateWay

現狀:

路由:路由網關介紹、開源產品、功能點清單

由圖可以看出,在沒有API網關作為統一出口的情況下,需要調用方自己組合各種服務,而且容易讓調用方感知後端各種服務的存在,各個需要各個做很多相同的工作。

加入API Gateway之後:

開源產品

Tyk:Tyk是一個開放源碼的API網關,它是快速、可擴展和現代的。Tyk提供了一個API管理平臺,其中包括API網關、API分析、開發人員門戶和API管理面板。Try 是一個基於Go實現的網關服務。

Kong:Kong是一個可擴展的開放源碼API Layer(也稱為API網關或API中間件)。Kong 在任何RESTful API的前面運行,通過插件擴展,它提供了超越核心平臺的額外功能和服務。

Orange:和Kong類似也是基於OpenResty的一個API網關程序,是由國人開發的.

Netflix zuul:Zuul是一種提供動態路由、監視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。

apiaxle: Nodejs 實現的一個 API 網關。

api-umbrella: Ruby 實現的一個 API 網關。

Gateway:SpringCloud-Gateway

Nginx...

功能

安全,限流,緩存,日誌,監控,重試,熔斷、監控、認證鑑權

壓力測試、審查、服務遷移、負載剪裁、靜態應答處理、可擴展性

鑑權,監控,路由,灰度、超時、聚合查詢

通常情況下, API 網關要做很多工作,那麼可以試想在高併發的情況下,這裡可能會出現一個性能瓶頸.

拿單節點網關來說,這種網關相當於是處於 Web 層和 Service 之間,用來聚合服務的?需要的是聚合服務,而以上這些開源項目都不太具備這個功能,聚合具體指的是開箱即用。我們要想使用這些服務需要來自己對API網關過一些擴展或者是開發一些插件,這個時候問題就來了。擴展Tyk我需要會Go語言,擴展Kong我需要會寫lua腳本,使用 zuul 還得會Java,這對於開發人員來說是不太現實的,那麼這個時候怎麼辦?

可以充分來結合兩者的優勢來實現一個“雙重網關”

路由:路由網關介紹、開源產品、功能點清單

參考:3w.cnblogs.com/savorboard/p/api-gateway.html

OpenResty Api Gateway

從左至右 HTTP 請求先由DNS在拿到第一手流量後負載均衡到基於 OpenResty 的 API Gataway 網關集群,在這個流程我們可以使用像 Kong,Orage,Tyk 這些開源的支持高併發高訪問量 API 網關程序在做第一層流量的防護,在這一級我們可以做一些像身份認證,安全,監控,日誌,流控等策略。除了這些我們還可以做一些服務的發現和註冊(這個要看不同網關的支持程度),接口的版本控制,路由重寫等。

Aggr Api Gateway

然後再由這些 API 網關把請求再負載到不同的 Aggr Api Gateway,在這裡我們做聚合服務這個操作,具體體現也就是圖中的黃色區域是需要由各個語言的開發人員來需要寫代碼實現的。具體流程也就是我們可以引入像 Ocelot 這種和語言相關的 API 網關開源項目,然後通過 NuGet 包引入之後通過 Json配置+聚合代碼的方式來整合後端的各個微服務提供聚合查詢等操作。這期間對於有需求的接口,我們可以應用超時,緩存,熔斷,重試等策略。

從 Aggr Api Gateway 到後端微服務集群這中間就屬於內部的通訊了,我們可以使用對內部友好的通訊協議比如 gRPC 或者 AMQP 等,然後進行 RPC調用提高通訊性能

注意:Aggr Api Gateway 這個網關對於一些接口來說的話並不是必須的,也可以由後端微服務直接提供REST API給第一層網關使用。

End

水了一篇,很簡單的技能點,不過交流也源於開始吧,有對OpenResty有感興趣的,可以留言,我拉你進群,以後工作會用到該技能點


分享到:


相關文章: