在這里,NGINX 創(chuàng)始人 Igor Sysoev 將親述 NGINX 的誕生史
關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容
來(lái)源:InfoQ
2020 年 5 月 20 日,一場(chǎng) NGINX 在國(guó)內(nèi)的盛會(huì)、一個(gè)所有 NGINX 用戶(hù) & 愛(ài)好者朝圣的最佳場(chǎng)所,F(xiàn)5 線(xiàn)上技術(shù)峰會(huì) - NGINX 專(zhuān)場(chǎng)將以線(xiàn)上直播的形式面向所有開(kāi)發(fā)者召開(kāi)。屆時(shí)各位 NGINX 開(kāi)發(fā)者心目中的偶像 NGINX 創(chuàng)始人 Igor Sysoev 以及國(guó)內(nèi) NGINX 技術(shù)專(zhuān)家陶輝老師將空降大會(huì)現(xiàn)場(chǎng),從 NGXIN 創(chuàng)始人的成長(zhǎng)經(jīng)歷出發(fā),幫助每一位開(kāi)發(fā)者來(lái)重新理解 NGINX 的前世今生。如果想讓產(chǎn)品在支持高并發(fā)請(qǐng)求的同時(shí)保持高效的服務(wù),NGINX 可能是最好的選擇。 這并非一句玩笑話(huà),而是經(jīng)過(guò)全球技術(shù)人多年來(lái)技術(shù)實(shí)踐后所得出的結(jié)論。NGINX 就像一個(gè)萬(wàn)能藥,在任何存在性能需求的場(chǎng)合都能找到它的身影,它可以在百萬(wàn)并發(fā)鏈接中實(shí)現(xiàn)高吞吐量的 Web 服務(wù)。然而即便是這樣,NGINX 卻至今缺少一個(gè)能夠?qū)⑺?NGINX 用戶(hù)聚集起來(lái)的官方場(chǎng)所,這對(duì)于像這樣一個(gè)如此受歡迎的開(kāi)源產(chǎn)品來(lái)說(shuō)是很不常見(jiàn)的,而這也是此次大會(huì)之下的重頭戲之一。 NGINX 現(xiàn)在已經(jīng)成為了眾多企業(yè)后臺(tái)架構(gòu)的核心,許多企業(yè)都將 NGINX 用作承擔(dān)所有來(lái)自 Web 服務(wù)的業(yè)務(wù)流量負(fù)載,也將其用作全球數(shù)百萬(wàn)臺(tái)服務(wù)器上的反向代理,能夠支撐業(yè)務(wù)數(shù)以百萬(wàn)級(jí)別的高并發(fā)。這樣一款自由的、開(kāi)源的、高性能的 HTTP 服務(wù)器和反向代理軟件,在企業(yè)“數(shù)字化轉(zhuǎn)型概念”大行其道的今天,NGINX 能力給企業(yè)的后臺(tái)架構(gòu)帶來(lái)了極大的穩(wěn)定性,更是成為企業(yè)實(shí)現(xiàn)數(shù)字轉(zhuǎn)型的必備利器。一、對(duì)于企業(yè)來(lái)說(shuō),NGINX 是實(shí)現(xiàn)數(shù)字轉(zhuǎn)型的有效途徑
NGINX 是實(shí)現(xiàn)技術(shù)突破的必要工具。
隨著 2020 年的魔幻開(kāi)局,國(guó)內(nèi)眾多行業(yè)都受到了不小的沖擊,疫情期間人人自危,企業(yè)復(fù)工困難,上下游供應(yīng)鏈有一端沒(méi)有恢復(fù)就不能真的恢復(fù)業(yè)務(wù);像疫情這種黑天鵝事件是完全不可預(yù)測(cè)的。對(duì)于企業(yè)而言現(xiàn)在正處于一個(gè)模糊的、不確定的、快速變化的時(shí)代,在這種 VUCA 時(shí)代特征下出現(xiàn)這種狀況可以說(shuō)既是意外又不是意外。對(duì)于企業(yè)的影響一方面取決于該行業(yè)的特點(diǎn),另外一方面企業(yè)所做出反應(yīng)狀況的不同也會(huì)形成不一樣的結(jié)果。
隨之而來(lái)的就是許多線(xiàn)下業(yè)務(wù)被迫轉(zhuǎn)移線(xiàn)上,然而看起來(lái)只是一場(chǎng)非常簡(jiǎn)單的業(yè)務(wù)遷移,但在后臺(tái)架構(gòu)看來(lái),卻是一場(chǎng)對(duì)企業(yè)自身、以及企業(yè)后臺(tái)面對(duì)流量、并發(fā)與架構(gòu)穩(wěn)定性的挑戰(zhàn)。
首先是業(yè)務(wù)場(chǎng)景的變換。從線(xiàn)下切換至線(xiàn)上,不只是業(yè)務(wù)呈現(xiàn)形式的變更,其更涉及到企業(yè)內(nèi)部更深處的平臺(tái)建設(shè)、流程規(guī)劃、人員培訓(xùn)等一系列內(nèi)容。
其次是現(xiàn)有的技術(shù)能力難以支撐。隨著線(xiàn)下業(yè)務(wù)的大量取消,越來(lái)越多的用戶(hù)開(kāi)始涌入線(xiàn)上平臺(tái),這對(duì)企業(yè)的后端架構(gòu)能力提出了更高的要求,要在能夠穩(wěn)定承受流量高并發(fā)的同時(shí)還能兼顧后臺(tái)性能的穩(wěn)定性。然而這對(duì)眾多專(zhuān)注在線(xiàn)下業(yè)務(wù)的企業(yè)來(lái)說(shuō),要在短時(shí)間內(nèi)把線(xiàn)上平臺(tái)打造為這樣一款高性能的平臺(tái),的確有點(diǎn)難為他們。
這也顯示出當(dāng)下的一個(gè)痛點(diǎn),場(chǎng)景的突然轉(zhuǎn)變驅(qū)使著企業(yè)去選擇具備更加高性能、更加高效的處理平臺(tái),而對(duì)于企業(yè)的現(xiàn)實(shí)情況來(lái)說(shuō),線(xiàn)上的高并發(fā)表示其急需平臺(tái)下的高性能 web 服務(wù)。
而這,恰好是 NGINX 的長(zhǎng)處。為什么這么說(shuō)?因?yàn)橄噍^于傳統(tǒng) ADC,NGINX 具有以下幾點(diǎn)優(yōu)勢(shì):
1、采用事件驅(qū)動(dòng)的異步框架基于異步及非阻塞的事件驅(qū)動(dòng)模型,可以說(shuō)是 NGINX 得以獲得高并發(fā)、高性能的關(guān)鍵因素。因?yàn)橐粋€(gè) HTTP/HTTPS 請(qǐng)求包括多個(gè)階段,每一個(gè)階段在什么時(shí)候發(fā)生是不確定的,這就造成了異步性。每一個(gè)階段的發(fā)生都會(huì)觸發(fā)事件驅(qū)動(dòng)框架,然后交由事件消費(fèi)者處理,也就是說(shuō)一個(gè)事件消費(fèi)者僅僅是處理了一個(gè)請(qǐng)求中的一小部分。NGINX 采用事件驅(qū)動(dòng)的設(shè)計(jì)來(lái)減少進(jìn)程休眠的幾率,從而實(shí)現(xiàn)提高網(wǎng)絡(luò)性能、減少請(qǐng)求延時(shí)以及支撐高并發(fā)的能力。
2、反向代理有正向代理自然就存在反向代理。正向代理是指以請(qǐng)求端也就是客戶(hù)端的角度為正向,用戶(hù)發(fā)出請(qǐng)求經(jīng)過(guò)的代理,稱(chēng)為“正向代理”。反向代理則恰恰相反,是由代理選擇服務(wù)端節(jié)點(diǎn)。存在即合理,反向代理的存在也表明其擁有著不可替代優(yōu)勢(shì):
-
首先能夠通過(guò)隱藏服務(wù)節(jié)點(diǎn)的 IP 來(lái)保護(hù)服務(wù)安全,此外也可以通過(guò)將服務(wù)節(jié)點(diǎn)置于防火墻之后來(lái)確保業(yè)務(wù)節(jié)點(diǎn)服務(wù)器不會(huì)被直接攻擊到。
-
其次反向代理可以讓服務(wù)節(jié)點(diǎn)更加專(zhuān)注于業(yè)務(wù),一些 HTTPS、壓縮等于業(yè)務(wù)無(wú)關(guān)的能力可以交由反向代理服務(wù)器去實(shí)現(xiàn),從而避免浪費(fèi)業(yè)務(wù)服務(wù)節(jié)點(diǎn)處理請(qǐng)求的能力。
-
最后反向代理服務(wù)器能夠提供額外的緩存機(jī)制,將一些短時(shí)間內(nèi)不會(huì)變化的動(dòng)態(tài)內(nèi)容儲(chǔ)存在緩存中,降低業(yè)務(wù)服務(wù)器的請(qǐng)求量;
正是由于 NGINX 引入了反向代理的特性,讓請(qǐng)求和響應(yīng)都要經(jīng)過(guò) NGINX,因此也給 NGINX 帶來(lái)了諸如負(fù)載均衡、HTTP 緩存等能力。
3、負(fù)載均衡“準(zhǔn)備超越當(dāng)前 ADC 的功能了嗎?”這是在 NGINX 官網(wǎng)負(fù)載均衡功能介紹頁(yè)面非常醒目的一句話(huà),這無(wú)疑顯示了 NGINX 在這方面的雄厚實(shí)力與決心。負(fù)載均衡就是將請(qǐng)求“均衡”地分配到多臺(tái)業(yè)務(wù)節(jié)點(diǎn)服務(wù)器上。這里的“均衡”是依據(jù)實(shí)際場(chǎng)景和業(yè)務(wù)需要而定的。對(duì)于 NGINX 來(lái)說(shuō),請(qǐng)求到達(dá) NGINX,NGINX 作為反向代理服務(wù)器,有絕對(duì)的決策權(quán),可以按照規(guī)則將請(qǐng)求分配給它知道的節(jié)點(diǎn)中的一個(gè),通過(guò)這種分配,使得所有節(jié)點(diǎn)需要處理的請(qǐng)求量處于相對(duì)平均的狀態(tài),從而實(shí)現(xiàn)負(fù)載均衡。
4、HTTP 緩存瀏覽器緩存是前端開(kāi)發(fā)中經(jīng)常遇到的問(wèn)題,它是提升性能同時(shí)減少服務(wù)器壓力的有效手段之一。NGINX 可以作為靜態(tài)頁(yè)面的 web 服務(wù)器,同時(shí)還支持 CGI 協(xié)議的動(dòng)態(tài)語(yǔ)言,比如 perl、PHP 等。
而綜合上述總結(jié)的幾點(diǎn) NGINX 優(yōu)勢(shì),NGINX 無(wú)疑是最合適的那個(gè)打造高性能平臺(tái)的工具。然而雖然它很火,但往往流行程度和開(kāi)發(fā)者的掌握程度是不相等的。尤其是在眾多業(yè)務(wù)轉(zhuǎn)型線(xiàn)上,越來(lái)越多的企業(yè)認(rèn)識(shí)到 NGINX 對(duì)于業(yè)務(wù)支撐的重要性,作為開(kāi)發(fā)者,掌握 NGINX 開(kāi)發(fā)能力似乎已經(jīng)成為了“必修課”。
然而開(kāi)發(fā)者在應(yīng)用 NGINX 的過(guò)程中往往會(huì)遇到各種問(wèn)題,國(guó)內(nèi) NGINX 技術(shù)專(zhuān)家陶輝曾經(jīng)總結(jié)過(guò),大多數(shù)人使用 NGINX 都停留在這幾個(gè)級(jí)別:
-
第一種:使用 NGINX 配置最簡(jiǎn)單的反向代理服務(wù)或者靜態(tài)資源服務(wù),當(dāng)擴(kuò)展功能時(shí)發(fā)現(xiàn)新增的指令 NGINX 不支持,但又不懂如何增加 NGINX 模塊,如何分析 access 日志。
-
第二種:可以根據(jù)源碼定制安裝 NGINX,對(duì)網(wǎng)上流傳的大眾配置做一些個(gè)性化的修改,但遇到修改 proxy_pass 后的 URL 上游服務(wù)不正常等問(wèn)題時(shí)就束手無(wú)策,不清楚 NGINX 各個(gè)目錄的意義,也不清楚 NGINX 的進(jìn)程結(jié)構(gòu)。
-
第三種:能夠順暢地使用 NGINX 的常用功能,但不清楚第三方模塊發(fā)生沖突時(shí)的解決方案、stale 過(guò)期緩存的用法、NGINX 諸多變量是如何被賦值的、聽(tīng)說(shuō) if 指令是邪惡的卻不知道它的設(shè)計(jì)理念及正確用法等等。
-
第四種:可以正確地使用 NGINX 的功能及第三方模塊,并按照網(wǎng)絡(luò)上常見(jiàn)的優(yōu)化參數(shù)優(yōu)化性能,但對(duì)如何系統(tǒng)化地優(yōu)化性能沒(méi)有頭緒,對(duì)于 NGINX、Linux 提供的內(nèi)存緩沖區(qū)、網(wǎng)絡(luò)類(lèi)等諸多指令和參數(shù)的優(yōu)化沒(méi)有頭緒。
-
第五種:可以熟練使用 NGINX,但對(duì)各第三方功能模塊如何與 NGINX 結(jié)合使用以及對(duì) NGINX 性能影響不太清楚,對(duì) NGINX 源碼的理解沒(méi)有達(dá)到由點(diǎn)到面的程度。
但這還只是冰山一角,NGINX 技術(shù)所涵蓋的范圍之廣超出我們每一個(gè)人的想象。作為一款全球最受歡迎的開(kāi)源產(chǎn)品之一,NGINX 的一舉一動(dòng)都受到了來(lái)自全球開(kāi)發(fā)者的重點(diǎn)關(guān)注。
二、NGINX 在中國(guó)又有大動(dòng)作了
2020 年 5 月 20 日(星期三),F(xiàn)5 以線(xiàn)上峰會(huì)的形式召開(kāi) F5 Code to Customer 2020 代碼到用戶(hù)暨 F5 中國(guó) 20 周年紀(jì)念慶典。屆時(shí),各位 NGINX 開(kāi)發(fā)者心目中的偶像 NGINX 創(chuàng)始人 Igor Sysoev 以及國(guó)內(nèi) NGINX 技術(shù)專(zhuān)家陶輝老師將空降大會(huì)現(xiàn)場(chǎng),從 NGXIN 創(chuàng)始人的成長(zhǎng)經(jīng)歷出發(fā),幫助每一位開(kāi)發(fā)者來(lái)重新理解 NGINX 的前世今生。
另外,備受開(kāi)發(fā)者關(guān)注的 NGXIN 開(kāi)源社區(qū)也將在大會(huì)現(xiàn)場(chǎng)正式成立。至此,NGINX 開(kāi)發(fā)者終于有一個(gè)官方的“家”。此外本次大會(huì)更設(shè)有 5 大技術(shù)專(zhuān)題論壇、30+ 技術(shù)內(nèi)容深度解讀以及 100+ 解決方案,足以滿(mǎn)足你對(duì)數(shù)字轉(zhuǎn)型技術(shù)趨勢(shì)的渴望。
三、關(guān)于 NGINX 中國(guó)開(kāi)源社區(qū)
NGINX 開(kāi)源社區(qū)是 F5/NGINX 面向所有 NGINX 用戶(hù)的官方社區(qū)。我們秉持“開(kāi)放,包容,溝通,貢獻(xiàn)“ (open,inclusive,connect,contribution) 之宗旨,與業(yè)界共建開(kāi)放、包容、活躍的“NGINX 用戶(hù)之家“;秉承開(kāi)源的精神,在社區(qū)治理上高度開(kāi)放,為所有 NGINX 的用戶(hù),開(kāi)發(fā)者和技術(shù)愛(ài)好者,提供一個(gè)方便學(xué)習(xí)、討論的場(chǎng)所。也期待您成為此社區(qū)中活躍的一員,貢獻(xiàn)您的文章,博客,代碼,踴躍討論與回答問(wèn)題,打造您個(gè)人品牌和影響力。
2019 年 3 月,云計(jì)算和安全應(yīng)用服務(wù)公司 F5 Networks Inc 宣布收購(gòu) NGINX,NGINX 是應(yīng)用交付領(lǐng)域的開(kāi)源領(lǐng)導(dǎo)者。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!





