国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

五種API網(wǎng)關技術(shù)選型,yyds
2022-08-23   碼猿技術(shù)專欄

本文準備圍繞七個點來講網(wǎng)關,分別是網(wǎng)關的基本概念、網(wǎng)關設計思路、網(wǎng)關設計重點、流量網(wǎng)關、業(yè)務網(wǎng)關、常見網(wǎng)關對比,對基礎概念熟悉的朋友可以根據(jù)目錄查看自己感興趣的部分。

圖片

什么是網(wǎng)關

網(wǎng)關,很多地方將網(wǎng)關比如成門, 沒什么問題, 但是需要區(qū)分網(wǎng)關與網(wǎng)橋的區(qū)別,

網(wǎng)橋工作在數(shù)據(jù)鏈路層,在不同或相同類型的LAN之間存儲并轉(zhuǎn)發(fā)數(shù)據(jù)幀,必要時進行鏈路層上的協(xié)議轉(zhuǎn)換。可連接兩個或多個網(wǎng)絡,在其中傳送信息包。

網(wǎng)關是一個大概念,不具體特指一類產(chǎn)品,只要連接兩個不同的網(wǎng)絡都可以叫網(wǎng)關,網(wǎng)橋一般只轉(zhuǎn)發(fā)信息,而網(wǎng)關可能進行包裝。

網(wǎng)關通俗理解

根據(jù)網(wǎng)關的特性,舉個例子:

假如你要去找集團老板(這兒只是舉個例子), 大家都知道老板肯定不是誰想見就能見的, 也怕壞人嘛, 那么你去老板所在的辦公樓,假如是集團總部, 大樓這個門就充當了網(wǎng)關的角色, 大門一般都有看門員 ,看門員會做哪些事情呢?

首先所有想見老板的人肯定都得從這個門進(統(tǒng)一入口), 這個門相當于將辦公室和外界隔離了,主要為了保護里面的安全以及正常工作, 來到這個門之后, 門衛(wèi)肯定會讓你出示相關證件(鑒權(quán)檢驗), 意思就是判斷你要見老板這個請求是否合理, 如果不合理直接就拒絕了, 讓你回家等消息 , 如果鑒權(quán)之后, 發(fā)現(xiàn)你找老板其實只是為了和他談談兩元店的生意, 門衛(wèi)會跟你說這個用不著找老板, 你去集團投資部就行了(動態(tài)路由, 將請求路由到不同的后端集群中), 此時會對你進行一些包裝,例如給你出具一個訪問證類似的,然后告訴你路該怎么走,等等。

你看看,網(wǎng)關的作用是不是就是這三個, 最終目的就是減少你與集團的耦合,具體到計算機上就是減少客戶端與服務端的耦合,如果沒有網(wǎng)關意味著所有請求都會直接調(diào)用服務器上的資源,這樣耦合太強了,服務器出了問題,客戶端會直接報錯, 例如老板換工作的地方了,如果沒有網(wǎng)關你直接去原來的地方找, 肯定會被告知老板不在這兒。

為什么需要網(wǎng)關

當使用單體應用程序架構(gòu)時,客戶端(Web 或移動端)通過向后端應用程序發(fā)起一次 REST 調(diào)用來獲取數(shù)據(jù)。負載均衡器將請求路由給 N 個相同的應用程序?qū)嵗械囊粋€。然后應用程序會查詢各種數(shù)據(jù)庫表,并將響應返回給客戶端。微服務架構(gòu)下,單體應用被切割成多個微服務,如果將所有的微服務直接對外暴露,勢必會出現(xiàn)安全方面的各種問題,另外內(nèi)外耦合嚴重。關注公眾號:“碼猿技術(shù)專欄”,回復關鍵詞:“1111” 獲取阿里內(nèi)部調(diào)優(yōu)手冊

  • 客戶端可以直接向每個微服務發(fā)送請求,其問題主要如下:
  • 客戶端需求和每個微服務暴露的細粒度 API 不匹配。
  • 部分服務使用的協(xié)議不是Web友好協(xié)議。可能使用 Thrift 二進制 RPC,也可能使用 AMQP 消息傳遞協(xié)議。

微服務難以重構(gòu)。如果合并兩個服務,或者將一個服務拆分成兩個或更多服務,這類重構(gòu)就非常困難了。

服務端的各個服務直接暴露給客戶端調(diào)用勢必會引起各種問題。同時,服務端的各個服務可擴展和伸縮性很差。API 網(wǎng)關是微服務架構(gòu)中的基礎組件,位于接入層之下和業(yè)務服務層之上,如前所述的這些功能適合在 API 網(wǎng)關實現(xiàn)。

網(wǎng)關與服務器集群

回到我們服務器上,下面圖介紹了網(wǎng)關(Gateway)作用,可知 Gateway 方式下的架構(gòu),可以細到為每一個服務的實例配置一個自己的 Gateway,也可以粗到為一組服務配置一個,甚至可以粗到為整個架構(gòu)配置一個接入的 Gateway。于是,整個系統(tǒng)架構(gòu)的復雜度就會變得簡單可控起來。

圖片

這張圖展示了一個多層 Gateway 架構(gòu),其中有一個總的 Gateway 接入所有的流量(流量網(wǎng)關),并分發(fā)給不同的子系統(tǒng),還有第二級 Gateway 用于做各個子系統(tǒng)的接入 Gateway(業(yè)務網(wǎng)關)。可以看到,網(wǎng)關所管理的服務粒度可粗可細。通過網(wǎng)關,我們可以把分布式架構(gòu)組織成一個星型架構(gòu),由網(wǎng)絡對服務的請求進行路由和分發(fā)。下面來聊聊好的網(wǎng)關應該具備哪些功能,也就是網(wǎng)關設計模式。

網(wǎng)關設計思路

一個網(wǎng)關需要有以下的功能:

1. 請求路由

網(wǎng)關一定要有請求路由的功能。這樣一來,對于調(diào)用端來說,也是一件非常方便的事情。因為調(diào)用端不需要知道自己需要用到的其它服務的地址,全部統(tǒng)一地交給 Gateway 來處理。

2. 服務注冊

為了能夠代理后面的服務,并把請求路由到正確的位置上,網(wǎng)關應該有服務注冊功能,也就是后端的服務實例可以把其提供服務的地址注冊、取消注冊。一般來說,注冊也就是注冊一些 API 接口。比如,HTTP 的 Restful 請求,可以注冊相應 API 的 URI、方法、HTTP 頭。這樣,Gateway 就可以根據(jù)接收到的請求中的信息來決定路由到哪一個后端的服務上。

3. 負載均衡

因為一個網(wǎng)關可以接收多個服務實例,所以網(wǎng)關還需要在各個對等的服務實例上做負載均衡策略。簡單點就是直接 Round-Robin 輪詢,復雜點的可以設置上權(quán)重進行分發(fā),再復雜一點還可以做到 session 粘連。

4. 彈力設計

網(wǎng)關還可以把彈力設計中的那些異步、重試、冪等、流控、熔斷、監(jiān)視等都可以實現(xiàn)進去。這樣,同樣可以像 Service Mesh 那樣,讓應用服務只關心自己的業(yè)務邏輯(或是說數(shù)據(jù)面上的事)而不是控制邏輯(控制面)。

5. 安全方面

SSL 加密及證書管理、Session 驗證、授權(quán)、數(shù)據(jù)校驗,以及對請求源進行惡意攻擊的防范。錯誤處理越靠前的位置就是越好,所以,網(wǎng)關可以做到一個全站的接入組件來對后端的服務進行保護。當然,網(wǎng)關還可以做更多更有趣的事情,比如:灰度發(fā)布、API聚合、API編排。

灰度發(fā)布

網(wǎng)關完全可以做到對相同服務不同版本的實例進行導流,還可以收集相關的數(shù)據(jù)。這樣對于軟件質(zhì)量的提升,甚至產(chǎn)品試錯都有非常積極的意義。

API 聚合

使用網(wǎng)關可以將多個單獨請求聚合成一個請求。在微服務體系的架構(gòu)中,因為服務變小了,所以一個明顯的問題是,客戶端可能需要多次請求才能得到所有的數(shù)據(jù)。這樣一來,客戶端與后端之間的頻繁通信會對應用程序的性能和規(guī)模產(chǎn)生非常不利的影響。于是,我們可以讓網(wǎng)關來幫客戶端請求多個后端的服務(有些場景下完全可以并發(fā)請求),然后把后端服務的響應結(jié)果拼裝起來,回傳給客戶端(當然,這個過程也可以做成異步的,但這需要客戶端的配合)。

API 編排

同樣在微服務的架構(gòu)下,要走完一個完整的業(yè)務流程,我們需要調(diào)用一系列 API,就像一種工作流一樣,這個事完全可以通過網(wǎng)頁來編排這個業(yè)務流程。我們可能通過一個 DSL 來定義和編排不同的 API,也可以通過像 AWS Lambda 服務那樣的方式來串聯(lián)不同的 API。

網(wǎng)關設計重點

網(wǎng)關設計重點主要是三個, 高性能、高可用、高擴展:

1. 高性能

在技術(shù)設計上,網(wǎng)關不應該也不能成為性能的瓶頸。對于高性能,最好使用高性能的編程語言來實現(xiàn),如 C、C++、Go 和 Java。網(wǎng)關對后端的請求,以及對前端的請求的服務一定要使用異步非阻塞的 I/O 來確保后端延遲不會導致應用程序中出現(xiàn)性能問題。C 和 C++ 可以參看 Linux 下的 epoll 和 Windows 的 I/O Completion Port 的異步 IO 模型,Java 下如 Netty、Spring Reactor 的 NIO 框架。

2. 高可用

因為所有的流量或調(diào)用經(jīng)過網(wǎng)關,所以網(wǎng)關必須成為一個高可用的技術(shù)組件,它的穩(wěn)定直接關系到了所有服務的穩(wěn)定。網(wǎng)關如果沒有設計,就會成變一個單點故障。因此,一個好的網(wǎng)關至少要做到以下幾點。

  • 集群化。網(wǎng)關要成為一個集群,其最好可以自己組成一個集群,并可以自己同步集群數(shù)據(jù),而不需要依賴于一個第三方系統(tǒng)來同步數(shù)據(jù)。
  • 服務化。網(wǎng)關還需要做到在不間斷的情況下修改配置,一種是像 Nginx reload 配置那樣,可以做到不停服務,另一種是最好做到服務化。也就是說,得要有自己的 Admin API 來在運行時修改自己的配置。
  • 持續(xù)化。比如重啟,就是像 Nginx 那樣優(yōu)雅地重啟。有一個主管請求分發(fā)的主進程。當我們需要重啟時,新的請求被分配到新的進程中,而老的進程處理完正在處理的請求后就退出。

3. 高擴展

因為網(wǎng)關需要承接所有的業(yè)務流量和請求,所以一定會有或多或少的業(yè)務邏輯。而我們都知道,業(yè)務邏輯是多變和不確定的。比如,需要在網(wǎng)關上加入一些和業(yè)務相關的東西。因此,一個好的 Gateway 還需要是可以擴展的,并能進行二次開發(fā)的。當然,像 Nginx 那樣通過 Module 進行二次開發(fā)的固然可以。

另外,在運維方面,網(wǎng)關應該有以下幾個設計原則。

  • 業(yè)務松耦合,協(xié)議緊耦合。在業(yè)務設計上,網(wǎng)關不應與后面的服務之間形成服務耦合,也不應該有業(yè)務邏輯。網(wǎng)關應該是在網(wǎng)絡應用層上的組件,不應該處理通訊協(xié)議體,只應該解析和處理通訊協(xié)議頭。另外,除了服務發(fā)現(xiàn)外,網(wǎng)關不應該有第三方服務的依賴。
  • 應用監(jiān)視,提供分析數(shù)據(jù)。網(wǎng)關上需要考慮應用性能的監(jiān)控,除了有相應后端服務的高可用的統(tǒng)計之外,還需要使用 Tracing ID 實施分布式鏈路跟蹤,并統(tǒng)計好一定時間內(nèi)每個 API 的吞吐量、響應時間和返回碼,以便啟動彈力設計中的相應策略。
  • 用彈力設計保護后端服務。網(wǎng)關上一定要實現(xiàn)熔斷、限流、重試和超時等彈力設計。如果一個或多個服務調(diào)用花費的時間過長,那么可接受超時并返回一部分數(shù)據(jù),或是返回一個網(wǎng)關里的緩存的上一次成功請求的數(shù)據(jù)。你可以考慮一下這樣的設計。
  • DevOps。因為網(wǎng)關這個組件太關鍵了,所以需要 DevOps 這樣的東西,將其發(fā)生故障的概率降到最低。這個軟件需要經(jīng)過精良的測試,包括功能和性能的測試,還有浸泡測試。還需要有一系列自動化運維的管控工具。

網(wǎng)關設計注意事項

  • 不要在網(wǎng)關中的代碼里內(nèi)置聚合后端服務的功能,而應考慮將聚合服務放在網(wǎng)關核心代碼之外。可以使用 Plugin 的方式,也可以放在網(wǎng)關后面形成一個 Serverless 服務。關注公眾號:“碼猿技術(shù)專欄”,回復關鍵詞:“1111” 獲取阿里內(nèi)部調(diào)優(yōu)手冊
  • 網(wǎng)關應該靠近后端服務,并和后端服務使用同一個內(nèi)網(wǎng),這樣可以保證網(wǎng)關和后端服務調(diào)用的低延遲,并可以減少很多網(wǎng)絡上的問題。這里多說一句,網(wǎng)關處理的靜態(tài)內(nèi)容應該靠近用戶(應該放到 CDN 上),而網(wǎng)關和此時的動態(tài)服務應該靠近后端服務。
  • 網(wǎng)關也需要做容量擴展,所以需要成為一個集群來分擔前端帶來的流量。這一點,要么通過 DNS 輪詢的方式實現(xiàn),要么通過 CDN 來做流量調(diào)度,或者通過更為底層的性能更高的負載均衡設備。
  • 對于服務發(fā)現(xiàn),可以做一個時間不長的緩存,這樣不需要每次請求都去查一下相關的服務所在的地方。當然,如果你的系統(tǒng)不復雜,可以考慮把服務發(fā)現(xiàn)的功能直接集成進網(wǎng)關中。
  • 為網(wǎng)關考慮 bulkhead 設計方式。用不同的網(wǎng)關服務不同的后端服務,或是用不同的網(wǎng)關服務前端不同的客戶。

另外,因為網(wǎng)關是為用戶請求和后端服務的橋接裝置,所以需要考慮一些安全方面的事宜。具體如下:

  • 加密數(shù)據(jù)。可以把 SSL 相關的證書放到網(wǎng)關上,由網(wǎng)關做統(tǒng)一的 SSL 傳輸管理。
  • 校驗用戶的請求。一些基本的用戶驗證可以放在網(wǎng)關上來做,比如用戶是否已登錄,用戶請求中的 token 是否合法等。但是,我們需要權(quán)衡一下,網(wǎng)關是否需要校驗用戶的輸入。因為這樣一來,網(wǎng)關就需要從只關心協(xié)議頭,到需要關心協(xié)議體。而協(xié)議體中的東西一方面不像協(xié)議頭是標準的,另一方面解析協(xié)議體還要耗費大量的運行時間,從而降低網(wǎng)關的性能。對此,我想說的是,看具體需求,一方面如果協(xié)議體是標準的,那么可以干;另一方面,對于解析協(xié)議所帶來的性能問題,需要做相應的隔離。
  • 檢測異常訪問。網(wǎng)關需要檢測一些異常訪問,比如,在一段比較短的時間內(nèi)請求次數(shù)超過一定數(shù)值;還比如,同一客戶端的 4xx 請求出錯率太高……對于這樣的一些請求訪問,網(wǎng)關一方面要把這樣的請求屏蔽掉,另一方面需要發(fā)出警告,有可能會是一些比較重大的安全問題,如被黑客攻擊。

流量網(wǎng)關

流量網(wǎng)關,顧名思義就是控制流量進入集群的網(wǎng)關,有很多工作需要在這一步做,對于一個服務集群,勢必有很多非法的請求或者無效的請求,這時候要將請求拒之門外,降低集群的流量壓力。

圖片

定義全局性的、跟具體的后端業(yè)務應用和服務完全無關的策略網(wǎng)關就是上圖所示的架構(gòu)模型——流量網(wǎng)關。流量網(wǎng)關通常只專注于全局的Api管理策略,比如全局流量監(jiān)控、日志記錄、全局限流、黑白名單控制、接入請求到業(yè)務系統(tǒng)的負載均衡等,有點類似防火墻。Kong 就是典型的流量網(wǎng)關。

下面是kong的架構(gòu)圖,來自官網(wǎng):https://konghq.com

圖片

這里需要補充一點的是,業(yè)務網(wǎng)關一般部署在流量網(wǎng)關之后、業(yè)務系統(tǒng)之前,比流量網(wǎng)關更靠近業(yè)務系統(tǒng)。通常API網(wǎng)指的是業(yè)務網(wǎng)關。有時候我們也會模糊流量網(wǎng)關和業(yè)務網(wǎng)關,讓一個網(wǎng)關承擔所有的工作,所以這兩者之間并沒有嚴格的界線。

業(yè)務網(wǎng)關

當一個單體應用被拆分成許許多多的微服務應用后,也帶來了一些問題。一些與業(yè)務非強相關的功能,比如權(quán)限控制、日志輸出、數(shù)據(jù)加密、熔斷限流等,每個微服務應用都需要,因此存在著大量重復的代碼實現(xiàn)。而且由于系統(tǒng)的迭代、人員的更替,各個微服務中這些功能的實現(xiàn)細節(jié)出現(xiàn)了較大的差異,導致維護成本變高。另一方面,原先單體應用下非常容易做的接口管理,在服務拆分后沒有了一個集中管理的地方,無法統(tǒng)計已存在哪些接口、接口定義是什么、運行狀態(tài)如何。

網(wǎng)關就是為了解決上述問題。作為微服務體系中的核心基礎設施,一般需要具備接口管理、協(xié)議適配、熔斷限流、安全防護等功能,各種開源的網(wǎng)關產(chǎn)品(比如 zuul)都提供了優(yōu)秀高可擴展性的架構(gòu)、可以很方便的實現(xiàn)我們需要的一些功能、比如鑒權(quán)、日志監(jiān)控、熔斷限流等。

與流量網(wǎng)關相對應的就是業(yè)務網(wǎng)關,業(yè)務網(wǎng)關更靠近我們的業(yè)務,也就是與服務器應用層打交道,那么有很多應用層需要考慮的事情就可以依托業(yè)務網(wǎng)關,例如在線程模型、協(xié)議適配、熔斷限流,服務編排等。下面看看業(yè)務網(wǎng)關體系結(jié)構(gòu):

圖片

從這個途中可以看出業(yè)務網(wǎng)關主要職責以及所做的事情, 目前業(yè)務網(wǎng)關比較成熟的 API 網(wǎng)關框架產(chǎn)品有三個 分別是:Zuul1、Zuul2 和 SpringCloud Gateway, 后面再進行對比。

常見網(wǎng)關對比

既然對比,就先宏觀上對各種網(wǎng)關有一個了解,后面再挑一些常用的或者說應用廣泛的詳細了解。

目前常見的開源網(wǎng)關大致上按照語言分類有如下幾類:

  • Nginx+lua:OpenResty、Kong、Orange、Abtesting gateway 等
  • Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
  • Go:Janus、fagongzi、Grpc-gateway
  • Dotnet:Ocelot
  • NodeJS:Express Gateway、Micro Gateway

按照使用數(shù)量、成熟度等來劃分,主流的有 5個:

  • OpenResty
  • Kong
  • Zuul、Zuul2
  • Spring Cloud Gateway

1. OpenResty

OpenResty是一個流量網(wǎng)關,根據(jù)前面對流量網(wǎng)關的介紹就可以知道流量網(wǎng)關的指責。

OpenResty基于 Nginx與 Lua 的高性能 Web 平臺,其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項。用于方便地搭建能夠處理超高并發(fā)、擴展性極高的動態(tài) Web 應用、Web 服務和動態(tài)網(wǎng)關。關注公眾號:“碼猿技術(shù)專欄”,回復關鍵詞:“1111” 獲取阿里內(nèi)部調(diào)優(yōu)手冊

通過揉和眾多設計良好的 Nginx 模塊,OpenResty 有效地把 Nginx 服務器轉(zhuǎn)變?yōu)橐粋€強大的 Web 應用服務器,基于它開發(fā)人員可以使用 Lua 編程語言對 Nginx 核心以及現(xiàn)有的各種 Nginx C 模塊進行腳本編程,構(gòu)建出可以處理一萬以上并發(fā)請求的極端高性能的 Web 應用

OpenResty 最早是順應 OpenAPI 的潮流做的,所以 Open 取自“開放”之意,而Resty便是 REST 風格的意思。雖然后來也可以基于 ngx_openresty 實現(xiàn)任何形式的 web service 或者傳統(tǒng)的 web 應用。

也就是說 Nginx 不再是一個簡單的靜態(tài)網(wǎng)頁服務器,也不再是一個簡單的反向代理了。第二代的 openresty 致力于通過一系列 nginx 模塊,把nginx擴展為全功能的 web 應用服務器。

ngx_openresty 是用戶驅(qū)動的項目,后來也有不少國內(nèi)用戶的參與,從 openresty.org 的點擊量分布上看,國內(nèi)和國外的點擊量基本持平。

ngx_openresty 目前有兩大應用目標:

  • 通用目的的 web 應用服務器。在這個目標下,現(xiàn)有的 web 應用技術(shù)都可以算是和 OpenResty 或多或少有些類似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括內(nèi)存使用和 CPU 效率)算是最大的賣點之一。
  • Nginx 的腳本擴展編程,用于構(gòu)建靈活的 Web 應用網(wǎng)關和 Web 應用防火墻。有些類似的是 NetScaler。其優(yōu)勢在于 Lua 編程帶來的巨大靈活性。

2. Kong

Kong基于OpenResty開發(fā),也是流量層網(wǎng)關, 是一個云原生、快速、可擴展、分布式的Api 網(wǎng)關。繼承了OpenResty的高性能、易擴展性等特點。Kong通過簡單的增加機器節(jié)點,可以很容易的水平擴展。同時功能插件化,可通過插件來擴展其能力。而且在任何基礎架構(gòu)上都可以運行。具有以下特性:

  • 提供了多樣化的認證層來保護Api。
  • 可對出入流量進行管制。
  • 提供了可視化的流量檢查、監(jiān)視分析Api。
  • 能夠及時的轉(zhuǎn)換請求和相應。
  • 提供log解決方案
  • 可通過api調(diào)用Serverless 函數(shù)。
  • Kong解決了什么問題

當我們決定對應用進行微服務改造時,應用客戶端如何與微服務交互的問題也隨之而來,畢竟服務數(shù)量的增加會直接導致部署授權(quán)、負載均衡、通信管理、分析和改變的難度增加。

面對以上問題,API GATEWAY是一個不錯的解決方案,其所提供的訪問限制、安全、流量控制、分析監(jiān)控、日志、請求轉(zhuǎn)發(fā)、合成和協(xié)議轉(zhuǎn)換功能,可以解放開發(fā)者去把精力集中在具體邏輯的代碼,而不是把時間花費在考慮如何解決應用和其他微服務鏈接的問題上。

圖片來自Kong官網(wǎng):

圖片

可以看到Kong解決的問題。專注于全局的Api管理策略,全局流量監(jiān)控、日志記錄、全局限流、黑白名單控制、接入請求到業(yè)務系統(tǒng)的負載均衡等。

Kong的優(yōu)點以及性能

在眾多 API GATEWAY 框架中,Mashape 開源的高性能高可用API網(wǎng)關和API服務管理層——KONG(基于 NGINX+Lua)特點尤為突出,它可以通過插件擴展已有功能,這些插件(使用 lua 編寫)在API請求響應循環(huán)的生命周期中被執(zhí)行。于此同時,KONG本身提供包括 HTTP 基本認證、密鑰認證、CORS、TCP、UDP、文件日志、API請求限流、請求轉(zhuǎn)發(fā)及 NGINX 監(jiān)控等基本功能。目前,Kong 在 Mashape 管理了超過 15,000 個 API,為 200,000 開發(fā)者提供了每月數(shù)十億的請求支持。

Kong架構(gòu)

Kong提供一些列的服務,這就不得不談談內(nèi)部的架構(gòu):

圖片

首先最底層是基于Nginx, Nginx是高性能的基礎層, 一個良好的負載均衡、反向代理器,然后在此基礎上增加Lua腳本庫,形成了OpenResty,攔截請求, 響應生命周期,可以通過Lua編寫腳本,所以插件比較豐富。

 

關于Kong的一些插件庫以及如何配置,可以參考簡書:開源API網(wǎng)關系統(tǒng)(Kong教程)入門到精通:https://www.jianshu.com/p/a68e45bcadb6

 

3. Zuul1.0

Zuul是所有從設備和web站點到Netflix流媒體應用程序后端請求的前門。作為一個邊緣服務應用程序,Zuul被構(gòu)建來支持動態(tài)路由、監(jiān)視、彈性和安全性。它還可以根據(jù)需要將請求路由到多個Amazon自動伸縮組。

Zuul使用了一系列不同類型的過濾器,使我們能夠快速靈活地將功能應用到服務中。

過濾器

過濾器是Zuul的核心功能。它們負責應用程序的業(yè)務邏輯,可以執(zhí)行各種任務。

  • Type:通常定義過濾器應用在哪個階段
  • Async:定義過濾器是同步還是異步
  • Execution Order:執(zhí)行順序
  • Criteria:過濾器執(zhí)行的條件
  • Action:如果條件滿足,過濾器執(zhí)行的動作

Zuul提供了一個動態(tài)讀取、編譯和運行這些過濾器的框架。過濾器之間不直接通信,而是通過每個請求特有的RequestContext共享狀態(tài)。

下面是Zuul的一些過濾器:

Incoming

Incoming過濾器在請求被代理到Origin之前執(zhí)行。這通常是執(zhí)行大部分業(yè)務邏輯的地方。例如:認證、動態(tài)路由、速率限制、DDoS保護、指標。

Endpoint

Endpoint過濾器負責基于incoming過濾器的執(zhí)行來處理請求。Zuul有一個內(nèi)置的過濾器(ProxyEndpoint),用于將請求代理到后端服務器,因此這些過濾器的典型用途是用于靜態(tài)端點。例如:健康檢查響應,靜態(tài)錯誤響應,404響應。

Outgoing

Outgoing過濾器在從后端接收到響應以后執(zhí)行處理操作。通常情況下,它們更多地用于形成響應和添加指標,而不是用于任何繁重的工作。例如:存儲統(tǒng)計信息、添加/剝離標準標題、向?qū)崟r流發(fā)送事件、gziping響應。

過濾器類型

下面是與一個請求典型的生命周期對應的標準的過濾器類型:

  • PRE:路由到Origin之前執(zhí)行
  • ROUTING:路由到Origin期間執(zhí)行
  • POST:請求被路由到Origin之后執(zhí)行
  • ERROR:發(fā)生錯誤的時候執(zhí)行

這些過濾器幫助我們執(zhí)行以下功能:

  • 身份驗證和安全性:識別每個資源的身份驗證需求,并拒絕不滿足它們的請求
  • 監(jiān)控:在邊緣跟蹤有意義的數(shù)據(jù)和統(tǒng)計數(shù)據(jù),以便給我們一個準確的生產(chǎn)視圖
  • 動態(tài)路由:動態(tài)路由請求到不同的后端集群
  • 壓力測試:逐漸增加集群的流量,以評估性能
  • 限流:為每種請求類型分配容量,并丟棄超過限制的請求
  • 靜態(tài)響應處理:直接在邊緣構(gòu)建一些響應,而不是將它們轉(zhuǎn)發(fā)到內(nèi)部集群

Zuul 1.0 請求生命周期

圖片

Netflix宣布了通用API網(wǎng)關Zuul的架構(gòu)轉(zhuǎn)型。Zuul原本采用同步阻塞架構(gòu),轉(zhuǎn)型后叫作Zuul2,采用異步非阻塞架構(gòu)。Zuul2和Zuul1在架構(gòu)方面的主要區(qū)別在于,Zuul2運行在異步非阻塞的框架上,比如Netty。Zuul1依賴多線程來支持吞吐量的增長,而Zuul 2使用的Netty框架依賴事件循環(huán)和回調(diào)函數(shù)。

4. Zuul2.0

Zuul 2.0 架構(gòu)圖

圖片

上圖是Zuul2的架構(gòu),和Zuul1沒有本質(zhì)區(qū)別,兩點變化:

  • 前端用Netty Server代替Servlet,目的是支持前端異步。后端用Netty Client代替Http Client,目的是支持后端異步。
  • 過濾器換了一下名字,用Inbound Filters代替Pre-routing Filters,用Endpoint Filter代替Routing Filter,用Outbound Filters代替Post-routing Filters。

Inbound Filters :路由到 Origin 之前執(zhí)行,可以用于身份驗證、路由和裝飾請求

Endpoint Filters :可用于返回靜態(tài)響應,否則內(nèi)置的ProxyEndpoint過濾器將請求路由到Origin

Outbound Filters :從Origin那里獲取響應后執(zhí)行,可以用于度量、裝飾用戶的響應或添加自定義header

有兩種類型的過濾器:sync 和 async。因為Zuul是運行在一個事件循環(huán)之上的,因此從來不要在過濾中阻塞。如果你非要阻塞,可以在一個異步過濾器中這樣做,并且在一個單獨的線程池上運行,否則可以使用同步過濾器。

上文提到過Zuul2開始采用了異步模型

優(yōu)勢是異步非阻塞模式啟動的線程很少,基本上一個CPU core上只需啟一個事件環(huán)處理線程,它使用的線程資源就很少,上下文切換(Context Switch)開銷也少。非阻塞模式可以接受的連接數(shù)大大增加,可以簡單理解為請求來了只需要進隊列,這個隊列的容量可以設得很大,只要不超時,隊列中的請求都會被依次處理。

不足,異步模式讓編程模型變得復雜。一方面Zuul2本身的代碼要比Zuul1復雜很多,Zuul1的代碼比較容易看懂,Zuul2的代碼看起來就比較費勁。另一方面異步模型沒有一個明確清晰的請求->處理->響應執(zhí)行流程(call flow),它的流程是通過事件觸發(fā)的,請求處理的流程隨時可能被切換斷開,內(nèi)部實現(xiàn)要通過一些關聯(lián)id機制才能把整個執(zhí)行流再串聯(lián)起來,這就給開發(fā)調(diào)試運維引入了很多復雜性,比如你在IDE里頭調(diào)試異步請求流就非常困難。另外ThreadLocal機制在這種異步模式下就不能簡單工作,因為只有一個事件環(huán)線程,不是每個請求一個線程,也就沒有線程局部的概念,所以對于CAT這種依賴于ThreadLocal才能工作的監(jiān)控工具,調(diào)用鏈埋點就不好搞(實際可以工作但需要進行特殊處理)。

總體上,異步非阻塞模式比較適用于IO密集型(IO bound)場景,這種場景下系統(tǒng)大部分時間在處理IO,CPU計算比較輕,少量事件環(huán)線程就能處理。

Zuul 與 Zuul 2 性能對比

圖片

Netflix給出了一個比較模糊的數(shù)據(jù),大致Zuul2的性能比Zuul1好20%左右,這里的性能主要指每節(jié)點每秒處理的請求數(shù)。為什么說模糊呢?因為這個數(shù)據(jù)受實際測試環(huán)境,流量場景模式等眾多因素影響,你很難復現(xiàn)這個測試數(shù)據(jù)。即便這個20%的性能提升是確實的,其實這個性能提升也并不大,和異步引入的復雜性相比,這20%的提升是否值得是個問題。Netflix本身在其博文22和ppt11中也是有點含糊其詞,甚至自身都有一些疑問的。

5. Spring Cloud Gateway

SpringCloud Gateway 是 Spring Cloud 的一個全新項目,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關,它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。

SpringCloud Gateway 作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關,目標是替代 Zuul,在Spring Cloud 2.0以上版本中,沒有對新版本的Zuul 2.0以上最新高性能版本進行集成,仍然還是使用的Zuul 2.0之前的非Reactor模式的老版本。而為了提升網(wǎng)關的性能,SpringCloud Gateway是基于WebFlux框架實現(xiàn)的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。

Spring Cloud Gateway 的目標,不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關基本的功能,例如:安全,監(jiān)控/指標,和限流。

Spring Cloud Gateway 底層使用了高性能的通信框架Netty。

SpringCloud Gateway 特征

SpringCloud官方,對SpringCloud Gateway 特征介紹如下:

(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)集成 Hystrix 斷路器

(3)集成 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用于特定路由,易于編寫的 Predicates 和 Filters

(5)具備一些網(wǎng)關的高級功能:動態(tài)路由、限流、路徑重寫

從以上的特征來說,和Zuul的特征差別不大。SpringCloud Gateway和Zuul主要的區(qū)別,還是在底層的通信框架上。

簡單說明一下上文中的三個術(shù)語:

Filter(過濾器)

和Zuul的過濾器在概念上類似,可以使用它攔截和修改請求,并且對上游的響應,進行二次處理。過濾器為org.springframework.cloud.gateway.filter.GatewayFilter類的實例。

Route(路由)

網(wǎng)關配置的基本組成模塊,和Zuul的路由配置模塊類似。一個Route模塊由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配,目標URI會被訪問。

Predicate(斷言):

這是一個 Java 8 的 Predicate,可以使用它來匹配來自 HTTP 請求的任何內(nèi)容,例如 headers 或參數(shù)。斷言的輸入類型是一個 ServerWebExchange。

幾種網(wǎng)關的對比

圖片


大號好友坑位已滿,新開了一個小號,有問題咨詢或者想和陳某做朋友圈點贊之交的可以加我好友

熱詞搜索:

上一篇:成為首席信息安全官的七個理由
下一篇:最后一頁

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
欧美日韩ab片| 久久久久99精品国产片| 国产精品专区一| 卡通动漫国产精品| 欧美精品一区二区三| av成人老司机| 欧美日韩视频在线观看一区二区三区| 免费在线亚洲| 性娇小13――14欧美| 国产一区二区三区不卡在线观看 | 美国十次了思思久久精品导航| 久久精品日韩欧美| 国内视频精品| 在线观看日韩一区| 国产欧美日韩在线播放| 久久久久久久久久久一区| 亚洲自拍偷拍福利| 国产在线视频欧美| 欧美日韩高清在线| 亚洲麻豆国产自偷在线| 欧美极品色图| 欧美不卡在线视频| 午夜精品久久一牛影视| 欧美亚洲综合久久| 亚洲国产一区视频| 亚洲主播在线| 99精品视频免费在线观看| 亚洲精品偷拍| 亚洲高清视频在线观看| 久久久国产成人精品| 亚洲国产99| 亚洲在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧美成人福利视频| 欧美人与禽性xxxxx杂性| 欧美大尺度在线观看| 国产精品入口| 亚洲第一伊人| 性欧美在线看片a免费观看| 久久国产加勒比精品无码| 美日韩在线观看| 国产精品美女www爽爽爽| 伊人久久亚洲热| 一区二区三区国产| 亚洲一区二区三区在线视频| 亚洲电影免费在线观看| 亚洲天堂av在线免费观看| 亚洲欧美精品| 欧美大片免费观看在线观看网站推荐 | 午夜国产精品视频| 欧美一区二区视频免费观看 | 亚洲福利国产| 亚洲国产成人在线| 一本色道久久| 久久午夜电影网| 国产精品久久久久一区| 国产网站欧美日韩免费精品在线观看| 国产亚洲人成网站在线观看| 一区二区免费看| 久久久www成人免费毛片麻豆| 欧美日韩国产成人精品| 1000部精品久久久久久久久 | 99re8这里有精品热视频免费 | 午夜激情一区| 久久久久在线观看| 欧美日韩精品一二三区| 在线成人av网站| 性做久久久久久免费观看欧美 | 久久综合久久88| 欧美午夜www高清视频| 91久久精品国产| 中国成人黄色视屏| 久久久久欧美精品| 国产一区二区三区黄| 久久9热精品视频| 国产欧美精品国产国产专区| 亚洲精品影视| 亚洲一区二区在线免费观看视频 | 国产综合色在线| 久久9热精品视频| 欧美一区免费视频| 麻豆久久婷婷| 亚洲全部视频| 欧美视频在线免费| 午夜亚洲视频| 91久久综合| 9i看片成人免费高清| 欧美久久在线| 亚洲在线视频一区| 欧美午夜精品久久久久免费视| 亚洲欧洲美洲综合色网| 免费成人性网站| 亚洲激情欧美激情| 欧美 日韩 国产一区二区在线视频 | 午夜激情综合网| 国产精品嫩草影院av蜜臀| 亚洲手机成人高清视频| 国产日韩精品视频一区| 免费观看日韩av| 亚洲小说春色综合另类电影| 国产午夜精品理论片a级大结局| 亚洲成色999久久网站| 欧美经典一区二区三区| 午夜日韩在线| 亚洲第一精品福利| 欧美日韩亚洲视频| 久久国产一区二区| 一区二区三区精品视频| 欧美婷婷六月丁香综合色| 久久成人精品无人区| 亚洲欧洲另类国产综合| 国产精品美女久久久免费| 久久精品一区二区三区不卡| 亚洲国产精品第一区二区| 香蕉久久夜色精品国产使用方法| 国产欧美日韩麻豆91| 欧美日本中文字幕| 久久精品国产视频| 亚洲天堂激情| 亚洲精品国产系列| 黑人操亚洲美女惩罚| 欧美日韩精品是欧美日韩精品| 欧美在线亚洲在线| 亚洲视频网在线直播| 亚洲夫妻自拍| 黄页网站一区| 国产精品高潮呻吟| 欧美日韩精品是欧美日韩精品| 久久久久久久成人| 欧美一区综合| 午夜亚洲伦理| 日韩视频在线观看免费| 欧美日韩精品一区二区| 欧美aa在线视频| 免费91麻豆精品国产自产在线观看| 亚洲在线观看| 亚洲视频日本| 亚洲欧美日韩精品久久久久| 一道本一区二区| 日韩午夜视频在线观看| 亚洲狼人综合| 亚洲破处大片| 日韩视频在线观看免费| 亚洲精品一区二区三区四区高清| 91久久综合亚洲鲁鲁五月天| 国内免费精品永久在线视频| 国产人成精品一区二区三| 国产日韩在线看片| 国语自产精品视频在线看一大j8| 国产手机视频精品| 开心色5月久久精品| 国内精品久久久| 黄色欧美日韩| 伊人成年综合电影网| 在线欧美日韩国产| 亚洲国产精品久久久久秋霞影院| 狠狠色丁香久久婷婷综合_中| 韩日欧美一区二区| 亚洲成人直播| 亚洲国产一区二区a毛片| 夜夜嗨一区二区| 一区二区av在线| 国内精品久久久| 久久久999精品视频| 免费观看国产成人| 欧美日韩一区二区三区四区在线观看 | 9久草视频在线视频精品| av不卡在线| 韩日在线一区| 日韩视频一区| 欧美伊人精品成人久久综合97| 久久这里有精品视频| 欧美日韩国产不卡在线看| 欧美偷拍一区二区| 国产欧美一区二区三区国产幕精品 | 在线观看三级视频欧美| 性欧美暴力猛交69hd| 国产精品a久久久久久| 亚洲精品视频在线播放| 鲁大师影院一区二区三区| 国产精品视频99| 亚洲免费观看高清在线观看| 久久―日本道色综合久久| 国产精品嫩草99av在线| 亚洲欧美日韩系列| 国产欧美在线视频| 久久国产精品一区二区| 国产日韩欧美三区| 亚洲欧美一级二级三级| 国产精品久久看| 欧美一区三区三区高中清蜜桃 | 在线亚洲成人| 国产精品乱码| 久久九九国产精品| 亚洲激情成人在线| 欧美亚男人的天堂| 久久www成人_看片免费不卡| 在线成人激情黄色| 欧美日韩免费观看一区二区三区 | 中文久久精品|