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

一種基于Nginx的負載均衡算法實現

2017-10-12 06:57:59馬衛東
電子設計工程 2017年19期
關鍵詞:進程系統

陳 沛,馬衛東

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

一種基于Nginx的負載均衡算法實現

陳 沛1,馬衛東2

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

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

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

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

1 Nginx簡介

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

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

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

圖1 Nginx架構圖

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

1)定義commands數組并添加到ngx_module_t結構體中;

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

3)定義ngx_module_t結構體中的 ctx接口供Http框架初始化;

4)編寫處理請求并返回響應的函數ngx_http_mytest_handler,在函數內實現算法;

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

2 負載均衡簡介

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

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

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

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

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

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

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

1)設計算法時應保證盡量簡單,也許有些算法能更好的分配,但是卻過于復雜,實現這些算法會導致引入額外的資源消耗,反而引起系統阻塞[8];

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

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

3 自定義模塊設計

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

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

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

圖2 算法流程圖

4 測試分析

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

系統版本:CentOS release 7 x86 64位

Nginx版本:1.9.10

處理器:4核8線程

內存容量:16 G

硬盤容量:100 G

網絡連接:本地連接

在進行測試之前,首先進行Linux系統與Nginx的參數優化[12],如下所示:

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

worker_connections 65535 #每個進程允許的最多連接數

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

max_user_processes 65535#系統支持打開的最大文件數

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

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

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

圖3 Webbench性能測試

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

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

表1 默認負載均衡算法測試結果

表2 自定義負載均衡算法測試結果

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

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

圖4 連接速率對比

5 結 論

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

圖5 失敗請求數對比

[1]楊小嬌.輕量級高并發Web服務器的研究與實現[D].南京:南京郵電大學,2014.

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

[3]凌質億,劉哲星,曹蕾.高并發環境下Apache與Nginx的I/O性能比較 [J].計算機系統應用,2013(6):204-208.

[4]陶輝.深入理解Nginx:模塊開發與架構解析[M].北京:機械工業出版社,2013.

[5]蔣文旭.基于Nginx部署環境的Web加速方案設計與實現[D].北京:北京郵電大學,2013.

[6]郭平,李琪.基于服務器負載狀況分類的負載均衡調度算法[J].華中科技大學學報:自然科學版,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服務器集群系統的自適應負載均衡調度策略研究[D].長春:吉林大學,2013.

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

[10]王永輝.基于Nginx高性能Web服務器性能優化與負載均衡的改進與實現[D].成都:電子科技大學,2015.

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

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

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

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

[15]李逍遙.基于LAMP的Web服務器性能優化問題研究與實現[D].北京:北京郵電大學,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—),男,江西吉安人,碩士研究生。研究方向:通信與信息系統、互聯網技術。

猜你喜歡
進程系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 国产成人精品视频一区二区电影| AV无码无在线观看免费| 精品人妻无码中字系列| 精品91自产拍在线| 九九热精品在线视频| 国产AV无码专区亚洲A∨毛片| 国产91小视频| 青草午夜精品视频在线观看| 最近最新中文字幕在线第一页| 久久久久亚洲AV成人网站软件| 欧美成一级| 天天综合网色| 五月综合色婷婷| 亚洲中文字幕23页在线| 国产一在线| 波多野结衣二区| 国产丝袜第一页| 99久久国产精品无码| 国产成人AV大片大片在线播放 | 欧美一级夜夜爽| 国产在线91在线电影| 欧美区一区| 99久视频| 成年女人a毛片免费视频| 国产成人综合久久| 小说 亚洲 无码 精品| 波多野结衣一区二区三区四区视频| 国产青青草视频| 美女无遮挡免费视频网站| 区国产精品搜索视频| 97se综合| 国产精品美人久久久久久AV| 日韩无码真实干出血视频| 国产91线观看| 久久免费成人| 亚洲中文精品人人永久免费| 欧美午夜在线观看| 国产永久免费视频m3u8| 欧美成在线视频| 日韩午夜片| 欧美精品亚洲精品日韩专区va| 国产黄色爱视频| 91在线播放免费不卡无毒| 国产精品福利在线观看无码卡| 国产91小视频| 国产欧美视频一区二区三区| 亚洲国模精品一区| 欧美午夜在线视频| 国产精品午夜电影| 亚洲天堂2014| 亚洲午夜福利精品无码| 国产在线精品99一区不卡| 午夜色综合| 亚洲欧美日韩综合二区三区| 中国美女**毛片录像在线| 欧美激情视频在线观看一区| 99在线免费播放| 亚洲品质国产精品无码| 成人精品免费视频| 在线视频亚洲色图| Aⅴ无码专区在线观看| 久久国产香蕉| 97免费在线观看视频| 91久久精品日日躁夜夜躁欧美| 在线色综合| 久久国产精品娇妻素人| 91成人在线免费观看| 日韩精品高清自在线| 欧美在线中文字幕| 另类重口100页在线播放| 亚洲高清国产拍精品26u| 欧美国产日韩在线观看| 国产精品所毛片视频| 亚洲天堂视频在线免费观看| 在线不卡免费视频| 国产免费久久精品99re不卡 | 亚洲开心婷婷中文字幕| 婷婷久久综合九色综合88| 高清不卡一区二区三区香蕉| 久久人搡人人玩人妻精品一| 免费观看无遮挡www的小视频| 色天堂无毒不卡|