www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]Kong是一個云原生,高效,可擴(kuò)展的分布式 API 網(wǎng)關(guān)。

Kong(https://github.com/Kong/kong)是一個云原生,高效,可擴(kuò)展的分布式 API 網(wǎng)關(guān)。自 2015 年在 github 開源后,廣泛受到關(guān)注,目前已收獲 1.68w+ 的 star,其核心價值在于高性能和可擴(kuò)展性。

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

選擇Kong作為你的API網(wǎng)關(guān)

在微服務(wù)架構(gòu)之下,服務(wù)被拆的非常零散,降低了耦合度的同時也給服務(wù)的統(tǒng)一管理增加了難度。如上圖左所示,在舊的服務(wù)治理體系之下,鑒權(quán),限流,日志,監(jiān)控等通用功能需要在每個服務(wù)中單獨(dú)實(shí)現(xiàn),這使得系統(tǒng)維護(hù)者沒有一個全局的視圖來統(tǒng)一管理這些功能。API 網(wǎng)關(guān)致力于解決的問題便是為微服務(wù)納管這些通用的功能,在此基礎(chǔ)上提高系統(tǒng)的可擴(kuò)展性。如右圖所示,微服務(wù)搭配上 API 網(wǎng)關(guān),可以使得服務(wù)本身更專注于自己的領(lǐng)域,很好地對服務(wù)調(diào)用者和服務(wù)提供者做了隔離。

為什么是 Kong

SpringCloud 玩家肯定都聽說過 Zuul 這個路由組件,包括 Zuul2 和 Springcloud Gateway 等框架,在國內(nèi)的知名度都不低。沒錯,我稱呼這些為組件 Or 框架,而 Kong 則更襯的上產(chǎn)品這個詞。在此我們可以簡單對比下 Zuul 和 Kong。

舉例而言,如果選擇使用 Zuul,當(dāng)需要為應(yīng)用添加限流功能,由于 Zuul 只提供了基本的路由功能,開發(fā)者需要自己研發(fā) Zuul Filter,可能你覺得一個功能還并不麻煩,但如果在此基礎(chǔ)上對 Zuul 提出更多的要求,很遺憾,Zuul 使用者需要自行承擔(dān)這些復(fù)雜性。而對于 Kong 來說,限流功能就是一個插件,只需要簡單的配置,即可開箱即用。

Kong 的插件機(jī)制是其高可擴(kuò)展性的根源,Kong 可以很方便地為路由和服務(wù)提供各種插件,網(wǎng)關(guān)所需要的基本特性,Kong 都如數(shù)支持:

  • 云原生: 與平臺無關(guān),Kong可以從裸機(jī)運(yùn)行到Kubernetes

  • 動態(tài)路由:Kong 的背后是 OpenResty+Lua,所以從 OpenResty 繼承了動態(tài)路由的特性

  • 熔斷

  • 健康檢查

  • 日志: 可以記錄通過 Kong 的 HTTP,TCP,UDP 請求和響應(yīng)。

  • 鑒權(quán): 權(quán)限控制,IP 黑白名單,同樣是 OpenResty 的特性

  • SSL: Setup a Specific SSL Certificate for an underlying service or API.

  • 監(jiān)控: Kong 提供了實(shí)時監(jiān)控插件

  • 認(rèn)證: 如數(shù)支持 HMAC, JWT, Basic, OAuth2.0 等常用協(xié)議

  • 限流

  • REST API: 通過 Rest API 進(jìn)行配置管理,從繁瑣的配置文件中解放

  • 可用性: 天然支持分布式

  • 高性能: 背靠非阻塞通信的 nginx,性能自不用說

  • 插件機(jī)制: 提供眾多開箱即用的插件,且有易于擴(kuò)展的自定義插件接口,用戶可以使用 Lua 自行開發(fā)插件

上面這些特性中,反復(fù)提及了 Kong 背后的 OpenResty,實(shí)際上,使用 Kong 之后,Nginx 可以完全摒棄,Kong 的功能是 Nginx 的父集。

而 Zuul 除了基礎(chǔ)的路由特性以及其本身和 SpringCloud 結(jié)合較為緊密之外,并無任何優(yōu)勢。

Kong 的架構(gòu)

選擇Kong作為你的API網(wǎng)關(guān) image-20180712184740981

從技術(shù)的角度講,Kong 可以認(rèn)為是一個 OpenResty 應(yīng)用程序。OpenResty 運(yùn)行在 Nginx 之上,使用 Lua 擴(kuò)展了 Nginx。Lua 是一種非常容易使用的腳本語言,可以讓你在 Nginx 中編寫一些邏輯操作。之前我們提到過一個概念 Kong = OpenResty + Nginx + Lua,但想要從全局視角了解 Kong 的工作原理,還是直接看源碼比較直接。我們定位到本地的 Kong 文件夾,按照上圖中的目錄層級來識識 Kong 的廬山真面目。

  1. Kong 文件下包含了全部源碼和必要組件,分析他們,我們便得到了 Kong 的架構(gòu)。0.13.x 是目前 Kong 的最新版本。

  2. 從 2 號塊中可以看到 nginx.conf ,這其實(shí)便是一個標(biāo)準(zhǔn)的 Nginx 目錄結(jié)構(gòu),這也揭示了 Kong 其實(shí)就是運(yùn)行在 Nginx 的基礎(chǔ)之上,而進(jìn)行的二次封裝。由 share 文件夾向下展開下一次分析。

  3. share 文件夾中包含了 OpenResty 的相關(guān)內(nèi)容,其實(shí)背后就是一堆 Lua 腳本,例如 lapis 包含了數(shù)據(jù)庫操作,Nginx 生命周期,緩存控制等必要的 Lua 腳本,logging 包含了日志相關(guān)的 Lua 腳本,resty 包含了 dns,健康檢查等相關(guān)功能的 Lua 腳本…而其中的 kong 目錄值得我們重點(diǎn)分析,他包含了 Kong 的核心對象。

  4. api 和 core 文件夾,封裝了 Kong 對 service,route,upstream,target 等核心對象的操作代碼(這四個核心對象將會在下面的小節(jié)重點(diǎn)介紹),而 plugins 文件夾則是 Kong 高可擴(kuò)展性的根源,存放了 kong 的諸多擴(kuò)展功能。

  5. plugins 文件夾包含了上一節(jié)提到的 Kong 的諸多插件功能,如權(quán)限控制插件,跨域插件,jwt 插件,oauth2 插件…如果需要自定義插件,則需要將代碼置于此處。

從上述文件夾瀏覽下來,大概可以看到它和 Nginx 的相似之處,并在此基礎(chǔ)之上借助于 Lua 對自身的功能進(jìn)行了拓展,除了 nginx.conf 中的配置,和相對固定的文件層級,Kong 還需要連接一個數(shù)據(jù)庫來管理路由配置,服務(wù)配置,upstream 配置等信息,是的,由于 Kong 支持動態(tài)路由的特性,所以幾乎所有動態(tài)的配置都不是配置在文件中,而是借助于 Postgres 或者 Cassandra 進(jìn)行管理。

選擇Kong作為你的API網(wǎng)關(guān) postgres

Kong 對外暴露了 Restful API,最終的配置便是落地在了數(shù)據(jù)庫之中。

Kong 的管理方式

通過文件夾結(jié)構(gòu)的分析,以及數(shù)據(jù)庫中的表結(jié)構(gòu),我們已經(jīng)對 Kong 的整體架構(gòu)有了一個基本的認(rèn)識,但肯定還存在一個疑問:我會配置 Nginx 來控制路由,但這個 Kong 應(yīng)當(dāng)怎么配置才能達(dá)到相同的目的呢?莫急,下面來看看 Kong 如何管理配置。

Kong 簡單易用的背后,便是因?yàn)槠渌械牟僮鞫际腔?HTTP Restful API 來進(jìn)行的。

選擇Kong作為你的API網(wǎng)關(guān) kong端點(diǎn)

其中 8000/8443 分別是 Http 和 Https 的轉(zhuǎn)發(fā)端口,等價于 Nginx 默認(rèn)的 80 端口,而 8001 端口便是默認(rèn)的管理端口,我們可以通過 HTTP Restful API 來動態(tài)管理 Kong 的配置。

一個典型的 Nginx 配置

upstream helloUpstream { server localhost:3000 weight=100;
} server { listen 80; location /hello { proxy_pass http://helloUpstream;
    }
}

如上這個簡單的 Nginx 配置,便可以轉(zhuǎn)換為如下的 Http 請求。

對應(yīng)的 Kong 配置

# 配置 upstream curl -X POST http://localhost:8001/upstreams --data "name=helloUpstream" # 配置 target curl -X POST http://localhost:8001/upstreams/hello/targets --data "target=localhost:3000" --data "weight=100" # 配置 service curl -X POST http://localhost:8001/services --data "name=hello" --data "host=helloUpstream" # 配置 route curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=8695cc65-16c1-43b1-95a1-5d30d0a50409"

這一切都是動態(tài)的,無需手動 reload nginx.conf。

我們?yōu)?Kong 新增路由信息時涉及到了 upstream,target,service,route 等概念,他們便是 Kong 最最核心的四個對象。(你可能在其他 Kong 的文章中見到了 api 這個對象,在最新版本 0.13 中已經(jīng)被棄用,api 已經(jīng)由 service 和 route 替代)

從上面的配置以及他們的字面含義大概能夠推測出他們的職責(zé),upstream 是對上游服務(wù)器的抽象;target 代表了一個物理服務(wù),是 ip + port 的抽象;service 是抽象層面的服務(wù),他可以直接映射到一個物理服務(wù)(host 指向 ip + port),也可以指向一個 upstream 來做到負(fù)載均衡;route 是路由的抽象,他負(fù)責(zé)將實(shí)際的 request 映射到 service。

他們的關(guān)系如下

upstream 和 target :1 對 n

service 和 upstream :1 對 1 或 1 對 0 (service 也可以直接指向具體的 target,相當(dāng)于不做負(fù)載均衡)

service 和 route:1 對 n

高可擴(kuò)展性的背后—插件機(jī)制

Kong 的另一大特色便是其插件機(jī)制,這也是我認(rèn)為的 Kong 最優(yōu)雅的一個設(shè)計(jì)。

文章開始時我們便提到一點(diǎn),微服務(wù)架構(gòu)中,網(wǎng)關(guān)應(yīng)當(dāng)承擔(dān)所有服務(wù)共同需要的那部分功能,這一節(jié)我們便來介紹下,Kong 如何添加 jwt 插件,限流插件。

插件(Plugins)裝在哪兒?對于部分插件,可能是全局的,影響范圍是整個 Kong 服務(wù);大多數(shù)插件都是裝在 service 或者 route 之上。這使得插件的影響范圍非常靈活,我們可能只需要對核心接口進(jìn)行限流控制,只需要對部分接口進(jìn)行權(quán)限控制,這時候,對特定的 service 和 route 進(jìn)行定向的配置即可。

為 hello 服務(wù)添加50次/秒的限流

curl -X POST http://localhost:8001/services/hello/plugins \
--data "name=rate-limiting" \
--data "config.second=50"

為 hello 服務(wù)添加 jwt 插件

curl -X POST http://localhost:8001/services/login/plugins \
--data "name=jwt"

同理,插件也可以安裝在 route 之上

curl -X POST http://localhost:8001/routes/{routeId}/plugins \
--data "name=rate-limiting" \
--data "config.second=50"

curl -X POST http://localhost:8001/routes/{routeId}/plugins \
--data "name=jwt"

在官方文檔中,我們可以獲取全部的插件 https://konghq.com/plugins/,部分插件需要收費(fèi)的企業(yè)版才可使用。

選擇Kong作為你的API網(wǎng)關(guān) kong插件

總結(jié)

Kong 是目前市場上相對較為成熟的開源 API 網(wǎng)關(guān)產(chǎn)品,無論是性能,擴(kuò)展性,還是功能特性,都決定了它是一款優(yōu)秀的產(chǎn)品,對 OpenResty 和 Lua 感興趣的同學(xué),Kong 也是一個優(yōu)秀的學(xué)習(xí)參考對象。基于 OpenResty,可以在現(xiàn)有 Kong 的基礎(chǔ)上進(jìn)行一些擴(kuò)展,從而實(shí)現(xiàn)更復(fù)雜的特性,比如我司內(nèi)部的 ABTest 插件和定制化的認(rèn)證插件,開發(fā)成本都相對較低。Kong 系列的文章將會在以后持續(xù)連載。

Kirito 有話說:感謝閱讀,為了博主更好地創(chuàng)作,提供更多的原創(chuàng)文章,請大家務(wù)必!務(wù)必!務(wù)必!幫我點(diǎn)擊閱讀一下明天即將發(fā)出來的公眾號文章?。?!感謝老鐵~


閱讀擴(kuò)展

初識 Kong 之負(fù)載均衡 https://www.cnkirito.moe/kong-loadbalance/

Kong 集成 Jwt 插件 https://www.cnkirito.moe/kong-jwt/


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉