摘 要 由于Apache在請(qǐng)求分發(fā)服務(wù)器性能上存在一定的不足,直接影響著高并發(fā)WEB負(fù)載均衡系統(tǒng)的正常運(yùn)行。本文以既有方案為前提,利用Nginx彈性擴(kuò)展構(gòu)架,以及Load Runner與Web Bench工具,測(cè)試了網(wǎng)絡(luò)在線支付系統(tǒng)中的高并發(fā)訪問。據(jù)此可知,通過利用Nginx,服務(wù)器所可以承擔(dān)高并發(fā)訪問量,其能夠提高將近10倍左右,服務(wù)器資源所占比例也明顯下降,用戶訪問WEB應(yīng)用,所需要等待的響應(yīng)時(shí)間在很大程度上縮減。
關(guān)鍵詞 Nginx;高并發(fā)WEB;負(fù)載均衡系統(tǒng);應(yīng)用
1Nginx現(xiàn)狀
Nginx以進(jìn)程和線程為基礎(chǔ)的模型,在進(jìn)行并發(fā)連接處理時(shí),系統(tǒng)會(huì)針對(duì)每個(gè)連接,利用獨(dú)立的進(jìn)程、線程,阻擋在網(wǎng)絡(luò)或者I/O操作方面。切實(shí)根據(jù)應(yīng)用程序的不同,在內(nèi)部與CPU上的使用率都比較低[1]。在生成新進(jìn)程、線程的時(shí)候,需要新的運(yùn)行環(huán)境,其中主要包括堆、棧分配,運(yùn)行上、下文。所以,應(yīng)具備一些額外CPU成本,去創(chuàng)建環(huán)境,太多線程和運(yùn)行上下文不斷切換,會(huì)影響其性能。在應(yīng)用過程中, Apache不能有效面對(duì)高并發(fā)量的請(qǐng)求處理。在這種情況下,盡管服務(wù)器的配置有所增加,并不能帶來顯著成效。而且許多企業(yè)根本沒有能力承擔(dān)服務(wù)器升級(jí)成本,所以,尋求可以代替Apache的方案解決這一現(xiàn)象是非常有必要的[2]。
2Nginx的優(yōu)勢(shì)
(1)可以承受高并發(fā)連接。在一定程度上對(duì)Nginx+php進(jìn)行科學(xué)合理優(yōu)化配置,能夠承受將近3萬以上的并發(fā)連接數(shù)。
(2)內(nèi)存消耗比較少。在應(yīng)用環(huán)境中,單臺(tái)服務(wù)器Nginx+php5處理程序能力,每秒幾乎超出了700次,但是CPU負(fù)載并不是很高。
(3)成本相對(duì)較低。通過開源Nginx進(jìn)行反向代理,以此實(shí)現(xiàn)負(fù)載均衡目標(biāo),大大節(jié)約購置硬件負(fù)載均衡交換工具的運(yùn)行與維護(hù)成本。
(4)可以進(jìn)行熱部署。而且長(zhǎng)時(shí)間運(yùn)行,也不需要重新啟動(dòng),在持續(xù)服務(wù)的狀態(tài)下,升級(jí)軟件。
3高并發(fā)WEB負(fù)載均衡系統(tǒng)后臺(tái)服務(wù)器架構(gòu)
就正常情況而言,高并發(fā)WEB負(fù)載均衡系統(tǒng)后臺(tái)服務(wù)器架構(gòu)主要?jiǎng)澐殖伤拇蟛糠?,具體見圖1所示。從圖中可知,Nginx具有明顯的優(yōu)勢(shì),即支持龐大的連接,并確保數(shù)據(jù)信息傳輸?shù)挠行訹3]。
3.1 Nginx負(fù)載均衡模塊
Nginx負(fù)載均衡模塊是前端服務(wù)器,主要承擔(dān)的責(zé)任是接受客戶端的請(qǐng)求進(jìn)行連接,并發(fā)揮多進(jìn)程模型的作用,有效解決龐大的訪問用戶事務(wù)量,并根據(jù)各種路由措施,把大量用戶請(qǐng)求進(jìn)行均衡,體現(xiàn)到所對(duì)應(yīng)的各種客戶端服務(wù)器上。
3.2 應(yīng)用服務(wù)器邏輯處理模塊
對(duì)所對(duì)應(yīng)的客戶端請(qǐng)求進(jìn)行解析,從中精簡(jiǎn)有效信息,并據(jù)此設(shè)計(jì)具有針對(duì)性的邏輯處理[4]。
3.3 數(shù)據(jù)存儲(chǔ)模塊
數(shù)據(jù)存儲(chǔ)模塊主要?jiǎng)澐譃閮深?,即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。其中,關(guān)系型數(shù)據(jù)庫以數(shù)據(jù)信息所對(duì)應(yīng)的實(shí)體模型為依據(jù),遵守實(shí)體一體化的原則,合理設(shè)計(jì)數(shù)據(jù)庫表。而非關(guān)系型數(shù)據(jù)庫則主要儲(chǔ)存的是非結(jié)構(gòu)化的數(shù)據(jù)信息,通過鍵值對(duì)進(jìn)行提取,以此提高讀取效率和速度[5]。
4高并發(fā)WEB負(fù)載均衡算法
高并發(fā)WEB負(fù)載均衡算法,綜合了服務(wù)器的負(fù)載能力和請(qǐng)求時(shí)間。用戶能夠?qū)ω?fù)載均衡的級(jí)別進(jìn)行自定義,等級(jí)高,所選節(jié)點(diǎn)就會(huì)更準(zhǔn)確,但是,選擇時(shí)間比較長(zhǎng)。其一,高并發(fā)WEB負(fù)載均衡算法能夠查詢空閑服務(wù)器是否存在,存在那么就發(fā)送請(qǐng)求到服務(wù)器,不存在則會(huì)對(duì)服務(wù)器的負(fù)載能力、請(qǐng)求時(shí)間間隔、既定時(shí)間內(nèi)服務(wù)器請(qǐng)求失敗的次數(shù)等各種影響因素進(jìn)行綜合考慮,以此優(yōu)化選擇。其中,實(shí)現(xiàn)函數(shù)是ngx_http_upstream_init_fair,nreq為服務(wù)器負(fù)載請(qǐng)求,delta是請(qǐng)求時(shí)間間隔,而評(píng)分宏和負(fù)載請(qǐng)求次數(shù)、失敗次數(shù)之間是負(fù)相關(guān)的關(guān)系,但是和請(qǐng)求間隔、服務(wù)器總負(fù)載能力之間則是正相關(guān)的關(guān)系。所以,負(fù)載請(qǐng)求越少,則越好,在相同的請(qǐng)求次數(shù)下,上次間隔越大,那么分?jǐn)?shù)就會(huì)越好。其二,高并發(fā)WEB負(fù)載均衡算法具備自動(dòng)調(diào)用優(yōu)化功能,在函數(shù)ngx_http_upstream_fair_try_peer中可以實(shí)現(xiàn),在失敗次數(shù)太多時(shí),函數(shù)則會(huì)自行進(jìn)行參數(shù)更新,選擇最佳服務(wù)器。服務(wù)器參數(shù)保存到紅黑樹中去,可以確保加載參數(shù)實(shí)現(xiàn)算法的效率[6],具體流程如圖2。
5結(jié)束語
綜上所述,Nginx具有其自身的獨(dú)特優(yōu)勢(shì),因此,在高并發(fā)WEB負(fù)載均衡系統(tǒng)中備受青睞。在實(shí)際的生產(chǎn)環(huán)境使用中,利用Nginx能夠有效解決Apache前端請(qǐng)求分發(fā)問題。Nginx彈性擴(kuò)展結(jié)構(gòu)不僅可以應(yīng)用于JAVAEE軟件系統(tǒng),也適用于PHP、Python等語言實(shí)現(xiàn)的大中型軟件系統(tǒng)。
參考文獻(xiàn)
[1] 陳沛,馬衛(wèi)東.一種基于Nginx的負(fù)載均衡算法實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2017,25(19):19-22.
[2] 劉卓,張向利.基于Nginx的負(fù)載均衡集群設(shè)計(jì)與實(shí)現(xiàn)[J].桂林電子科技大學(xué)學(xué)報(bào),2017(6):490-493.
[4] 張煒森,陳濤,李康.Nginx高并發(fā)負(fù)載均衡原理與策略比較研究[J].工業(yè)控制計(jì)算機(jī),2018(1):85-86,89.
[5] 徐長(zhǎng)君,林濤.基于Nginx的負(fù)載均衡方式優(yōu)化[J].河北工業(yè)大學(xué)學(xué)報(bào),2016,45(6):48-52.
[6] 覃川.基于Nginx的Web服務(wù)器負(fù)載均衡策略改進(jìn)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2017.
作者簡(jiǎn)介
李慧穎(1980-),女,北京人;畢業(yè)院校:北京郵電大學(xué),專業(yè):軟件工程,學(xué)歷:本科,現(xiàn)就職單位:北京信息職業(yè)技術(shù)學(xué)院,研究方向:網(wǎng)絡(luò)操作系統(tǒng)。