精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

簡單聊聊從 Nginx 到 Kong 的進化

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

大家好,我是飛哥!

在我們的傳統業務中,Nginx 在七層網關場景中應用得很廣。但是最近幾年由于微服務的盛行。Nginx 上的這套生態鏈也在不斷地進化。

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

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

一、Nginx 是如何進化到 kong 的

在傳統的互聯網服務中,對網關的主要訴求就是反向代理、負載均衡、路由等基礎功能。

一個經典的業務的架構圖一般是采用四層 LVS 做 對外 IP 收斂,在七層采用 Nginx 來負責七層 HTTPS 協議接入,反向代理、負載均衡、路由。

圖片

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

性能上的問題是解決了,但是現在隨著微服務的發展,服務被拆的非常零散,降低了耦合度的同時也給服務的統一管理增加了難度。

例如服務發現。在 Nginx 中,所有的后端服務都是以靜態配置文件的形式記錄的。每當后端服務的 IP 發生變化的時候,需要重新修改配置文件。

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

除了服務發現以外,微服務時代對網關還有其他一些新的需求,例如限流、協議轉換、身份驗證、安全防護等功能,都需要在網關中能夠支持。

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

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

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

有了 OpenResty,網關方便地進行功能擴展的技術路徑就算是打通了。后來 Mashape 在 OpenResty 的基礎上迭代發布了一個新網關 Kong。

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

圖片

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

二、展示 kong 的功能

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

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

在騰訊云微服務引擎后臺一鍵就可以創建 kong 網關。

圖片

當你選擇好配置并創建 kong 實例后,其內部依賴的數據庫和管理程序 konga 就全都自動一鍵生成好了。

圖片

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

圖片

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

圖片

圖片

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

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

圖片

kong 也可以 ELK 打通,實現日志的查看與檢索。

圖片

如果想將日志長期存儲的話,直接開啟 CLS 日志服務的話就可以實現長期保存。

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

圖片

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

三、總結

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

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

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

總之,在今天的互聯網中,kong 可能比 nginx 更加適合業務!

責任編輯:武曉燕 來源: 開發內功修煉
相關推薦

2021-09-01 22:58:22

Canvas標簽

2024-07-08 08:11:15

2022-03-29 09:35:15

FirefoxUI瀏覽器

2021-03-09 08:01:27

CPUarm64寄存器

2018-12-21 11:01:05

存儲大數據RAID

2020-12-03 14:03:29

中臺數智化架構

2025-09-12 16:13:12

2025-08-01 09:41:52

2018-10-10 14:02:30

Linux系統硬件內核

2009-06-01 10:11:55

路由器DIR-685D-Link

2013-04-17 11:18:11

編程語言

2025-02-06 16:51:30

2018-03-19 15:35:27

華為

2025-08-13 09:13:00

2012-06-12 09:17:42

蘋果WWDC

2011-01-04 17:08:10

匯編語言

2011-10-03 20:23:34

2024-02-04 09:13:24

基礎設施代碼DevOps

2024-09-26 10:29:56

數據中臺數據飛輪

2024-03-05 10:34:33

KubernetesPod云原生
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 荣昌县| 修武县| 治县。| 贵德县| 昌乐县| 南阳市| 石首市| 祁连县| 阳山县| 兴文县| 双城市| 建瓯市| 北流市| 云安县| 武定县| 大关县| 喀什市| 康定县| 安义县| 大埔县| 泽州县| 台中市| 寻甸| 马龙县| 厦门市| 安国市| 公安县| 惠东县| 疏勒县| 胶州市| 通山县| 开阳县| 岐山县| 藁城市| 富裕县| 香港| 五华县| 武鸣县| 缙云县| 彰化市| 米易县|