精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五種API網(wǎng)關(guān)技術(shù)選型,yyds

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
假如你要去找集團(tuán)老板(這兒只是舉個(gè)例子), 大家都知道老板肯定不是誰(shuí)想見(jiàn)就能見(jiàn)的, 也怕壞人嘛, 那么你去老板所在的辦公樓,假如是集團(tuán)總部, 大樓這個(gè)門(mén)就充當(dāng)了網(wǎng)關(guān)的角色, 大門(mén)一般都有看門(mén)員 ,看門(mén)員會(huì)做哪些事情呢?

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

圖片

什么是網(wǎng)關(guān)

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

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

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

網(wǎng)關(guān)通俗理解

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

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

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

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

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

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

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

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

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

網(wǎng)關(guān)與服務(wù)器集群

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

圖片

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

網(wǎng)關(guān)設(shè)計(jì)思路

一個(gè)網(wǎng)關(guān)需要有以下的功能:

1. 請(qǐng)求路由

網(wǎng)關(guān)一定要有請(qǐng)求路由的功能。這樣一來(lái),對(duì)于調(diào)用端來(lái)說(shuō),也是一件非常方便的事情。因?yàn)檎{(diào)用端不需要知道自己需要用到的其它服務(wù)的地址,全部統(tǒng)一地交給 Gateway 來(lái)處理。

2. 服務(wù)注冊(cè)

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

3. 負(fù)載均衡

因?yàn)橐粋€(gè)網(wǎng)關(guān)可以接收多個(gè)服務(wù)實(shí)例,所以網(wǎng)關(guān)還需要在各個(gè)對(duì)等的服務(wù)實(shí)例上做負(fù)載均衡策略。簡(jiǎn)單點(diǎn)就是直接 Round-Robin 輪詢,復(fù)雜點(diǎn)的可以設(shè)置上權(quán)重進(jìn)行分發(fā),再?gòu)?fù)雜一點(diǎn)還可以做到 session 粘連。

4. 彈力設(shè)計(jì)

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

5. 安全方面

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

灰度發(fā)布

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

API 聚合

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

API 編排

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

網(wǎng)關(guān)設(shè)計(jì)重點(diǎn)

網(wǎng)關(guān)設(shè)計(jì)重點(diǎn)主要是三個(gè), 高性能、高可用、高擴(kuò)展:

1. 高性能

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

2. 高可用

因?yàn)樗械牧髁炕蛘{(diào)用經(jīng)過(guò)網(wǎng)關(guān),所以網(wǎng)關(guān)必須成為一個(gè)高可用的技術(shù)組件,它的穩(wěn)定直接關(guān)系到了所有服務(wù)的穩(wěn)定。網(wǎng)關(guān)如果沒(méi)有設(shè)計(jì),就會(huì)成變一個(gè)單點(diǎn)故障。因此,一個(gè)好的網(wǎng)關(guān)至少要做到以下幾點(diǎn)。

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

3. 高擴(kuò)展

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

另外,在運(yùn)維方面,網(wǎng)關(guān)應(yīng)該有以下幾個(gè)設(shè)計(jì)原則。

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

網(wǎng)關(guān)設(shè)計(jì)注意事項(xiàng)

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

另外,因?yàn)榫W(wǎng)關(guān)是為用戶請(qǐng)求和后端服務(wù)的橋接裝置,所以需要考慮一些安全方面的事宜。具體如下:

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

流量網(wǎng)關(guān)

流量網(wǎng)關(guān),顧名思義就是控制流量進(jìn)入集群的網(wǎng)關(guān),有很多工作需要在這一步做,對(duì)于一個(gè)服務(wù)集群,勢(shì)必有很多非法的請(qǐng)求或者無(wú)效的請(qǐng)求,這時(shí)候要將請(qǐng)求拒之門(mén)外,降低集群的流量壓力。

圖片

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

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

圖片

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

業(yè)務(wù)網(wǎng)關(guān)

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

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

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

圖片

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

常見(jiàn)網(wǎng)關(guān)對(duì)比

既然對(duì)比,就先宏觀上對(duì)各種網(wǎng)關(guān)有一個(gè)了解,后面再挑一些常用的或者說(shuō)應(yīng)用廣泛的詳細(xì)了解。

目前常見(jiàn)的開(kāi)源網(wǎng)關(guān)大致上按照語(yǔ)言分類有如下幾類:

  • 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ù)量、成熟度等來(lái)劃分,主流的有 5個(gè):

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

1. OpenResty

OpenResty是一個(gè)流量網(wǎng)關(guān),根據(jù)前面對(duì)流量網(wǎng)關(guān)的介紹就可以知道流量網(wǎng)關(guān)的指責(zé)。

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

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

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

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

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

ngx_openresty 目前有兩大應(yīng)用目標(biāo):

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

2. Kong

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

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

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

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

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

圖片

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

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

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

Kong架構(gòu)

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

圖片

首先最底層是基于Nginx, Nginx是高性能的基礎(chǔ)層, 一個(gè)良好的負(fù)載均衡、反向代理器,然后在此基礎(chǔ)上增加Lua腳本庫(kù),形成了OpenResty,攔截請(qǐng)求, 響應(yīng)生命周期,可以通過(guò)Lua編寫(xiě)腳本,所以插件比較豐富。

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

3. Zuul1.0

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

Zuul使用了一系列不同類型的過(guò)濾器,使我們能夠快速靈活地將功能應(yīng)用到服務(wù)中。

過(guò)濾器

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

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

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

下面是Zuul的一些過(guò)濾器:

Incoming

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

Endpoint

Endpoint過(guò)濾器負(fù)責(zé)基于incoming過(guò)濾器的執(zhí)行來(lái)處理請(qǐng)求。Zuul有一個(gè)內(nèi)置的過(guò)濾器(ProxyEndpoint),用于將請(qǐng)求代理到后端服務(wù)器,因此這些過(guò)濾器的典型用途是用于靜態(tài)端點(diǎn)。例如:健康檢查響應(yīng),靜態(tài)錯(cuò)誤響應(yīng),404響應(yīng)。

Outgoing

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

過(guò)濾器類型

下面是與一個(gè)請(qǐng)求典型的生命周期對(duì)應(yīng)的標(biāo)準(zhǔn)的過(guò)濾器類型:

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

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

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

Zuul 1.0 請(qǐng)求生命周期

圖片

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

4. Zuul2.0

Zuul 2.0 架構(gòu)圖

圖片

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

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

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

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

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

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

上文提到過(guò)Zuul2開(kāi)始采用了異步模型

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

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

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

Zuul 與 Zuul 2 性能對(duì)比

圖片

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

5. Spring Cloud Gateway

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

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

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

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

SpringCloud Gateway 特征

SpringCloud官方,對(duì)SpringCloud Gateway 特征介紹如下:

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

(2)集成 Hystrix 斷路器

(3)集成 Spring Cloud DiscoveryClient

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

(5)具備一些網(wǎng)關(guān)的高級(jí)功能:動(dòng)態(tài)路由、限流、路徑重寫(xiě)

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

簡(jiǎn)單說(shuō)明一下上文中的三個(gè)術(shù)語(yǔ):

Filter(過(guò)濾器)

和Zuul的過(guò)濾器在概念上類似,可以使用它攔截和修改請(qǐng)求,并且對(duì)上游的響應(yīng),進(jìn)行二次處理。過(guò)濾器為org.springframework.cloud.gateway.filter.GatewayFilter類的實(shí)例。

Route(路由)

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

Predicate(斷言):

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

幾種網(wǎng)關(guān)的對(duì)比

圖片


大號(hào)好友坑位已滿,新開(kāi)了一個(gè)小號(hào),有問(wèn)題咨詢或者想和陳某做朋友圈點(diǎn)贊之交的可以加我好友

責(zé)任編輯:武曉燕 來(lái)源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-09-03 13:59:37

2021-11-23 06:02:20

APIOpenResty網(wǎng)關(guān)

2019-04-02 14:20:14

微服務(wù)API網(wǎng)關(guān)

2022-05-10 08:02:05

API網(wǎng)關(guān)系統(tǒng)

2023-12-21 08:35:30

注冊(cè)中心EurakaEtcd

2023-07-18 15:58:29

NodeJS開(kāi)發(fā)

2025-11-07 01:25:00

2023-04-03 08:51:06

2019-09-17 09:00:00

API

2009-10-27 10:14:02

無(wú)線接入技術(shù)

2011-09-22 13:47:35

云計(jì)算數(shù)據(jù)管理PaaS

2020-06-17 15:44:47

技術(shù)研發(fā)架構(gòu)

2025-06-06 08:28:56

2025-11-18 08:22:56

2024-09-30 13:15:57

2014-04-22 09:34:12

大數(shù)據(jù)

2023-09-07 10:56:36

2013-07-02 17:48:51

Android數(shù)據(jù)存儲(chǔ)Android

2023-04-14 15:07:05

架構(gòu)開(kāi)發(fā)自動(dòng)化工具

2023-09-07 15:11:44

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产又大又长又粗| 国产综合精品在线| 国产一二在线播放| 国产亚洲精品免费| 91美女片黄在线观看游戏| 欧美日韩免费做爰视频| 日韩在线麻豆| 欧美日韩一级二级三级| 穿情趣内衣被c到高潮视频| 亚洲精品字幕在线观看| 日日摸夜夜添夜夜添国产精品| 色婷婷**av毛片一区| 国产a√精品区二区三区四区| 在线成人av观看| 综合精品久久久| 久久人人爽爽人人爽人人片av| 伊人22222| 亚洲视频二区| 欧美成年人在线观看| wwwwww日本| 欧美不卡在线观看| 欧美在线观看视频一区二区| 欧美视频在线观看视频| www.在线播放| 99久久免费视频.com| 91久久久在线| 中国女人真人一级毛片| 一本色道久久综合一区| 美女黄色丝袜一区| 精品人妻无码一区| 一本久久青青| 亚洲风情亚aⅴ在线发布| 中文字幕视频三区| 五月激情久久| 欧美午夜宅男影院在线观看| 男人草女人视频| jizz在线观看| 2017欧美狠狠色| 国产精品国产精品| 99热精品在线播放| 久草在线在线精品观看| 国产精欧美一区二区三区| 日本三级网站在线观看| 欧美精品综合| 欧美极品少妇全裸体| 日本黄色录像视频| 日韩在线视频精品| 尤物九九久久国产精品的分类| 亚洲男人在线天堂| 菁菁伊人国产精品| 亚洲成色www8888| 免费不卡的av| 久久99国产精品久久99大师| 欧美成人女星排名| 日本少妇一级片| 天堂va欧美ⅴa亚洲va一国产| 91.com视频| 不卡的在线视频| 欧美日韩卡一| 欧美三级视频在线| 性欧美在线视频| 日韩久久一区| 日韩一区二区三区四区| 欧美高清精品一区二区| 日韩三级网址| 精品国产91久久久久久久妲己 | 伊人影院在线视频| 亚洲精品免费电影| 久草视频这里只有精品| 国产高清在线a视频大全 | 久久综合久久鬼色中文字| 久久精品一二三区| 国产在线一在线二| 亚洲国产第一页| 一区二区三区四区视频在线观看| 三级无遮挡在线观看| 99在线视频精品| 麻豆成人小视频| 粉嫩av在线播放| 国产精品区一区二区三区| 一区二区三区电影| 青春草免费在线视频| 欧美日韩国产麻豆| av污在线观看| 日本免费一区二区视频| 亚洲成人激情在线| japanese中文字幕| 欧美aaaa视频| 高清亚洲成在人网站天堂| 综合激情网五月| 蜜桃精品在线观看| 成人蜜桃视频| 国产午夜在线观看| 亚洲人成7777| 免费在线激情视频| 国产午夜久久av| 日韩精品一区二区三区第95| 精品视频第一页| 在线视频观看日韩| 国产日韩视频在线观看| 亚洲国产精品无码久久| 国产日韩v精品一区二区| 99re99热| 日本不卡一二三| 欧美一二三四在线| 黄色正能量网站| 一区二区蜜桃| 国产成人精品午夜| 亚洲经典一区二区| 国产精品麻豆网站| 国产美女网站在线观看| 亚洲在线资源| 亚洲欧美国内爽妇网| 欧美黄色一级网站| 欧美aaa在线| 精品日韩电影| 三级福利片在线观看| 色激情天天射综合网| 国产51自产区| 91超碰成人| 国产精品免费在线免费| 午夜av免费在线观看| 亚洲美女免费在线| 色戒在线免费观看| 国产九一精品| 国产91精品青草社区| 午夜免费福利视频| 亚洲天堂2014| 9l视频白拍9色9l视频| 夜色77av精品影院| 91精品国产99久久久久久| 成人福利小视频| 国产精品麻豆久久久| 色诱视频在线观看| 欧美自拍视频| 午夜精品视频网站| 国内精品久久久久久久久久久| 中文字幕巨乱亚洲| 97在线免费公开视频| 精品五月天堂| 久久久久久久久久久人体| 国产麻豆精品一区| 国产精品高潮呻吟| 天天操天天干天天做| 久久在线视频| 国产精品一区二区久久久| 激情小视频在线| 色国产精品一区在线观看| a级在线观看视频| 校园激情久久| 欧美三日本三级少妇三99| 不卡福利视频| 一区二区三区精品99久久 | 亚洲制服国产| 日韩欧美一区二区三区在线| 日韩a级片在线观看| 国产精品白丝av| 美女黄色免费看| 国产精品45p| 91禁国产网站| 国产69久久| 欧美日韩高清影院| 黑鬼狂亚洲人videos| 国产成人午夜片在线观看高清观看| 看一级黄色录像| 136福利精品导航| 97碰在线观看| 国产高清免费av在线| 欧美日韩综合色| 97成人资源站| 成人免费高清在线观看| 伊人成色综合网| 欧美理论在线播放| 成人日韩在线电影| 成人三级小说| 亚洲午夜激情免费视频| 亚洲最大成人在线视频| 亚洲精品网站在线观看| 97人妻精品一区二区三区免费| 亚洲在线电影| 在线观看福利一区| 综合伊人久久| 日韩美女毛茸茸| 米奇777四色精品人人爽| 日韩午夜激情免费电影| 欧美另类一区二区| 亚洲国产成人在线| 国产精品99精品无码视亚| 99日韩精品| 亚洲综合视频一区| 红杏视频成人| 国产欧美韩国高清| 黄色在线看片| 中文字幕免费国产精品| www夜片内射视频日韩精品成人| 午夜av一区二区| 后入内射无码人妻一区| 99综合电影在线视频| 手机免费av片| 亚洲免费综合| 人妻互换免费中文字幕| 免费观看久久av| 成人区精品一区二区| 91福利精品在线观看| 隔壁老王国产在线精品| 午夜视频成人| 亚洲欧美日韩一区二区三区在线| 国产剧情久久久| 色狠狠综合天天综合综合| 久久免费播放视频| 国产精品久久久久影院老司| 国产精品一区二区人妻喷水| 麻豆精品一区二区三区| 欧美 日韩 国产在线观看| 久久精品青草| 日韩三级电影| 亚洲精品3区| 国产高清在线一区| 国产精品日本一区二区三区在线 | 国产高清av在线播放| 日韩欧美网站| 日本一区二区不卡高清更新| 91欧美日韩在线| 92看片淫黄大片看国产片| 黄色精品视频| 日本在线观看天堂男亚洲| ****av在线网毛片| 欧美高清视频免费观看| 精品176二区| 北条麻妃一区二区三区中文字幕| 全色精品综合影院| 日韩国产激情在线| 免费观看a视频| 欧美tickling网站挠脚心| 999国产精品视频免费| 欧美片在线播放| 国产99久久久久久免费看| 日本国产一区二区| 国产亚洲欧美在线精品| 日韩欧美精品免费在线| 久久久久久久久久久久久av| 亚洲成av人片| 日本少妇激情舌吻| 亚洲成在人线免费| 中文字幕第28页| 亚洲大片在线观看| 国产一级精品视频| 色吊一区二区三区| 成人黄色激情视频| 欧美日韩电影一区| 国产精品乱码久久久| 4hu四虎永久在线影院成人| 曰批又黄又爽免费视频| 欧美午夜在线一二页| 中文字幕一区二区在线视频 | 亚洲乱码国产乱码精品精软件| 日韩一区二区不卡| 精品国产99久久久久久宅男i| 91精品国产综合久久精品| 精品毛片在线观看| 精品蜜桃在线看| 三级在线播放| 综合av色偷偷网| 久久bbxx| 欧美激情在线狂野欧美精品| av日韩中文| 日韩免费观看网站| 亚洲毛片在线免费| 福利视频一区二区三区| 免费萌白酱国产一区二区三区| 麻豆av一区| 国产精品99久久| 久草视频这里只有精品| 欧美一级二区| 国产美女18xxxx免费视频| 国产成a人亚洲| 国产精品亚洲无码| 中文字幕一区二区三区色视频| 久久久久久久久久久久久久免费看 | 成人午夜在线视频| 鲁大师私人影院在线观看| 国产日产欧美一区| 欧美做爰爽爽爽爽爽爽| 欧美日韩国产中文精品字幕自在自线| 无码一区二区三区| 日韩欧美中文一区二区| 五月婷婷丁香六月| 色婷婷综合成人av| 嗯~啊~轻一点视频日本在线观看| 国产97在线观看| 欧美视频精品全部免费观看| 久久国产一区二区| 97精品一区二区| 播放灌醉水嫩大学生国内精品| 美女精品自拍一二三四| 无码av免费精品一区二区三区| 国产亚洲精久久久久久| 黄色在线观看免费| 欧美性色欧美a在线播放| 亚洲精品字幕在线观看| 中文字幕一精品亚洲无线一区| 波多野结衣久久| 国产中文字幕亚洲| 伊人久久大香线蕉综合网蜜芽 | 30一40一50老女人毛片| 亚洲品质自拍视频| 久久久成人免费视频| 日韩欧美二区三区| 2021av在线| 久章草在线视频| 欧美色婷婷久久99精品红桃| 国产一二三四五| 日本91福利区| 极品白嫩丰满美女无套| 亚洲激情综合网| 又骚又黄的视频| 亚洲女人被黑人巨大进入| 日本大胆在线观看| 国产专区精品视频| 欧洲三级视频| 精品视频无码一区二区三区| 成人黄色777网| 少妇影院在线观看| 在线播放亚洲一区| lutube成人福利在线观看| 欧美亚洲国产视频| 国内精品偷拍| 乱熟女高潮一区二区在线| 六月婷婷色综合| 亚洲精品国产熟女久久久| 五月激情综合网| 亚洲av无码国产精品久久不卡| 俺也去精品视频在线观看| 成人综合网站| 亚洲国产精品久久久久久女王| 亚洲免费影视| 六月婷婷七月丁香| 色哟哟国产精品| 三区在线视频| 日本久久91av| 国内精品久久久久久久影视简单| 人妻熟妇乱又伦精品视频| 播五月开心婷婷综合| 国产污片在线观看| 亚洲精品在线电影| 成人性生交大片免费看网站| 国产精品久久国产精品| 日韩午夜av| 中文字幕av观看| 色婷婷精品久久二区二区蜜臂av| 性xxxx视频播放免费| 欧美亚洲第一页| sdde在线播放一区二区| 色多多视频在线播放| 国产精品免费丝袜| 国产又黄又爽视频| 久久国产精品久久久久| 一区视频网站| 亚洲熟妇av日韩熟妇在线| 91在线码无精品| 亚洲精品男人的天堂| 亚洲性夜色噜噜噜7777| 992tv国产精品成人影院| 在线免费一区| 成人午夜免费电影| 黑人一级大毛片| 这里只有视频精品| 国产精品毛片无码| 成年人午夜免费视频| 久久无码av三级| 一二区在线观看| 欧美极品xxxx| 国产精品美女久久久久久不卡| 国产精品区在线| 亚洲精品日韩综合观看成人91| 丰满少妇高潮在线观看| 秋霞午夜一区二区| 欧美韩国日本在线观看| 中文字幕99页| 色婷婷综合激情| 国产原创在线观看| 国内精品视频免费| 麻豆成人免费电影| 日韩av在线播放观看| 中文字幕精品久久久久| 成功精品影院| 亚洲国产精品三区| 亚洲一级不卡视频| 69久久精品| 九九九九久久久久| 精品无人区卡一卡二卡三乱码免费卡| 久久久久久久久久久97| 国产一区二区三区久久精品| 国产精品高清一区二区| 97xxxxx| 一区二区三区视频在线看| 九色在线视频| 成人免费91在线看| 麻豆久久久久久| 国产成人无码av|