自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

簡單聊聊從 Nginx 到 Kong 的進化

開發(fā) 架構(gòu)
在微服務(wù)時代,需要在網(wǎng)關(guān)上擴展很多功能。但是在 Nginx 里這些功能擴展起來并不是很方便,需要開發(fā)熟悉 c 語言,而且發(fā)布起來也得重新編譯,很費勁。

大家好,我是飛哥!

在我們的傳統(tǒng)業(yè)務(wù)中,Nginx 在七層網(wǎng)關(guān)場景中應(yīng)用得很廣。但是最近幾年由于微服務(wù)的盛行。Nginx 上的這套生態(tài)鏈也在不斷地進化。

2007 年國人章亦春大神在 Nginx 的基礎(chǔ)上開發(fā)出了 OpenResty。2009 年 marco 又在 OpenResty 上開發(fā)出了 kong。截止到寫稿時,該項目已經(jīng) 33 k 的 star 了。

我今天借助騰訊云來帶大家學(xué)習(xí)下 kong 所具備的各種能力。

一、Nginx 是如何進化到 kong 的

在傳統(tǒng)的互聯(lián)網(wǎng)服務(wù)中,對網(wǎng)關(guān)的主要訴求就是反向代理、負載均衡、路由等基礎(chǔ)功能。

一個經(jīng)典的業(yè)務(wù)的架構(gòu)圖一般是采用四層 LVS 做 對外 IP 收斂,在七層采用 Nginx 來負責(zé)七層 HTTPS 協(xié)議接入,反向代理、負載均衡、路由。

圖片

Nginx 的每個 Worker 進程在底層都使用一個 epoll 對象,高效管理海量的 socket 連接上的網(wǎng)絡(luò)事件的處理。參見飛哥之前寫的搞懂 Nginx 高性能網(wǎng)絡(luò)工作原理!這篇文章。

性能上的問題是解決了,但是現(xiàn)在隨著微服務(wù)的發(fā)展,服務(wù)被拆的非常零散,降低了耦合度的同時也給服務(wù)的統(tǒng)一管理增加了難度。

例如服務(wù)發(fā)現(xiàn)。在 Nginx 中,所有的后端服務(wù)都是以靜態(tài)配置文件的形式記錄的。每當(dāng)后端服務(wù)的 IP 發(fā)生變化的時候,需要重新修改配置文件。

但在微服務(wù)時代,后端都是用容器部署的,每次版本發(fā)布都會導(dǎo)致 IP 的變化。而且微服務(wù)時代還需要動態(tài)的擴縮容,都會導(dǎo)致后端服務(wù) IP 的變化。傳統(tǒng)的修改配置文件才能重新分配流量的方式顯然已經(jīng)無法滿足需要。

除了服務(wù)發(fā)現(xiàn)以外,微服務(wù)時代對網(wǎng)關(guān)還有其他一些新的需求,例如限流、協(xié)議轉(zhuǎn)換、身份驗證、安全防護等功能,都需要在網(wǎng)關(guān)中能夠支持。

我們都知道,Nginx 是用 c 語言寫的。如果想在 Nginx 的基礎(chǔ)上開發(fā)這些功能,成本還是挺高的。首先 c 語言的門檻就會比其它語言要高一些。其次,每次功能的修改都需要重新編譯發(fā)布 Nginx。

好在國人章亦春大神搞出了 OpenResty,將 Lua JIT 內(nèi)嵌到了 Nginx 的內(nèi)部,以支持通過 lua 語言對 Nginx 的能力進行方便地擴展開發(fā)。這樣每當(dāng)有新功能擴展的時候,只需要將 lua 代碼發(fā)布一下,然后將 Nginx reload 一下就 ok 了。

飛哥之前所負責(zé)的搜狗瀏覽器在不少的模塊中都是采用這種模式開發(fā)的,使用 lua 語言對 Nginx 功能進行擴展。既簡單方便,還基本接近原生 Nginx 的性能。

有了 OpenResty,網(wǎng)關(guān)方便地進行功能擴展的技術(shù)路徑就算是打通了。后來 Mashape 在 OpenResty 的基礎(chǔ)上迭代發(fā)布了一個新網(wǎng)關(guān) Kong。

我覺得 kong 最優(yōu)雅的設(shè)計就是它的插件機制。該網(wǎng)關(guān)基于通過插件化的方式來支持網(wǎng)關(guān)功能的擴展,并提供了 60 多種插件。當(dāng)對網(wǎng)關(guān)有特定需求的時候,直接選擇一個或者幾個插件就可以輕松在 Nginx 上支持新功能了。

圖片

Kong 的插件機制是其高可擴展性的根源,Kong 可以很方便地為路由和服務(wù)提供各種插件,網(wǎng)關(guān)所需要的基本特性,Kong 都如數(shù)支持。如果現(xiàn)有的插件不能滿足你的,需求,你也可以使用 lua 語言輕松自己開發(fā)一個滿足自己需求的插件。

二、展示 kong 的功能

kong 的環(huán)境配起來還是有一點點小復(fù)雜的。它需要 Postgres 或者 Cassandra 等數(shù)據(jù)庫來管理路由配置,服務(wù)配置,upstream 配置等信息。還需要安裝 konga(最好的 kong 的管理程序)。

在騰訊云上的微服務(wù)引擎中,已經(jīng)集成了 kong 網(wǎng)關(guān),可以一鍵配置,非常的方便。我就以騰訊云上的 kong 為例,來給大家展示一下 kong 所具備的功能。

在騰訊云微服務(wù)引擎后臺一鍵就可以創(chuàng)建 kong 網(wǎng)關(guān)。

圖片

當(dāng)你選擇好配置并創(chuàng)建 kong 實例后,其內(nèi)部依賴的數(shù)據(jù)庫和管理程序 konga 就全都自動一鍵生成好了。

圖片

在 konga 管理后臺中,可以通過 service、route 菜單來管理服務(wù)以及路由。

圖片

接下來幾乎所有的工作都可以通過 konga 界面來可視化地完成。比如你想添加一個證書的話,直接點擊 “CERTIFICATES” 按鈕。填寫 Certificate、Key,并填域名到 Server Name Indications 中,單擊 SUBMIT CERTIFICATES 提交就完事。

圖片

圖片

服務(wù)是需要監(jiān)控的。在 Google的網(wǎng)站可靠性工程師小組(SRE)對服務(wù)提出了幾個需要監(jiān)控的黃金指標(biāo),例如延遲、流量和錯誤。kong 可以很方便地和 Prometheus 等云原生組件對接起來,以實現(xiàn)這些黃金指標(biāo)的監(jiān)控功能。

在騰訊云中,不需要額外的配置,這些功能都自動的配置好了,直接在實例的監(jiān)控頁查看即可。

圖片

kong 也可以 ELK 打通,實現(xiàn)日志的查看與檢索。

圖片

如果想將日志長期存儲的話,直接開啟 CLS 日志服務(wù)的話就可以實現(xiàn)長期保存。

另外在“PLUGINS”菜單中,騰訊云提供了各種內(nèi)置插件可以直接選用。包含訪問鑒權(quán)、安全控制、運維支持、報文轉(zhuǎn)換、流量控制等五個大類,幾十個插件。

圖片

另外在界面上沒有展示的是,騰訊云的 kong 還支持無損擴容,同城多活等高可用特性。

三、總結(jié)

在微服務(wù)時代,需要在網(wǎng)關(guān)上擴展很多功能。但是在 Nginx 里這些功能擴展起來并不是很方便,需要開發(fā)熟悉 c 語言,而且發(fā)布起來也得重新編譯,很費勁。

OpenResty 支持了 lua JIT,使得可以通過簡單的 lua 語言來擴展網(wǎng)關(guān)的功能。kong 網(wǎng)關(guān)根據(jù)微服務(wù)對網(wǎng)關(guān)的需求,通過插件機制對網(wǎng)關(guān)進行功能擴展。并開發(fā)了許多現(xiàn)成的插件,直接拿來即用。

最后我又借助騰訊云給大家展示了是如何通過 konga 配置網(wǎng)關(guān),對服務(wù)的黃金指標(biāo)進行監(jiān)控,并進行日志檢索的。在部署使用以及運維上,騰訊云也更方便易用,而且也穩(wěn)定。

總之,在今天的互聯(lián)網(wǎng)中,kong 可能比 nginx 更加適合業(yè)務(wù)!

責(zé)任編輯:武曉燕 來源: 開發(fā)內(nèi)功修煉
相關(guān)推薦

2024-07-08 08:11:15

2021-09-01 22:58:22

Canvas標(biāo)簽

2022-03-29 09:35:15

FirefoxUI瀏覽器

2021-03-09 08:01:27

CPUarm64寄存器

2018-12-21 11:01:05

存儲大數(shù)據(jù)RAID

2020-12-03 14:03:29

中臺數(shù)智化架構(gòu)

2009-06-01 10:11:55

路由器DIR-685D-Link

2018-10-10 14:02:30

Linux系統(tǒng)硬件內(nèi)核

2013-04-17 11:18:11

編程語言

2025-02-06 16:51:30

2018-03-19 15:35:27

華為

2011-10-03 20:23:34

2012-06-12 09:17:42

蘋果WWDC

2011-01-04 17:08:10

匯編語言

2024-02-04 09:13:24

基礎(chǔ)設(shè)施代碼DevOps

2024-09-26 10:29:56

數(shù)據(jù)中臺數(shù)據(jù)飛輪

2024-12-24 07:20:00

C++std::anyC++17

2024-03-05 10:34:33

KubernetesPod云原生

2020-11-27 10:34:01

HTTPHTTPS模型

2024-09-18 15:19:54

數(shù)據(jù)倉庫數(shù)據(jù)飛輪醫(yī)療數(shù)據(jù)
點贊
收藏

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