999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于Nginx的負載均衡算法實現(xiàn)

2017-10-12 06:57:59馬衛(wèi)東
電子設(shè)計工程 2017年19期
關(guān)鍵詞:進程系統(tǒng)

陳 沛,馬衛(wèi)東

(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.光迅科技股份有限公司 湖北 武漢 430205)

一種基于Nginx的負載均衡算法實現(xiàn)

陳 沛1,馬衛(wèi)東2

(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.光迅科技股份有限公司 湖北 武漢 430205)

為了滿足日益增長的網(wǎng)站訪問量對服務(wù)器的需求,提出了一種基于Nginx的負載均衡算法,并完成算法的軟件實現(xiàn)。該算法能在高并發(fā)的情況下選擇合適的后臺服務(wù)器,充分利用硬件資源,減少系統(tǒng)阻塞或延時。測試結(jié)果表明,相比Nginx自帶的負載均衡算法,該算法處理連接的速率更高,穩(wěn)定性更好,達到了設(shè)計要求。

Nginx;負載均衡算法;Linux;性能提升

Abstract:In order to satisfy the increasing access number to the Web server,a load balancing algorithm based on Nginx is designed in this paper.The algorithm can choose the appropriate server in high concurrency situation,make full use of the hardware resources and reduce the system blocking or delay.The experimentshow that the algorithm is able to deal with connections faster with smaller error ratiocompared to the Nginx load balancing algorithm,and achieve the design requirement.

Key words:Nginx;load balance algorithm;Linux;performance improvement

隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)用戶和網(wǎng)絡(luò)資源訪問都呈爆發(fā)式增長,越來越多的網(wǎng)絡(luò)服務(wù)器工作在高并發(fā)訪問環(huán)境下,由此帶來處理器的高負荷工作和繁忙的IO處理[1],單純的升級服務(wù)器硬件只能在一定程度上緩解此問題。而負載均衡機制能夠在現(xiàn)有硬件資源之上,將任務(wù)分攤到多個后臺服務(wù)器上共同進行工作,它提供了一種廉價有效透明的方法擴展服務(wù)器的并發(fā)訪問能力,避免系統(tǒng)阻塞[2]。其中,負載均衡算法的實現(xiàn)直接影響著服務(wù)器的性能表現(xiàn),可見,對服務(wù)器負載均衡算法的研究變得尤為重要。為了實現(xiàn)對服務(wù)器的準確選擇,提出并設(shè)計了一種基于Nginx的負載均衡模塊。該系統(tǒng)能夠完成對其準確測試。

1 Nginx簡介

Nginx是一款輕量級的Web服務(wù)器、反向代理服務(wù)器及電子郵件服務(wù)器。著名的Apache服務(wù)器會對每個請求都會使用一個進程處理請求,當用戶請求量多的時候,處理進程也會大量增加,對系統(tǒng)的資源消耗較多,這樣就導(dǎo)致了對服務(wù)器的高內(nèi)存和CPU占用,這也就是為什么我們稱Apache為重量級服務(wù)器[3]。相對的,由于Http請求的大部分時間都在等待響應(yīng),Nginx的原理則是當連接狀態(tài)改變的時候,服務(wù)器的事件分發(fā)器將被喚醒處理連接的變化,其他時間去處理別的請求,所以服務(wù)器只需要一個進程就能夠處理大量的連接請求[3]。

如圖1所示,Nginx默認是以多進程的方式來工作的。啟動后會開啟一個master進程和多個worker進程,master進程主要用來管理worker進程,接收來自外界的信號,向各worker進程發(fā)送信號,監(jiān)控worker進程的運行狀態(tài),worker進程才開始真正處理請求,各個worker進程之間是相互獨立對等的。一個請求只可能在一個worker進程中處理[4]。

Nginx采用了異步非阻塞的方式來處理請求,在Linux中使用Epoll系統(tǒng)調(diào)用來同時監(jiān)控多個事件,如果有事件準備好了就返回,worker進程開始處理請求。當事件沒有準備好時,放到Epoll里面等待喚醒,這樣就可以處理大量的并發(fā)了。與多線程相比,這種事件處理方式是有很大的優(yōu)勢的,不需要創(chuàng)建線程,每個請求占用的內(nèi)存也很少,沒有上下文切換,更多的并發(fā)數(shù),只是會增加一點內(nèi)存而已。

圖1 Nginx架構(gòu)圖

另外,Nginx具有很好的可擴展性,它提供了一個接口供第三方模塊的開發(fā),因此可以比較方便的基于Nginx實現(xiàn)本文的負載均衡算法。具體方法如下:

1)定義commands數(shù)組并添加到ngx_module_t結(jié)構(gòu)體中;

2)編寫解析模塊配置的方法ngx_http_mytest;

3)定義ngx_module_t結(jié)構(gòu)體中的 ctx接口供Http框架初始化;

4)編寫處理請求并返回響應(yīng)的函數(shù)ngx_http_mytest_handler,在函數(shù)內(nèi)實現(xiàn)算法;

完成上面四步之后,一個模塊就被添加到Nginx中,只需要編譯運行就可以實現(xiàn)模塊的功能[4]。

2 負載均衡簡介

服務(wù)器的負載均衡表示的是多臺服務(wù)器以對稱的方式組成一個服務(wù)器,每臺服務(wù)器的地位都相同,都可以獨立對外提供服務(wù)。每當有新的請求來到的時候,負載均衡算法通過計算,選擇出對稱結(jié)構(gòu)中最適合處理這個請求的一臺服務(wù)器,將請求分配到這臺服務(wù)器上,而接受到請求的服務(wù)器將獨立的回應(yīng)用戶的請求。負載均衡在Nginx中的表現(xiàn)則是通過算法選擇合適的worker進程來處理請求[5]。

負載均衡的實現(xiàn)方式分為軟件負載均衡、硬件負載均衡、局部負載均衡、全局負載均衡、靜態(tài)負載均衡、動態(tài)負載均衡等[6],Nginx支持的幾種負載均衡策略包括:

1)輪詢法:每個請求按時間順序循環(huán)分配到不同的后端服務(wù)器,這個是Nginx默認的算法。

2)權(quán)重法:根據(jù)不同權(quán)重來選擇服務(wù)器,服務(wù)器的權(quán)重可以手動靜態(tài)設(shè)置,也可以動態(tài)更新,最終服務(wù)器處理請求數(shù)目的比例正比于權(quán)重,這種方式用于后端服務(wù)器性能不均的情況。

3)ip_hash法:每個請求按訪問IP的hash結(jié)果分配,這種情況下每個用戶有固定的后端服務(wù)器,可以解決session問題。

4)url_hash法:按訪問請求的網(wǎng)址的hash結(jié)果來分配請求,不同的url指向不同的服務(wù)器,當后端服務(wù)器開啟緩存時,這種算法比較有效[7]。

總之,設(shè)計負載均衡策略需要考慮以下幾點:

1)設(shè)計算法時應(yīng)保證盡量簡單,也許有些算法能更好的分配,但是卻過于復(fù)雜,實現(xiàn)這些算法會導(dǎo)致引入額外的資源消耗,反而引起系統(tǒng)阻塞[8];

2)系統(tǒng)在進行決策時,不僅要考慮當前全局的負載狀態(tài),還要考慮一段時間內(nèi)的負載特性進行決策。由于用戶請求的動態(tài)變化,服務(wù)器系統(tǒng)各處理節(jié)點上的負載也在不斷變化,所以就要求系統(tǒng)能夠根據(jù)某種動態(tài)均衡策略進行服務(wù)節(jié)點負載的均衡,為用戶提供服務(wù)[9];

3)沒有最好的算法,也沒有通用的算法,只有最合適的算法。不同的時間,不同的地區(qū),不同的系統(tǒng),情況都是不一樣的。應(yīng)該綜合考慮這些因素,以適應(yīng)于不同變化的要求。

3 自定義模塊設(shè)計

文中設(shè)計了一種新的負載均衡算法,它是一種綜合服務(wù)器負載能力與請求時間的動態(tài)算法。首先用戶可以自定義負載均衡級別WM_LEVEL,等級越高,計算選擇的節(jié)點就越精確,但是實現(xiàn)選擇的時間越長。

首先算法會查找有沒有空閑服務(wù)器,如果有的話,則把請求發(fā)到服務(wù)器上;如果沒有剩余的空閑服務(wù)器的時候,算法會綜合考慮服務(wù)器的當前負載能力、總負載能力、和上次請求的間隔、一段時間內(nèi)服務(wù)器請求失敗的次數(shù)等等因素進行選擇。算法的實現(xiàn)函數(shù)為ngx_http_upstream_init_fair,其中nreq是服務(wù)器當前承載的請求,delta是距離上一次請求的間隔,評分宏與當前承載請求數(shù)、請求失敗次數(shù)成負相關(guān),與上一次請求間隔、服務(wù)器總負載能力成正相關(guān)。因此當前承載請求越少越優(yōu),相同請求數(shù)下,上一次間隔越大分數(shù)越優(yōu)。

其次,算法還具有自動調(diào)優(yōu)功能,在函數(shù)ngx_http_upstream_fair_try_peer中實現(xiàn),當fail次數(shù)過多的時候,函數(shù)會更新參數(shù),選擇更合適的服務(wù)器;當所有節(jié)點的fail次數(shù)都增加的時候,會更新算法中參數(shù)的系數(shù),使?jié)M足動態(tài)選優(yōu)的要求,當然用戶也可以手動調(diào)用優(yōu)化。另外,服務(wù)器的參數(shù)被保存在紅黑樹中,這樣就可以保證加載參數(shù)實現(xiàn)算法的速度[10]。算法流程圖如圖2所示。

圖2 算法流程圖

4 測試分析

為了保證足夠多的連接數(shù)模擬高并發(fā)訪問情況,需要把內(nèi)存配置的足夠大而CPU資源有限[11]。本次測試的硬件平臺選擇的是。

系統(tǒng)版本:CentOS release 7 x86 64位

Nginx版本:1.9.10

處理器:4核8線程

內(nèi)存容量:16 G

硬盤容量:100 G

網(wǎng)絡(luò)連接:本地連接

在進行測試之前,首先進行Linux系統(tǒng)與Nginx的參數(shù)優(yōu)化[12],如下所示:

worker_processes auto #自動把Nginx進程與處理器綁定

worker_connections 65535 #每個進程允許的最多連接數(shù)

net.ipv4.ip_local_port_range=1024 65000 #允許系統(tǒng)打開的端口范圍。

max_user_processes 65535#系統(tǒng)支持打開的最大文件數(shù)

采用Webbench模擬并發(fā)連接測試,Webbench是有名的網(wǎng)站壓力測試工具,可以向我們展示服務(wù)器的兩項內(nèi)容:每秒鐘相應(yīng)請求數(shù)和每秒鐘傳輸數(shù)據(jù)量。Webbench不但能具有便準靜態(tài)頁面的測試能力,還能對動態(tài)頁面進行測試[13]。

在Linux下安裝好Webbench工具后,啟動Nginx,只需輸入

就可以開始測試,命令中的1000模擬的并發(fā)連接數(shù),30表示測試的持續(xù)時間,后面跟著要訪問的網(wǎng)頁,等待30 s之后就會返回測試每秒鐘相應(yīng)請求數(shù)和每秒鐘傳輸數(shù)據(jù)量。

圖3 Webbench性能測試

在Nginx默認的負載均衡策略下,逐漸增加模擬的并發(fā)連接數(shù),觀察對應(yīng)的請求響應(yīng)速率與連接成功數(shù)[14],觀察規(guī)律,得到結(jié)果如表1;然后,添加自定義的負載均衡模塊,make install編譯安裝之后,再保持同樣的并發(fā)連接數(shù)進行測試,得到結(jié)果如表2所示。

對比兩組數(shù)據(jù),并繪出趨勢圖。可以發(fā)現(xiàn)當并發(fā)連接數(shù)逐漸增加時,系統(tǒng)開始阻塞,處理連接速率降低,請求失敗數(shù)增加。但是在相同的并發(fā)連接數(shù)目下,自定義算法的連接速率大于默認算法,而且隨著并發(fā)連接數(shù)的增加,錯誤頁面比例的增加速率也遠小于默認算法。

表1 默認負載均衡算法測試結(jié)果

表2 自定義負載均衡算法測試結(jié)果

在60 000并發(fā)連接時,自定義負載均衡算法的響應(yīng)速率是默認的3倍,而請求失敗數(shù)只有一半;當連接數(shù)上升至70 000時,默認的算法已經(jīng)阻塞,自定義算法依然能正常工作。

可以得出在相同的硬件上,自定義負載均衡算法能夠容納更多的并發(fā)連接數(shù),而且保持更好的響應(yīng)速度。

圖4 連接速率對比

5 結(jié) 論

文中基于輕量級服務(wù)器Nginx設(shè)計了一種新的動態(tài)負載均衡算法,本算法會優(yōu)先選擇空閑進程,在沒有空閑進程的情況下會綜合考慮服務(wù)器節(jié)點的剩余節(jié)點處理能力、各個后臺服務(wù)器的當前實際負載、進程在某個時間段之間的平均負載,擇優(yōu)選擇后臺進程,避免系統(tǒng)阻塞,保證高并發(fā)能力[15]。測試表明本算法能有效的為請求選擇合適的服務(wù)器,達到負載均衡的效果,相比默認算法能在相同的硬件條件下支持更多的并發(fā)連接數(shù),達到了設(shè)計要求。

圖5 失敗請求數(shù)對比

[1]楊小嬌.輕量級高并發(fā)Web服務(wù)器的研究與實現(xiàn)[D].南京:南京郵電大學(xué),2014.

[2]祝瑞,車敏.基于HTTP協(xié)議的服務(wù)器程序分析[J].現(xiàn)代電子技術(shù),2012(4):117-119,122.

[3]凌質(zhì)億,劉哲星,曹蕾.高并發(fā)環(huán)境下Apache與Nginx的I/O性能比較 [J].計算機系統(tǒng)應(yīng)用,2013(6):204-208.

[4]陶輝.深入理解Nginx:模塊開發(fā)與架構(gòu)解析[M].北京:機械工業(yè)出版社,2013.

[5]蔣文旭.基于Nginx部署環(huán)境的Web加速方案設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2013.

[6]郭平,李琪.基于服務(wù)器負載狀況分類的負載均衡調(diào)度算法[J].華中科技大學(xué)學(xué)報:自然科學(xué)版,2012(S1):62-65.

[7]Bragard Q,Ventreaque A.Global dynamic loadbalancing for decentralised distributed simu-lation[C]. Proceedings of the Winter Simulation Conference,2014:3797-3808.

[8]王紅斌.Web服務(wù)器集群系統(tǒng)的自適應(yīng)負載均衡調(diào)度策略研究[D].長春:吉林大學(xué),2013.

[9]王利萍.基于Nginx服務(wù)器集群負載均衡技術(shù)的研究與改進[D].濟南:山東大學(xué),2015.

[10]王永輝.基于Nginx高性能Web服務(wù)器性能優(yōu)化與負載均衡的改進與實現(xiàn)[D].成都:電子科技大學(xué),2015.

[11]梁明剛,陳西曲.Linux下基于epoll+線程池高并發(fā)服務(wù)器實現(xiàn)研究 [J].武漢工業(yè)學(xué)院學(xué)報,2012(3):54-59.

[12]李杰.一種高性能服務(wù)器的設(shè)計與性能評估[J].軟件,2014(12):88-93.

[13]喬平安,顏景善,周敏.基于Linux系統(tǒng)的構(gòu)建高性能服務(wù)器的研究 [J].計算機與數(shù)字工程,2016(4):653-657.

[14]黃靜,李炳.基于Nginx的Web服務(wù)器性能優(yōu)化研究[J].浙江理工大學(xué)學(xué)報:自然科學(xué)版,2016(4):600-606.

[15]李逍遙.基于LAMP的Web服務(wù)器性能優(yōu)化問題研究與實現(xiàn)[D].北京:北京郵電大學(xué),2015.

Design of a load balancing algorithm based on Nginx

CHEN Pei1,MA Wei-dong2
(1.Wuhan Research Institute of Posts&Telecommunications,Wuhan430074,China;2.Accelink Technologies Co., Ltd., Wuhan430205,China)

TN912

A

1674-6236(2017)19-0019-04

2016-07-25稿件編號201607173

陳 沛(1994—),男,江西吉安人,碩士研究生。研究方向:通信與信息系統(tǒng)、互聯(lián)網(wǎng)技術(shù)。

猜你喜歡
進程系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機系統(tǒng)
ZC系列無人機遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
我國高等教育改革進程與反思
Linux僵死進程的產(chǎn)生與避免
男女平等進程中出現(xiàn)的新矛盾和新問題
主站蜘蛛池模板: 日本亚洲国产一区二区三区| 欧美日韩专区| 色综合久久无码网| 亚洲成人免费看| 久久香蕉国产线看精品| 国产精品无码AV中文| 亚洲一级色| 极品尤物av美乳在线观看| 欧美激情,国产精品| 国产免费久久精品99re丫丫一| 高清码无在线看| 2018日日摸夜夜添狠狠躁| 国产欧美亚洲精品第3页在线| 2021亚洲精品不卡a| 8090午夜无码专区| 精品撒尿视频一区二区三区| 亚洲制服丝袜第一页| 国产在线自乱拍播放| 国产又色又爽又黄| 欧美国产日韩在线| 91精品网站| 全午夜免费一级毛片| 日韩乱码免费一区二区三区| 亚洲中文字幕23页在线| 毛片基地视频| 国产人碰人摸人爱免费视频| 中文无码伦av中文字幕| 国产91精品调教在线播放| 99热最新网址| 国产三区二区| 亚洲中文制服丝袜欧美精品| 久久99蜜桃精品久久久久小说| 亚州AV秘 一区二区三区 | 爱色欧美亚洲综合图区| 免费国产福利| 欧洲极品无码一区二区三区| 久久久久亚洲AV成人人电影软件| 另类欧美日韩| 毛片网站免费在线观看| 国产人成午夜免费看| 亚洲一区色| 亚洲天堂视频网站| 亚洲人在线| 91蝌蚪视频在线观看| 911亚洲精品| 中文字幕日韩欧美| 少妇精品在线| 日本一本在线视频| 日韩无码真实干出血视频| 国产一区二区精品福利| 色妞www精品视频一级下载| 婷婷开心中文字幕| 欧美成人影院亚洲综合图| 露脸一二三区国语对白| 亚洲国产成人精品一二区| 亚洲成在人线av品善网好看| 久久久国产精品无码专区| 欧美一级色视频| 国产无遮挡裸体免费视频| 国产网站一区二区三区| 欧美不卡视频一区发布| 成人一级免费视频| 欧美精品影院| 久久久久国产一区二区| 中国特黄美女一级视频| 夜夜操国产| 欧美亚洲欧美| 国产91麻豆视频| 欧美成人国产| 网久久综合| 国产在线欧美| 2021天堂在线亚洲精品专区| 在线色国产| 无遮挡一级毛片呦女视频| 亚洲天堂精品视频| 日本一区高清| 特级做a爰片毛片免费69| 国产乱人免费视频| 91欧美亚洲国产五月天| 女人av社区男人的天堂| 亚洲一区毛片| 日本不卡在线播放|