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