摘? 要:互聯(lián)網(wǎng)產(chǎn)品隨著經(jīng)濟(jì)的快速發(fā)展越來(lái)越深地融入進(jìn)普通人的生活,網(wǎng)民的數(shù)量激增,各網(wǎng)站的訪問(wèn)數(shù)字也呈逐年上升的態(tài)勢(shì)。但是由于各個(gè)地區(qū)網(wǎng)民人數(shù)的差異加上經(jīng)濟(jì)水平的不同,傳統(tǒng)的負(fù)載均衡策略存在改進(jìn)的空間,該文針對(duì)如何平衡負(fù)載進(jìn)行了研究,分析了Nginx系統(tǒng)的現(xiàn)狀,提供了負(fù)載均衡算法,以優(yōu)化Nginx的性能。
關(guān)鍵詞:Nginx? Web服務(wù)器? 性能優(yōu)化? 負(fù)載均衡
中圖分類(lèi)號(hào):TP393? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號(hào):1672-3791(2019)04(b)-0017-02
1? Nginx的研究現(xiàn)狀
Nginx是俄羅斯人塞索耶夫所撰寫(xiě)的涉及到HTTP服務(wù)器的一款反向代理軟件,是一種和POP3、SMTP、IMAP相同的代理服務(wù)器。雖然這款服務(wù)器產(chǎn)生和發(fā)展的時(shí)間都不夠長(zhǎng),但是這種服務(wù)器已經(jīng)具備了一些鮮明的特點(diǎn),使得其穩(wěn)定性和高消耗性能夠滿足開(kāi)源和代碼編寫(xiě)的基本需求,所以這種服務(wù)器在很多開(kāi)發(fā)人員當(dāng)中受到歡迎,一些公司也大量采用,NGXPAGESPEED是一種谷歌借助Nginx所開(kāi)發(fā)的模塊,這種模塊飛速地提升了網(wǎng)頁(yè)打開(kāi)的速度,并且可以幫助網(wǎng)頁(yè)降低訪問(wèn)的延遲。Nginx在我國(guó)的應(yīng)用非常廣泛,已經(jīng)有了大量的人員在研究這些項(xiàng)目,并且根據(jù)這個(gè)模塊開(kāi)發(fā)出了不同的項(xiàng)目。針對(duì)大量網(wǎng)站的訪問(wèn)申請(qǐng),在這個(gè)平臺(tái)的基礎(chǔ)上,增加上更具特色的功能和特性,可以基本實(shí)現(xiàn)負(fù)載均衡。關(guān)于負(fù)載均衡的研究一直是這個(gè)領(lǐng)域的特色所在,相同的領(lǐng)域也一直有不同的算法被開(kāi)發(fā)出來(lái),分布式計(jì)算和云計(jì)算相關(guān)的新算法不斷被研究出來(lái),在這個(gè)領(lǐng)域形成了鮮明的特色,節(jié)點(diǎn)和負(fù)載的性能經(jīng)常影響負(fù)載的衡量和權(quán)重,負(fù)載的值如果非常大,那么其權(quán)重一般也非常大。Nginx已經(jīng)在俄羅斯的門(mén)戶網(wǎng)站www.rambler.ru上運(yùn)行了多年,有超過(guò)20%的虛擬主機(jī)平臺(tái)選用了Nginx為反向代理服務(wù)器。我國(guó)也已經(jīng)有新浪博客、網(wǎng)易新聞、金山詞霸等多家網(wǎng)站選用了這種服務(wù)器。塞索耶夫?qū)㈤_(kāi)源的代碼以類(lèi)似于BSD許可證的方法發(fā)布,Nginx由于性能非常穩(wěn)定,功能方面具有富集效應(yīng),在配置基礎(chǔ)文件和系統(tǒng)資源的時(shí)候功率消耗比較低,和Nginx負(fù)載相關(guān)的均衡計(jì)算研究方法的類(lèi)型之中,很多內(nèi)容集中在服務(wù)器集群之上,根據(jù)算法和配置文件的不同,內(nèi)置的算法有不同的類(lèi)型,加權(quán)輪詢的算法也是其中的一個(gè)種類(lèi),一致性哈希算法也算是其中的一種。
2? 負(fù)載均衡的概念
負(fù)載均衡是針對(duì)現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)提出來(lái)的概念,提供了一種廉價(jià)而高效的方法,建立在現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)之上,可以增加網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬,增強(qiáng)網(wǎng)絡(luò)內(nèi)容的吞吐量,強(qiáng)化網(wǎng)絡(luò)的數(shù)據(jù)處理能力,提升網(wǎng)絡(luò)服務(wù)的靈活性和可用性。負(fù)載均衡一般是通過(guò)硬件實(shí)現(xiàn)的,有時(shí)也可以通過(guò)軟件實(shí)現(xiàn),負(fù)載均衡可以提升網(wǎng)絡(luò)處理數(shù)據(jù)的靈活性和可靠性。軟件負(fù)載均衡是通過(guò)一臺(tái)或多臺(tái)服務(wù)器的相互連接,在操作系統(tǒng)之上加裝附加軟件來(lái)實(shí)現(xiàn)負(fù)載均衡,優(yōu)點(diǎn)是可以根據(jù)特定環(huán)境的不同,進(jìn)行簡(jiǎn)單配置、靈活操作,由于成本低廉,可以基本滿足一般的負(fù)載均衡需求,硬件的負(fù)載均衡解決方案是在服務(wù)器和外部網(wǎng)絡(luò)之上加載負(fù)載均衡的設(shè)備,我們將這種設(shè)備稱(chēng)為負(fù)載均衡器,可以由專(zhuān)門(mén)的設(shè)備完成相應(yīng)的任務(wù),這些設(shè)備獨(dú)立于操作系統(tǒng)之外,整體性能可以獲得提升。根據(jù)多樣化的負(fù)載均衡策略,進(jìn)行智能化的流量管理升級(jí),可以達(dá)到最佳的負(fù)載均衡要求。一般來(lái)說(shuō),硬件的負(fù)載均衡會(huì)優(yōu)于軟件的負(fù)載均衡,硬件的負(fù)載均衡在功能和性能方面要優(yōu)于軟件,但是硬件更加昂貴。現(xiàn)代化的負(fù)載均衡技術(shù)通常在網(wǎng)絡(luò)的第四層次或者第七層次,四層的負(fù)載均衡是將Internet 上的合法IP地址映射到多個(gè)服務(wù)器之上,最終達(dá)到負(fù)載均衡的目的。七層的負(fù)載均衡是控制應(yīng)用層的內(nèi)容,可以提供一種針對(duì)流量的訪問(wèn)控制模式。針對(duì)HTTP服務(wù)器的應(yīng)用指標(biāo),第七層的負(fù)載均衡技術(shù)可以通過(guò)HTTP的報(bào)頭,根據(jù)報(bào)頭的內(nèi)容實(shí)現(xiàn)負(fù)載均衡的操作。
3? 和Nginx相關(guān)的負(fù)載均衡算法
與Nginx有關(guān)聯(lián)的負(fù)載均衡算法的種類(lèi)非常多,負(fù)載均衡所要達(dá)到的目標(biāo)就是通過(guò)并發(fā)的方式,將不同的請(qǐng)求分配給集群服務(wù)器,根據(jù)算法內(nèi)置的差異,可以將內(nèi)置算法分成不同的種類(lèi),分別是擴(kuò)展算法和內(nèi)置算法。加權(quán)輪詢的算法模式一般都被認(rèn)為是內(nèi)置算法的一個(gè)種類(lèi),哈希性算法一般被認(rèn)為是擴(kuò)展算法的一個(gè)種類(lèi)。
3.1 加權(quán)輪詢的算法
在設(shè)置與負(fù)載均衡有關(guān)的算法的時(shí)候,根據(jù)負(fù)載均衡是默認(rèn)值還是輪詢算法的不同,考慮到加權(quán)輪詢算法的缺點(diǎn),根據(jù)輪詢算法的重復(fù)方面的配置問(wèn)題,服務(wù)器的真實(shí)性能可能會(huì)難以保證,由于客戶端對(duì)于客戶的請(qǐng)求的處理方法會(huì)有不一致的地方,因此會(huì)產(chǎn)生一些均衡方面的差異,導(dǎo)致一些服務(wù)器的比重出現(xiàn)增大的狀況。很多用戶會(huì)因此出現(xiàn)長(zhǎng)時(shí)間等待的問(wèn)題,如果出現(xiàn)了新的請(qǐng)求需要處理的問(wèn)題,還涉及到某類(lèi)服務(wù)器的比重過(guò)大的問(wèn)題,新的請(qǐng)求在這種狀態(tài)下就會(huì)被要求分給服務(wù)器。服務(wù)器在負(fù)荷較大的情況下可能會(huì)出現(xiàn)超載的問(wèn)題,但是其他的一些服務(wù)器在這個(gè)時(shí)候可能會(huì)遇到請(qǐng)求需要處理的情況。
3.2 一致性哈希算法
這種算法的原理是根據(jù)服務(wù)器地址的不同,按照一定的規(guī)則進(jìn)行分配,分配的方法類(lèi)似于路由分配表,根據(jù)服務(wù)器承載的服務(wù)的類(lèi)型進(jìn)行區(qū)分,將同樣的內(nèi)容分配到一致性的哈希表當(dāng)中,如果有新的數(shù)據(jù)請(qǐng)求需要進(jìn)行處理,可以根據(jù)哈希表之中的數(shù)據(jù)順序進(jìn)行處理,選擇最新的服務(wù)器來(lái)對(duì)請(qǐng)求進(jìn)行處理。哈希算法的優(yōu)點(diǎn)是可以將服務(wù)器的地址按照一定的規(guī)則進(jìn)行處理,快速地尋找到存儲(chǔ)這種數(shù)據(jù)類(lèi)型的服務(wù)器,但是這樣的設(shè)置也有一些缺點(diǎn),比如根據(jù)路由狀態(tài)的不同所形成的哈希表,會(huì)和一些服務(wù)器分屬于不同的緩存服務(wù)器,在這樣的情況下會(huì)因?yàn)镮P段的請(qǐng)求的種類(lèi)不同,分配一些不同的內(nèi)容于服務(wù)器之上。
4? Nginx負(fù)載均衡的優(yōu)點(diǎn)和環(huán)境適應(yīng)性
4.1 Nginx負(fù)載均衡的優(yōu)點(diǎn)
Nginx負(fù)載均衡的現(xiàn)實(shí)環(huán)境情況較為簡(jiǎn)單,可配置性比較強(qiáng),根據(jù)URL進(jìn)行的負(fù)載均衡,默認(rèn)后端進(jìn)行健康檢查的性能,后端機(jī)器在較少的情況之下,負(fù)載均衡的表現(xiàn)能力較強(qiáng),優(yōu)點(diǎn)主要有如下幾點(diǎn)。(1)負(fù)載的功能強(qiáng)大,同時(shí)支持高端并發(fā)的連接,實(shí)現(xiàn)的內(nèi)存消耗較少,測(cè)試的時(shí)候得到了5萬(wàn)并發(fā)的連接,實(shí)際的運(yùn)行環(huán)境之中進(jìn)行3萬(wàn)發(fā)的并發(fā)連接下,進(jìn)行10個(gè)Nginx的進(jìn)程所消耗掉的內(nèi)存也僅僅只有150MB。(2)成本造價(jià)低廉,Nginx為開(kāi)源的軟件,所以可以進(jìn)行免費(fèi)試用,成本造價(jià)方面有優(yōu)勢(shì)。(3)由于Nginx工作在網(wǎng)絡(luò)的第七層級(jí)之上,因此針對(duì)HTTP本身的分流策略而言,可以對(duì)域名、目錄結(jié)構(gòu)等實(shí)現(xiàn)分流,實(shí)現(xiàn)多種策略的分配,比如說(shuō)可以針對(duì)IP Hsh的分配策略實(shí)現(xiàn)均衡分配。
4.2 環(huán)境適應(yīng)性
七層次的均衡分配各自有其突出特點(diǎn),主要表現(xiàn)在如下一些方面。(1)對(duì)HTTP的報(bào)頭進(jìn)行檢查,可以檢測(cè)到HTTP400和HTTP500系列的錯(cuò)誤數(shù)值信息,可以實(shí)現(xiàn)透明且連續(xù)的重新定位到新的服務(wù)器,避免出現(xiàn)應(yīng)用層次的故障。(2)根據(jù)數(shù)據(jù)類(lèi)型的不同,對(duì)不同類(lèi)型的數(shù)據(jù)包,流入圖像文件、壓縮文件和多媒體文件等不同格式的文件進(jìn)行分類(lèi),根據(jù)數(shù)據(jù)流行的指引來(lái)對(duì)服務(wù)器的內(nèi)容進(jìn)行處理,如此可以提升系統(tǒng)的性能。(3)根據(jù)連接請(qǐng)求的類(lèi)型不同,對(duì)普通文本以及圖像等靜態(tài)的內(nèi)容進(jìn)行處理,不論是CGI還是ASP等動(dòng)態(tài)的文檔請(qǐng)求,都可以指引向特定的服務(wù)器,從而提升系統(tǒng)整體的安全性。(4)Nginx對(duì)于網(wǎng)絡(luò)的依賴(lài)性特別小,只有通過(guò)Ping上可以行得通,網(wǎng)頁(yè)訪問(wèn)可以正常,Nginx就可以正常連接,Nginx同時(shí)還能對(duì)內(nèi)外網(wǎng)進(jìn)行區(qū)分,如果是同時(shí)用于許多的外網(wǎng)節(jié)點(diǎn),可以根據(jù)單機(jī)對(duì)設(shè)備的路線進(jìn)行分配。(5)Nginx對(duì)于網(wǎng)絡(luò)的要求比較簡(jiǎn)單,轉(zhuǎn)向業(yè)務(wù)配置分類(lèi)之后的操作較為靈活,進(jìn)行文件配置也操作簡(jiǎn)便,風(fēng)格和普通程序一樣比較容易弄懂,測(cè)試起來(lái)也非常方便,同時(shí)可以及時(shí)地對(duì)錯(cuò)誤日志進(jìn)行打印操作。(6)Nginx所承受的高負(fù)載具有穩(wěn)定性,可以用于反向代理,出現(xiàn)宕機(jī)的概率也比較小。(7)通過(guò)Nginx可以檢測(cè)服務(wù)器內(nèi)部出現(xiàn)的故障,可以根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的代碼狀態(tài)和是否超時(shí)等因素進(jìn)行判斷,把返回的錯(cuò)誤請(qǐng)求提交關(guān)鍵節(jié)點(diǎn),內(nèi)置的健康檢查功能也可以嘗試運(yùn)用,有時(shí)還具有消滅冗余的功能,在針對(duì)后端返回的情況處理的判斷之中,可以嘗試運(yùn)用Nginx進(jìn)行Web服務(wù)器的宕機(jī)測(cè)試,也不會(huì)影響前端的訪問(wèn)。(8)更加節(jié)省帶寬,由于是通過(guò)GZIP進(jìn)行的壓縮,所以可以添加游覽器的header本地接頭。
5? Nginx的性能優(yōu)化
Nginx一般支持正規(guī)的表達(dá)方式,配置非常靈活,是一種高性能的Web服務(wù)器,針對(duì)Nginx的性能進(jìn)行優(yōu)化的時(shí)候,一般只有一個(gè)配置的選項(xiàng),可以在更改之后再次更改回原來(lái)的數(shù)值。如下幾個(gè)方面需要特別關(guān)注:(1)控制進(jìn)程數(shù)量的創(chuàng)制過(guò)程中,Nginx可以實(shí)現(xiàn)工作進(jìn)程的多個(gè)進(jìn)程的同時(shí)運(yùn)用,很多工作都可以實(shí)現(xiàn)對(duì)大量的鏈接數(shù)量的快速處理,Nginx可以通過(guò)主進(jìn)程對(duì)工作進(jìn)行某些方面的創(chuàng)建,很多數(shù)值都是通過(guò)文件配置的方式將Nginx當(dāng)中的文件進(jìn)行清理,如果出現(xiàn)數(shù)值比較低的狀況,會(huì)根據(jù)數(shù)據(jù)的有效處理的請(qǐng)求進(jìn)行分配。如果設(shè)置的數(shù)值的區(qū)間比較高,有可能出現(xiàn)工作進(jìn)程處置方面的問(wèn)題,最終出現(xiàn)導(dǎo)致系統(tǒng)的功耗增加的問(wèn)題,產(chǎn)生系統(tǒng)功耗的損失等情況。(2)大多數(shù)工作進(jìn)程都固定在CPU之內(nèi),這樣做的好處是避免了同一個(gè)工作進(jìn)程選擇不同的CPU內(nèi)核。(3)在設(shè)置Nginx模塊的時(shí)候,注意進(jìn)程可以打開(kāi)的最大文件數(shù)的設(shè)置,如果這個(gè)數(shù)值設(shè)置得比較低,同時(shí)打開(kāi)多個(gè)進(jìn)程數(shù)的時(shí)候,會(huì)出現(xiàn)打開(kāi)的文件過(guò)多的提示。
6? 結(jié)語(yǔ)
國(guó)外的技術(shù)人員對(duì)于Nginx的研究逐步深入,這個(gè)技術(shù)的穩(wěn)定性、安全性和高效性兼具的特點(diǎn)使其值得進(jìn)行大范圍的應(yīng)用,我國(guó)的科技人員對(duì)該技術(shù)的研究也勢(shì)必大大增強(qiáng)。
參考文獻(xiàn)
[1] 劉暢.以NGINX為核心優(yōu)化掌端用戶使用體驗(yàn)[J].江西通信科技,2019(1):17-20.
[2] 黎宇.Nginx在不同網(wǎng)絡(luò)域名訪問(wèn)中的應(yīng)用[J].通訊世界,2019,26(2):88-89.
①作者簡(jiǎn)介:周潮(1996,7—),男,漢族,湖北黃岡人,本科在讀,研究方向:基于nginx的web服務(wù)器負(fù)載均衡策略改進(jìn)與實(shí)現(xiàn)。