亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Nginx負(fù)載均衡的動態(tài)改進(jìn)算法

        2020-04-09 06:36:40張宇星馬明棟王得玉
        關(guān)鍵詞:進(jìn)程

        張宇星,馬明棟,王得玉

        (1.南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003;2.南京郵電大學(xué) 地理與生物信息學(xué)院,江蘇 南京 210003)

        0 引 言

        隨著互聯(lián)網(wǎng)的快速發(fā)展,PC端、移動端的逐漸興起,早期的單臺服務(wù)器已經(jīng)難以處理用戶多樣化的并發(fā)請求。通過服務(wù)器集群的負(fù)載均衡技術(shù)能有效地分散單臺服務(wù)器的訪問壓力,還能有效避免當(dāng)一臺Web服務(wù)器發(fā)生故障或遭到攻擊無法對外提供服務(wù)時(shí),整個服務(wù)無法進(jìn)行的狀況[1]。當(dāng)集群中的Web服務(wù)器宕機(jī)時(shí),通過負(fù)載均衡技術(shù)可以將訪問流量轉(zhuǎn)移給集群中其他的服務(wù)器。負(fù)載均衡技術(shù)通過均衡后端服務(wù)器的壓力,高效利用所有的后端服務(wù)器,提高整個服務(wù)器集群的性能。負(fù)載均衡的實(shí)現(xiàn)主要包括硬件和軟件兩個方面[2]。與基于硬件的負(fù)載均衡設(shè)備相比,基于軟件的負(fù)載均衡不需要獨(dú)立的機(jī)器設(shè)備,通過在服務(wù)器上安裝和配置軟件來實(shí)現(xiàn)負(fù)載均衡,配置靈活,可擴(kuò)展性強(qiáng),成本也較低[3]。LVS和Nginx是比較常見的基于軟件的負(fù)載均衡,LVS工作在網(wǎng)絡(luò)的第四層,作為請求的轉(zhuǎn)發(fā),沒有流量,而Nginx工作在網(wǎng)絡(luò)的第七層,可以高效地處理HTTP應(yīng)用,可使用的場合也多于LVS,因此文中將主要研究Nginx的負(fù)載均衡。

        Nginx是由俄羅斯人開發(fā)的一款開源Web服務(wù)器軟件,占用資源低,處理請求快,模塊化設(shè)計(jì),可擴(kuò)展性好,配置靈活,采用異步、非阻塞、事件驅(qū)動的方式處理請求,并發(fā)量高,具有反向代理和緩存服務(wù)功能[4-5]。在實(shí)際中應(yīng)用非常廣泛,目前國內(nèi)的很多企業(yè)也都采用Nginx作為負(fù)載均衡和反向代理的Web服務(wù)器[6]。

        負(fù)載均衡算法對Nginx負(fù)載均衡技術(shù)起著關(guān)鍵作用,文中通過研究Nginx自帶的負(fù)載均衡算法,提出一種動態(tài)的改進(jìn)算法,以有效提高服務(wù)器集群的性能。

        1 Nginx體系架構(gòu)

        Nginx服務(wù)器啟動后,產(chǎn)生一個Master進(jìn)程,由Master進(jìn)程產(chǎn)生多個Worker進(jìn)程。Master進(jìn)程負(fù)責(zé)管理多個Worker進(jìn)程,而Worker進(jìn)程則負(fù)責(zé)接收并處理客戶端的請求[7]。Nginx的主要配置文件nginx.conf在編譯安裝好的nginx/conf目錄下可以找到,打開文件可以觀察到其大致結(jié)構(gòu),如圖1所示。在文件中配置worker進(jìn)程數(shù)、連接數(shù)等參數(shù)可以達(dá)到Nginx性能調(diào)優(yōu)的效果。其中全局塊主要是配置Nginx的用戶組,工作進(jìn)程數(shù),進(jìn)程pid的存放路徑等。events塊主要配置工作進(jìn)程的最大連接數(shù)。http全局塊主要配置sendfile和超時(shí)信息以及文件的引入等。server塊和location塊主要配置主機(jī)的服務(wù)信息等。

        圖1 nginx.conf配置文件結(jié)構(gòu)

        Nginx負(fù)載均衡的實(shí)現(xiàn)就是源于Nginx高效的反向代理服務(wù)[8]。反向代理服務(wù)的對象是服務(wù)器端,客戶端并不知道實(shí)際處理請求的機(jī)器是哪一臺。反向代理服務(wù)器收到來自客戶端的請求,將請求轉(zhuǎn)發(fā)給后端服務(wù)器處理。外部客戶不能直接訪問真實(shí)的服務(wù)器,即使遭到惡意攻擊,也能保證后端服務(wù)器的安全[9]。Nginx的反向代理服務(wù)由proxy_pass URL來配置,反向代理配置如下:

        upstream mynginx{

        server 192.168.168.161;

        server 192.168.168.163;

        }

        server {

        listen 80;

        server_name localhost 192.168.168.162;

        resolver8.8.8.8;

        location / {

        proxy_pass http://mynginx;

        include proxy_params;

        }

        }

        當(dāng)客戶端的請求發(fā)送過來時(shí),Nginx利用proxy_pass指令進(jìn)行代理轉(zhuǎn)發(fā),然后在upstream模塊中根據(jù)負(fù)載均衡算法將請求分配給后端服務(wù)器[10]。

        Nginx服務(wù)器接收客戶端的請求時(shí),并不會立即轉(zhuǎn)發(fā)給上游的Web服務(wù)器,而是如圖2所示,在Nginx反向代理服務(wù)器上設(shè)置緩存,以鍵值對的形式存儲在內(nèi)存或者硬盤中,獲得完整的HTTP請求包后再將完整的請求發(fā)給上游服務(wù)器[11]。并且對于一些靜態(tài)資源,Nginx通過使用proxy_cache將用戶的請求緩存到本地一個目錄。當(dāng)下一次有相同請求轉(zhuǎn)到代理服務(wù)器時(shí),會先查看本地緩存,如果找到了該請求則直接返回給客戶端,如果本地緩存中沒有找到,再將請求轉(zhuǎn)發(fā)到后端Web服務(wù)器,減少了Nginx與后端Web服務(wù)器的連接次數(shù),加快了響應(yīng)速度,提高了Nginx處理性能[12]。

        圖2 Nginx反向代理模型

        2 算法改進(jìn)設(shè)計(jì)

        常見的負(fù)載均衡算法主要有加權(quán)輪詢、最小連接數(shù)、ip_hash、url_hash和fair算法[13]。加權(quán)輪詢算法按照預(yù)先分配的權(quán)重輪流分發(fā)給各個服務(wù)器節(jié)點(diǎn),沒有考慮服務(wù)器的連接數(shù)和實(shí)時(shí)負(fù)載。ip_hash和url_hash針對Http應(yīng)用本身來做分流策略,將客戶端請求按ip或url的哈希結(jié)果分配[14]。可以避免用戶每次訪問的服務(wù)器不同,使得session落在不同的服務(wù)器上,造成用戶端cookie驗(yàn)證失敗等問題,但是容易導(dǎo)致某臺服務(wù)器節(jié)點(diǎn)的壓力變得非常大而其他節(jié)點(diǎn)卻空閑的不均衡現(xiàn)象。最小連接數(shù)和fair算法考慮的指標(biāo)也過于單一,因此算法的均衡效果也不是很明顯[15]。

        文中在Nginx的官網(wǎng)下載nginx-1.14.2版本的源碼,在源碼的src/http目錄下可以找到默認(rèn)的加權(quán)輪詢算法ngx_http_upstream_round_robin.c文件。文件中的ngx_http_upstream_get_peer函數(shù)計(jì)算每一個后端服務(wù)器的權(quán)值,在函數(shù)中定義指針*peer和*best,通過for循環(huán)遍歷后端服務(wù)器。再通過best指針選取權(quán)值最大的服務(wù)器,將 best指針作為ngx_http_upstream_get_peer函數(shù)的返回值。函數(shù)中權(quán)值的部分計(jì)算代碼如下:

        peer->current_weight+=peer->effective_weight;

        total+=peer->effective_weight;

        if(peer->effective_weightweight) {

        peer->effective_weight++;

        }

        if(best==NULL||peer->current_weight>best->current_weight) {

        best=peer;

        p=i;

        }

        文中提出的動態(tài)改進(jìn)算法是在加權(quán)輪詢算法的基礎(chǔ)上通過動態(tài)收集實(shí)時(shí)負(fù)載和硬件利用率,建立數(shù)學(xué)模型,得出動態(tài)反饋的負(fù)載均衡算法。

        首先用Si表示服務(wù)器集群中的每個節(jié)點(diǎn),Ci表示每個服務(wù)器節(jié)點(diǎn)的性能,服務(wù)器節(jié)點(diǎn)的默認(rèn)權(quán)值為:

        (1)

        用Uc(i),Um(i),Ud(i)和Ub(i)分別表示周期T內(nèi)單個節(jié)點(diǎn)的CPU、內(nèi)存、磁盤IO和網(wǎng)絡(luò)帶寬的占用率,不同指標(biāo)對服務(wù)器性能影響不同,Kc,Km,Kd,Kb分別表示CPU、內(nèi)存、磁盤IO和網(wǎng)絡(luò)帶寬對服務(wù)器的影響因子[16],并且Kc+Km+Kd+Kb=1。每個節(jié)點(diǎn)性能的實(shí)時(shí)負(fù)載比重WN(i)為:

        WN(i)=

        (2)

        在最小連接數(shù)算法中,當(dāng)有請求分發(fā)過來時(shí),連接數(shù)加1,當(dāng)請求處理完成時(shí),連接數(shù)減1。文中提出的動態(tài)改進(jìn)算法也將考慮每個節(jié)點(diǎn)的實(shí)時(shí)連接數(shù)Ni={N1,N2,…,Nn},每個節(jié)點(diǎn)的連接數(shù)占比為:

        (3)

        當(dāng)服務(wù)器節(jié)點(diǎn)負(fù)載較重時(shí),請求的響應(yīng)時(shí)間就比較長,所以響應(yīng)時(shí)延也是衡量服務(wù)器節(jié)點(diǎn)實(shí)時(shí)負(fù)載的一個重要因素。然后考慮請求的響應(yīng)時(shí)間,在Nginx的日志文件中提取每個節(jié)點(diǎn)服務(wù)器在周期T內(nèi)的最近一次請求時(shí)間,Ti={T1,T2,…,Tn},后端服務(wù)器集群最近一次的響應(yīng)平均時(shí)間為:

        (4)

        服務(wù)器節(jié)點(diǎn)的響應(yīng)時(shí)間比重為:

        Wt(i)=Ti/Avg(T)

        (5)

        綜合節(jié)點(diǎn)的實(shí)時(shí)性能,連接數(shù)和響應(yīng)時(shí)間建立數(shù)學(xué)模型:

        Wi=(1-WN(i))*Wd(i)+(1-Wc(i))*

        Wd(i)+(1-Wt(i))*Wd(i)

        (6)

        將三個因素的權(quán)值動態(tài)相加得到實(shí)時(shí)的權(quán)值,即每個服務(wù)器節(jié)點(diǎn)的權(quán)值計(jì)算如下:

        Wi=(3-WN(i)-Wc(i)-Wt(i))*Wd(i)

        (7)

        將計(jì)算所得結(jié)果與ngx_http_upstream_get_peer函數(shù)中的effective_weight結(jié)合,通過best指針返回權(quán)值最大的服務(wù)器節(jié)點(diǎn)。

        3 實(shí)驗(yàn)環(huán)境搭建與測試

        實(shí)驗(yàn)在虛擬機(jī)中搭建了五臺服務(wù)器,一臺作為客戶端測試連接,一臺作為反向代理服務(wù)器,其余三臺作為后端服務(wù)器。在后端服務(wù)器中搭建Nginx+php環(huán)境來實(shí)現(xiàn)動態(tài)的網(wǎng)站運(yùn)行環(huán)境。Nginx通過fastcgi接口來實(shí)現(xiàn)與php文件的交互。在server模塊的location配置中引入一個index.php動態(tài)資源文件,放置在location中的root目錄下,location的配置如下:

        location ~ .php$ {

        root html;

        fastcgi_index index.php;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

        }

        實(shí)驗(yàn)環(huán)境搭建好后使用Httperf和Autobench來進(jìn)行性能測試,Httperf可以根據(jù)每一次不同的測試要求產(chǎn)生不同的工作負(fù)載,而Autobench是一款基于Httperf開發(fā)的perf 腳本工具,可以根據(jù)參數(shù)設(shè)置自動進(jìn)行并發(fā)測試,并將結(jié)果保存在.tsv文件中[17-18]。在客戶端中鍵入如下命令進(jìn)行測試:

        autobench --single_host --host1 192.168.168.162 --port1 80 --uri1 /index.php --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10 --num_conn 500 --timeout 5 --file results.tsv

        實(shí)驗(yàn)中分別對默認(rèn)輪詢算法、最小連接數(shù)算法以及文中提出的動態(tài)反饋算法進(jìn)行測試,將得到的三個results.tsv文件進(jìn)行整理,得到的統(tǒng)計(jì)數(shù)據(jù)如表1和表2所示。

        表1 三種算法的響應(yīng)時(shí)間

        表2 三種算法的實(shí)際并發(fā)連接數(shù)

        從表中數(shù)據(jù)可以看出,當(dāng)并發(fā)量較低時(shí),三種算法的響應(yīng)時(shí)間相差不大,但當(dāng)并發(fā)量達(dá)到600以上時(shí),三種算法的響應(yīng)時(shí)間都迅速增大,并且最小連接數(shù)算法的響應(yīng)時(shí)間要小于默認(rèn)輪詢算法,而文中提出的動態(tài)反饋算法響應(yīng)時(shí)間則要優(yōu)于其他兩種。Autobench測試時(shí)設(shè)置了timeout為5秒,超時(shí)5秒的連接都會當(dāng)作請求失敗的連接。從表2中也可以看出,當(dāng)并發(fā)數(shù)大于1 200時(shí),實(shí)際處理的連接數(shù)都出現(xiàn)了不同程度的下降,但從整體來看,文中提出的動態(tài)算法成功處理的連接數(shù)要高于其他兩種算法。

        4 結(jié)束語

        服務(wù)器集群技術(shù)和負(fù)載均衡技術(shù)能有效減輕Web并發(fā)請求所帶來的后端服務(wù)器的壓力。而負(fù)載均衡算法又對負(fù)載均衡技術(shù)有著重要的影響。文中所提出的負(fù)載均衡優(yōu)化算法不用每次都去實(shí)時(shí)地更新權(quán)值,而是在周期T之后重新收集負(fù)載信息,計(jì)算權(quán)值,分配權(quán)值,減少了每次都去重新計(jì)算、分配權(quán)值帶來的不必要的消耗。通過實(shí)驗(yàn)數(shù)據(jù)對比,驗(yàn)證了優(yōu)化后的算法對負(fù)載均衡的性能有一定的提升。同時(shí),在研究過程中,該算法也存在不足之處,對于時(shí)間周期T的取值,周期太長不能有效反映當(dāng)前服務(wù)器節(jié)點(diǎn)的性能,周期太短頻繁取值造成性能下降,對于這兩方面的平衡還有待進(jìn)一步的研究。

        猜你喜歡
        進(jìn)程
        債券市場對外開放的進(jìn)程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        改革開放進(jìn)程中的國際收支統(tǒng)計(jì)
        中國外匯(2019年8期)2019-07-13 06:01:06
        快速殺掉頑固進(jìn)程
        社會進(jìn)程中的新聞學(xué)探尋
        我國高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        講效率 結(jié)束進(jìn)程要批量
        電腦迷(2012年24期)2012-04-29 00:44:03
        男女平等進(jìn)程中出現(xiàn)的新矛盾和新問題
        俄羅斯現(xiàn)代化進(jìn)程的阻礙
        論文萊的民族獨(dú)立進(jìn)程
        久久精品无码一区二区2020| 国产 高潮 抽搐 正在播放| 国产av无码专区亚洲avjulia| 亚洲精品国产av成拍色拍 | 国产成人午夜福利在线小电影| 日韩一二三四区免费观看| 亚洲一二三区免费视频| 亚洲人成色7777在线观看不卡| 无码精品久久久久久人妻中字| 国产精品无需播放器| 久草精品手机视频在线观看| 日本久久精品视频免费| 国产毛片av最新视频| 亚洲国产成人无码av在线影院| 国产在线成人精品| 亚洲一区二区三区综合网| 超级乱淫片国语对白免费视频| 岳毛多又紧做起爽| 无码专区中文字幕DVD| 丝袜欧美视频首页在线| 日本少妇爽的大叫高潮了| 国产白浆一区二区在线| 免费成人在线电影| 欧美成人专区| 区三区久久精品水蜜桃av| 国产av激情舒服刺激| 军人粗大的内捧猛烈进出视频| 国产精品美女AV免费观看| 久久精品视频日本免费| 亚洲av乱码一区二区三区按摩| 亚洲丁香五月激情综合| 中文字幕AⅤ人妻一区二区| 国产白浆流出一区二区| 狂猛欧美激情性xxxx大豆行情| 又色又爽又高潮免费视频观看| 无码少妇一级AV便在线观看| 五月天亚洲av优女天堂| 人妻少妇中文字幕,久久精品| 日本一本之道高清不卡免费| 午夜片无码区在线| 一区两区三区视频在线观看|