云原生時(shí)代,18 歲的 NGINX 過(guò)時(shí)了嗎?

如今,全球半數(shù)以上(55%) 的網(wǎng)站都基于 NGINX 運(yùn)行,差不多相同比例 (53.7%) 的中國(guó)網(wǎng)站在 NGINX 開(kāi)源版上運(yùn)行。作為最受歡迎的網(wǎng)絡(luò)服務(wù)器,NGINX 自發(fā)布到現(xiàn)在已經(jīng)有 18 年了,它現(xiàn)在有什么樣的發(fā)展規(guī)劃呢?

近日,NGINX Sprint China 2022 大會(huì)于線上舉行,F(xiàn)5 NGINX 講解了 NGINX 在云原生下的產(chǎn)品路線圖,宣布推出 NGINX Kubernetes Gateway 以及 MARA 參考架構(gòu) 1.0 版本,并且 HTTP3 和 QUIC 也將合并到下一個(gè)版本中?!叭绻腥苏f(shuō)原先的 NGINX 產(chǎn)品系列已經(jīng)過(guò)時(shí),那我只能說(shuō)你并沒(méi)有密切關(guān)注我們的動(dòng)向”,F(xiàn)5 NGINX 總經(jīng)理 Rob Whiteley 在主題演講中這樣說(shuō)道。

NGINX 的進(jìn)化

在數(shù)字化技術(shù)的推動(dòng)下,應(yīng)用現(xiàn)代化正成為產(chǎn)業(yè)發(fā)展的趨勢(shì)與共識(shí)。F5 中國(guó)區(qū)軟件事業(yè)部總經(jīng)理章澍分享了 NGINX 認(rèn)為的,從傳統(tǒng)應(yīng)用向現(xiàn)代化應(yīng)用發(fā)展過(guò)程中將會(huì)歷經(jīng)的三次浪潮:第一次浪潮實(shí)現(xiàn)了應(yīng)用的大規(guī)模并發(fā)和擴(kuò)展,而如今正在經(jīng)歷的第二次浪潮,其特征是實(shí)現(xiàn)應(yīng)用解耦為微服務(wù)并通過(guò) API 連接。這波浪潮將極大地推動(dòng)自動(dòng)化技術(shù)的發(fā)展,感知可控、隨需而變的應(yīng)用也將應(yīng)運(yùn)而生。也就是說(shuō),在不遠(yuǎn)的將來(lái),全世界會(huì)迎來(lái)以感知可控、無(wú)人工干預(yù)的自適應(yīng)應(yīng)用為標(biāo)志的第三次浪潮。

NGINX 的誕生

NGINX 于 2004 年推出。在早期的互聯(lián)網(wǎng)時(shí)代,隨著 Web 2.0 的興起,用戶(hù)數(shù)量呈幾何級(jí)數(shù)增長(zhǎng),互聯(lián)網(wǎng)不再是單純的瀏覽 Web 頁(yè)面,逐漸開(kāi)始進(jìn)行交互,應(yīng)用程序的邏輯也變的更復(fù)雜,從簡(jiǎn)單的表單提交,到即時(shí)通信和在線實(shí)時(shí)互動(dòng)。這種用戶(hù)體量的上升以及互動(dòng)請(qǐng)求的增加,也給服務(wù)器帶來(lái)了壓力。

NGINX 的誕生也是為了實(shí)現(xiàn)大規(guī)模的并發(fā)和擴(kuò)展,相當(dāng)多的企業(yè)看到了 NGINX 的性能優(yōu)勢(shì)并開(kāi)始使用它。 Igor Sysoev 于 2011 年辭去了在 Rambler 的工作,并創(chuàng)立了 NGINX, Inc.。幾年后,NGINX Plus 發(fā)布了,這是一個(gè)帶有一些附加功能的版本,并且在商業(yè)上取得了巨大的成功。2019 年, NGINX, Inc. 被 F5 Networks 以 6.7 億美元收購(gòu)。

NGINX 采用異步模式,且輕量級(jí),采用 C 進(jìn)行編寫(xiě),在性能上的出色表現(xiàn)是擊敗 Apache 網(wǎng)絡(luò)服務(wù)器的關(guān)鍵。但 NGINX 取得成功,卻不僅僅是因?yàn)?NGINX 是一個(gè)網(wǎng)絡(luò)服務(wù)器,它還具備負(fù)載均衡器、反向代理、郵件代理和 HTTP 緩存等功能,提供了構(gòu)建安全、可靠的 Web 應(yīng)用程序所需的幾乎所有方面的能力。

比如,在 2000 年代早期,一臺(tái)硬件負(fù)載均衡服務(wù)器動(dòng)輒從十幾萬(wàn)到幾十萬(wàn)不等,因此當(dāng)服務(wù)規(guī)模不大時(shí),直接采購(gòu)硬件負(fù)載均衡服務(wù)器對(duì)于很多中小公司并不劃算,而通過(guò) Web 服務(wù)器的反向代理的方式卻是當(dāng)時(shí)比較經(jīng)濟(jì)的方式。一般 Web 服務(wù)器都有反向代理功能,NGINX 則是其中典型代表。

在此基礎(chǔ)上,NGINX 和 NGINX Plus 平臺(tái)又由多個(gè)分散的同類(lèi)最佳工具組成,當(dāng)它們串聯(lián)使用時(shí),可以以各種“風(fēng)格”進(jìn)行部署,以滿(mǎn)足企業(yè)的多種需求,從而成為了市場(chǎng)占有率第一的網(wǎng)絡(luò)服務(wù)器。

image

云原生時(shí)代的 NGINX

如果說(shuō)互聯(lián)網(wǎng)的崛起導(dǎo)致應(yīng)用的大規(guī)模并發(fā)和擴(kuò)展,是我們經(jīng)歷的第一次浪潮,那么微服務(wù)和容器化的興起,也可以算作是我們正在經(jīng)歷的第二次浪潮。

在第二波浪潮下,企業(yè)更關(guān)注于 Kubernetes 和容器的部署,但 Kubernetes 缺乏生產(chǎn)環(huán)境中的應(yīng)用所需的應(yīng)用交付、可觀察性以及安全防護(hù)功能,因此一個(gè)好的生產(chǎn)級(jí) Kubernetes 平臺(tái)需要進(jìn)行深思熟慮的定制和調(diào)整。

NGINX 2021 年的社區(qū)調(diào)查顯示,2/3 的人都已經(jīng)或打算在生產(chǎn)環(huán)境中使用 Kubernetes,但是都有著對(duì)于自身知識(shí)技能以及對(duì)于 Kubernetes 的復(fù)雜性、安全防護(hù)和擴(kuò)展性的擔(dān)憂(yōu)。為了構(gòu)建堅(jiān)實(shí)的 Kubernetes 基礎(chǔ),NGINX 通過(guò)添加 Ingress controller、WAF、服務(wù)網(wǎng)格以及一些其他云原生項(xiàng)目,提供了云原生的、Kubernetes 友好的開(kāi)源和商業(yè)解決方案,來(lái)提升應(yīng)用程序的擴(kuò)展性、可見(jiàn)性、安全性......

image

另一方面,微服務(wù)和應(yīng)用的數(shù)量在快速增長(zhǎng),微服務(wù)之間以及集群內(nèi)外之間的 API 數(shù)量也不斷增加。一般來(lái)說(shuō),微服務(wù)之間的內(nèi)部 API 調(diào)用次數(shù)通常是應(yīng)用到客戶(hù)端之間的外部 API 調(diào)用次數(shù)的 10 倍或者更多。隨著應(yīng)用環(huán)境的擴(kuò)張,復(fù)雜的環(huán)境可能有成百上千個(gè) API,更復(fù)雜的 API 身份驗(yàn)證、授權(quán)、路由、整形和生命周期管理等問(wèn)題就會(huì)隨之而來(lái),所以在云原生時(shí)代,網(wǎng)關(guān)功能更為重要。

NGINX 提供了 API Gateway、Ingress Controller、Service Mesh多種選擇。其中,作為被普遍使用的反向代理工具,基于 NGINX 實(shí)現(xiàn)的 NGINX Ingress 也成為了 Kubernetes 集群中最廣泛使用的 Ingress 網(wǎng)關(guān)。目前 NGINX Ingress 主要有兩個(gè)版本,其中一個(gè)是 Kubernetes 社區(qū)所開(kāi)發(fā)和維護(hù)的 NGINX Ingress Controller (kubernetes/ingress-NGINX)。而 F5 NGINX 也開(kāi)發(fā)和維護(hù)了 NGINX Ingress Controller (NGINXinc/kubernetes-ingress),在數(shù)據(jù)平面上添加一些高級(jí)功能或商業(yè)支持。

然而,開(kāi)源版本和 NGINX 維護(hù)的版本之間存在一定差異,這也讓用戶(hù)感到困惑。為了消除這種困惑,NGINX 基于 Kubernetes API Gateway SIG 參考架構(gòu),于今年早些時(shí)候推出了 NGINX Kubernetes Gateway。NGINX Kubernetes Gateway 由 Ingress controller 發(fā)展而來(lái),是一種基于 Gateway API 規(guī)范內(nèi)測(cè)版的新興技術(shù)。Gateway API 終將取代 Kubernetes 架構(gòu)中的 Ingress Controller,為了與云原生趨勢(shì)保持一致,NGINX 表示已決定將之前僅在開(kāi)源版本中提供的 NGINX Kubernetes Gateway 作為下階段的 Kubernetes 網(wǎng)絡(luò)開(kāi)發(fā)重點(diǎn)。

現(xiàn)代應(yīng)用參考架構(gòu) MARA

云原生基礎(chǔ)設(shè)施和基于微服務(wù)的設(shè)計(jì),能夠高容錯(cuò)、松耦合,使得開(kāi)發(fā)可快速迭代,讓企業(yè)可以用敏捷的方式支持?jǐn)?shù)字化轉(zhuǎn)型。然而利用云原生構(gòu)建現(xiàn)代化應(yīng)用并不容易,“部署 Kubernetes 有很多不同的方法——網(wǎng)絡(luò)、安全、身份驗(yàn)證,甚至像 API 網(wǎng)關(guān)這樣的東西。對(duì)于大多數(shù)剛起步的企業(yè)來(lái)說(shuō),這還是比較復(fù)雜?!?F5 NGINX 總經(jīng)理Rob Whiteley在接受媒體采訪時(shí)曾說(shuō)?!叭绻麤](méi)有很好地理解,很容易陷入錯(cuò)誤的配置狀態(tài)?!?/p>

image

“我們意識(shí)到,我們可以制作一個(gè)模版作為企業(yè)參考架構(gòu):給出真正的操作代碼,而不是紙上的概念?!盬hiteley 說(shuō)。因此,MARA 誕生了。這種思路類(lèi)似于構(gòu)建一個(gè)“黃金鏡像”,讓用戶(hù)從列表中自動(dòng)拉取、組裝和預(yù)集成所有腳本,然后通過(guò)一個(gè)命令進(jìn)行部署。并且 F5 希望開(kāi)發(fā)人員只需單擊幾下就能夠在幾分鐘內(nèi)配置和部署好一個(gè) Kubernetes 環(huán)境,形成一個(gè)完整并穩(wěn)定可靠的開(kāi)發(fā)環(huán)境。

總之,MARA 是一個(gè)悉心設(shè)計(jì)的“穩(wěn)定可靠、經(jīng)過(guò)測(cè)試且可以部署到在 Kubernetes 環(huán)境中運(yùn)行的實(shí)時(shí)生產(chǎn)應(yīng)用”解決方案。該模塊化架構(gòu)集成了創(chuàng)建生產(chǎn)級(jí)云原生環(huán)境所需的一切——安全性、日志記錄、網(wǎng)絡(luò)、應(yīng)用服務(wù)器、配置和 YAML 管理等。

即使平臺(tái)能夠集成所有這些功能,但要完全滿(mǎn)足生產(chǎn)環(huán)境要求還需要更多的工作。經(jīng)過(guò)不斷實(shí)驗(yàn)并探索如何幫助核心開(kāi)發(fā)人員更高效、更輕松地部署現(xiàn)代應(yīng)用,NGINX 在去年的 Sprint 大會(huì)上宣布推出了 MARA參考架構(gòu),一個(gè)現(xiàn)代應(yīng)用的開(kāi)源架構(gòu)和部署模型。在今年的 NGINX Sprint 上,Rob Whiteley 也在主題演講中宣布了即將推出 MARA 1.0版本。

在發(fā)布時(shí),MARA 預(yù)配置了多種選擇,使用Elastic進(jìn)行日志管理,使用Prometheus和Grafana進(jìn)行監(jiān)控和儀表板,使用Amazon Web Services的Elastic Kubernetes Service (EKS) 作為部署目標(biāo),使用Spinnaker進(jìn)行持續(xù)交付,以及 TLS的證書(shū)管理器,以及中間層的許多 NGINX 產(chǎn)品。

另外,微服務(wù)相對(duì)單體服務(wù),其故障定位難度完全不是一個(gè)等級(jí),因此要使微服務(wù)監(jiān)控和可觀察性更上一層樓,就需要引入優(yōu)秀的 APM 系統(tǒng)。CNCF 管理的 OpenTelemetry 項(xiàng)目 (由 OpenTracing 和 OpenCensus 合并而成),它以一種綜合的方式生成追蹤、日志和指標(biāo),也成為了目前服務(wù)監(jiān)控可觀察性統(tǒng)一方案。MARA 1.0 版本也選擇了集成OpenTelemetry,實(shí)現(xiàn)日分布式跟蹤、指標(biāo)收集等功能,這也是1.0版本中的一個(gè)重要變化。

NGINX 的開(kāi)源演進(jìn):兼顧穩(wěn)定和高性能

NGINX 作為純 C 實(shí)現(xiàn)的軟件,源碼質(zhì)量很高。創(chuàng)始人Igor Sysoev最開(kāi)始也只專(zhuān)注于解決 C10K 問(wèn)題,并一個(gè)人寫(xiě)了幾乎所有的代碼,獨(dú)自管理到 2011 年。

2017 年,當(dāng)時(shí)的 NGINX 首席執(zhí)行官接受媒體采訪時(shí)介紹說(shuō),這個(gè)輕量級(jí)軟件,核心代碼一直少于 200,000 行。同時(shí),開(kāi)源版本依賴(lài)很少,僅有非常少的庫(kù),如 Openssl、glib。這也是它高性能的原因之一。“性能為王”是它擊敗 Apache 網(wǎng)絡(luò)服務(wù)器的原因,其模塊化機(jī)制也始終可以讓 NGINX 關(guān)注于可以為工程師提供“靈活度”,這也是讓它在 Web 網(wǎng)關(guān)服務(wù)器領(lǐng)域中一直領(lǐng)先地位的原因。

但云原生的到來(lái)正在改變 API 網(wǎng)關(guān)的角色,也給 NGINX 帶來(lái)了新的挑戰(zhàn)。很多其他 API 網(wǎng)關(guān)解決方案都是基于 NGINX 搭建的,比如開(kāi)源和商用的 Kong API 網(wǎng)關(guān)以及開(kāi)源的 OpenResty 等,這些軟件在敏捷開(kāi)發(fā)行業(yè)很火。

雖然這進(jìn)一步驗(yàn)證了 NGINX 核心技術(shù)在這個(gè)領(lǐng)域的可用性,但也讓人們思考 NGINX 在云原生技術(shù)下的優(yōu)勢(shì)。但相對(duì)來(lái)講,NGINX 使用 C 語(yǔ)言,代碼空間封閉;而新興的一些軟件使用 Lua,雖然可以隨時(shí)編寫(xiě)功能插件,但通過(guò)解析 String 并立即返回調(diào)用函數(shù),這樣導(dǎo)致其代碼空間是完全開(kāi)放的。所以從這一點(diǎn)來(lái)說(shuō),NGINX 的設(shè)計(jì)更加安全穩(wěn)定。而傳統(tǒng)行業(yè)也比一些敏捷行業(yè)更注重安全穩(wěn)定的性能,所以 NGINX 仍然是傳統(tǒng)行業(yè)的首選。就像 Rob Whiteley 在主題演講中提到的那樣,“開(kāi)源安全性是開(kāi)發(fā)人員的首要考慮事項(xiàng)”。

他表示,“數(shù)以千計(jì)的企業(yè)正在生產(chǎn)環(huán)境中運(yùn)行 NGINX 開(kāi)源軟件——這是一件好事,因?yàn)檫@充分表明了公司們對(duì)我們開(kāi)源版本的高度信任,我們將帶著這份信任再接再厲。對(duì)于核心 NGINX 開(kāi)源版軟件,我們一直在不斷添加新特性和功能,并支持更多操作系統(tǒng)平臺(tái)。在即將發(fā)布的下個(gè)版本中,我們將通過(guò) HTTP3 和 QUIC 這兩大功能來(lái)保障 Web 應(yīng)用以及流量的安全性和可擴(kuò)展性?!?/p>

在 NGINX 的設(shè)計(jì)中,后端服務(wù)以靜態(tài)配置文件的形式記錄,里面使用了一些優(yōu)化過(guò)的靜態(tài)哈希表設(shè)計(jì),因此性能也非常好。但在微服務(wù)時(shí)代,后端服務(wù)的 IP 發(fā)生變化的時(shí)候,都需更改配置文件,靜態(tài)配置的方式也給網(wǎng)關(guān)實(shí)現(xiàn)“連接復(fù)用”增加了難度,而基于 UDP 的 HTTP3 和 QUIC 協(xié)議則可以實(shí)現(xiàn)跨 IP 遷移。各種網(wǎng)絡(luò)技術(shù)實(shí)際上早已經(jīng)成熟,但 NGINX 更多考慮的是穩(wěn)定性,因此在 QUIC 第一份規(guī)范草案提交給 IETF 的五年之后,NGINX 才選擇合并 QUIC 到當(dāng)前版本中。

這同時(shí)說(shuō)明 NGINX 也一直在跟進(jìn)網(wǎng)絡(luò)世界的重大變化。例如,NGINX 于 2015 年 9 月開(kāi)始支持 HTTP/2,距協(xié)議修訂標(biāo)準(zhǔn)化僅幾個(gè)月。HTTP/2 服務(wù)器推送支持也于 2018 年推出,現(xiàn)在 HTTP /3 和 QUIC 也終于要實(shí)現(xiàn)到 NGINX 中。

在開(kāi)源崛起和邁向成功的過(guò)程中,NGINX 在這一二十年里發(fā)揮了至關(guān)重要的作用。現(xiàn)在,通過(guò) NGINX 在云原生領(lǐng)域的重大發(fā)布,我們也可以看出 NGINX 一直在努力提升自身的競(jìng)爭(zhēng)力,用 Rob Whiteley 的話(huà)來(lái)說(shuō),就是“NGINX 要想十年后還能廣受歡迎,就需要不斷做出改進(jìn)......對(duì)自己的開(kāi)源工作反躬自省,跟上開(kāi)源運(yùn)動(dòng)的持續(xù)發(fā)展?!?/p>

參考鏈接:

https://www.NGINX-cn.net/blog/future-of-NGINX-getting-back-to-open-source-roots/

https://www.NGINX-cn.net/blog/5-things-to-know-about-NGINX-kubernetes-gateway/

https://www.bilibili.com/video/BV1wh41187De/

https://thenewstack.io/NGINXs-reference-architecture-for-kubernetes-microservices/

https://mp.weixin.qq.com/s/UPaA6uRTVn2Nu2qJKA9soQ

https://www.NGINX.com/blog/our-roadmap-quic-http-3-support-NGINX/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容