




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
對于一個大型網(wǎng)站來說,負載均衡是永恒的話題。隨著硬件技術的迅猛發(fā)展,越來越多的負載均衡硬件設備涌現(xiàn)出來,如F5BIG-IP、CitrixNetScaler、Radware等等,雖然可以解決問題,但其高昂的價格卻往往令人望而卻步,因此負載均衡軟件仍然是大部分公司的不二之選。nginx作為webserver的后起之秀,其優(yōu)秀的反向代理功能和靈活的負載均衡策略受到了業(yè)界廣泛的關注。本文將以工業(yè)生產(chǎn)為背景,從設計實現(xiàn)和具體應用等方面詳細介紹nginx負載均衡策略。關鍵字:nginx負載均衡反向代理1.前言隨著互聯(lián)網(wǎng)信息的爆炸性增長,負載均衡(loadbalance)已經(jīng)不再是一個很陌生的話題,顧名思義,負載均衡即是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應足夠快,給用戶很好的體驗??焖僭鲩L的訪問量和數(shù)據(jù)流量催生了各式各樣的負載均衡產(chǎn)品,很多專業(yè)的負載均衡硬件提供了很好的功能,但卻價格不菲,這使得負載均衡軟件大受歡迎,nginx就是其中的一個。nginx第一個公開版本發(fā)布于2004年,2011年發(fā)布了1.0版本。它的特點是穩(wěn)定性高、功能強大、資源消耗低,從其目前的市場占有而言,nginx大有與apache搶市場的勢頭。其中不得不提到的一個特性就是其負載均衡功能,這也成了很多公司選擇它的主要原因。本文將從源碼的角度介紹nginx的內(nèi)置負載均衡策略和擴展負載均衡策略,以實際的工業(yè)生產(chǎn)為案例,對比各負載均衡策略,為nginx使用者提供參考。2.源碼剖析nginx的負載均衡策略可以劃分為兩大類:內(nèi)置策略和擴展策略。內(nèi)置策略包含加權輪詢和iphash,在默認情況下這兩種策略會編譯進nginx內(nèi)核,只需在nginx配置中指明參數(shù)即可。擴展策略有很多,如fair、通用hash、consistenthash等,默認不編譯進nginx內(nèi)核。由于在nginx版本升級中負載均衡的代碼沒有本質(zhì)性的變化,因此下面將以nginx1.0.15穩(wěn)定版為例,從源碼角度分析各個策略。加權輪詢(weightedroundrobin)輪詢的原理很簡單,首先我們介紹一下輪詢的基本流程。如下是處理一次請求的流程圖:
開始是重琵排序2xxk—~■ 話&連直」4帛應杯也竈位按牧誡求圖中有兩點需要注意,第一,如果可以把加權輪詢算法分為先深搜索和先廣搜索,那么nginx采用的是先深搜索算法,即將首先將請求都分給高權重的機器,直到該機器的權值降到了比其他機器低,才開始將請求分給下一個高權重的機器;第二,當所有后端機器都down開始是重琵排序2xxk—~■ 話&連直」4帛應杯也竈位按牧誡求接下來看下源碼。nginx源碼的目錄結構很清晰,加權輪詢所在路徑為nginx-1.0.15/src/http/ngx_http_upstream_round_robin.[c|h],在源碼的基礎上,針對重要的、不易理解的地方我加了注釋。首先看下ngx_http_upstream_round_robin.h中的重要聲明:typcdefstructf/./5S£ioc!ket,typcdefstructf/./5S£ioc!ket,fS?StiructSiSCfc-eacir&5<k!jen_t川當設定旗囂僧ngx_int_tng^_ir!it_E柑換軸和訪問時間ngx^Lbint^t山卿次舉上跟值和央間時"眼轄顯苦參與罡零ngx^uint^tM舁1相矢a£f(M5X_HTT?_S5l)Hgx_55i_5essicn_tlendif}ngs^http^upst ;na?;cuTerrt_weifiht;weight;^aiis;accessed;dQ?n; /■Lpnsigneddown:1;"7/*loce-1toppr&<eafr?/從變量命名中,我們就可以大致猜出其作用。其中,current_weight和weight的區(qū)別主要是前者為權重排序的值,隨著處理請求會動態(tài)的變化,后者是配置值用于恢復初始狀態(tài)。
接下來看下輪詢的創(chuàng)建過程,代碼如下圖所示。|c如fa4.$01.92?01.92?陰.es.帕.&7.臟w.if(rrp?dp亡ci2"3?Arifbie廠**8■*iiieof(uintptr?t)J■£rrp->t^fcd■&rrp->d9tB;rfp>T15C{<1■(rrp->pecrs->hun"bcr*CS■siz?f(uintptr?tJ-£))/(S■sizrof(yintptr_t;rrp?!?1「1匕目■mgK^pc:flill?G(r->pgplanBsirccf(ulntptr^t));if(rrp-itried■■NUL-.){returnHGXwERft?j這里有個tried變量需要做些說明。tried中記錄了服務器當前是否被嘗試連接過。他是一個位圖。如果服務器數(shù)量小于32,則只需在一個int中即可記錄下所有服務器狀態(tài)。如果服務器數(shù)量大于32,則需在內(nèi)存池中申請內(nèi)存來存儲。對該位圖數(shù)組的使用可參考如下代碼:ei.02.眄.ei.02.眄.B5.n■■rrp-->C:urrefit/(8?siieof(uintptr^t)};單=(uiMptr?t)1 <<r-rp-X-urrent% (8 ■if(!(rrip-rtriedtn]&.町){peer■S-r-^p*>peers->peer[rrp-^curre^t);最后是實際的策略代碼,邏輯很簡單,代碼實現(xiàn)也只有30行,直接上代碼。
1rpeiJta序B1.for(為)<92.93,For -8;i<petrs■嚴"。〒匕雹尸;i*+){04,if(.peer[i],Cyrrrent_h.tlsht<■fl){B5*contiinue;96.J?7,.n■丄;^0-while(£<se^rs->fiuff:beifc-1){“+;如£f(peer[l]Jcyrrent_f.e£jht<■?)fJ1.continue;12,卜13.if(peerfn)□current^^eight■IMGfpeefJi]r豊陽土工扣赳iRht14.apeerjn]■,出j.£nt■■ 1C&8 ;peer[1).weight){15.returnn:16.卜17.n>■1;18.Iftp?r[i),CUrrent_^EiSht、0)< ■撓當WSB?比豊比的蔚機限如n-i;11.■L22.23-return.Hj24.ij25.if {碣return0;37.12B-farU=0;i< 1**){29,班11■iphashiphash是nginx內(nèi)置的另一個負載均衡的策略,流程和輪詢很類似,只是其中的算法和具體的策略有些變化,如下圖所示:iphash算法的核心實現(xiàn)如下圖:01.for<£=9;1<3;i++){02. h^$h?(ftashi■115*iphp->id(tr[i])*&27ij:十05-p=hflsh牟rphp->rrp.pee-5->riUTber;從代碼中可以看出,hash值既與ip有關又與后端機器的數(shù)量有關。經(jīng)過測試,上述算法可以連續(xù)產(chǎn)生1045個互異的value,這是該算法的硬限制。對此nginx使用了保護機制,當經(jīng)過20次hash仍然找不到可用的機器時,算法退化成輪詢。因此,從本質(zhì)上說,iphash算法是一種變相的輪詢算法,如果兩個ip的初始hash值恰好相同,那么來自這兩個ip的請求將永遠落在同一臺服務器上,這為均衡性埋下了很深的隱患。fairfair策略是擴展策略,默認不被編譯進nginx內(nèi)核。其原理是根據(jù)后端服務器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網(wǎng)絡環(huán)境往往不是那么簡單,因此要慎用。通用hash、一致性hash這兩種也是擴展策略,在具體的實現(xiàn)上有些差別,通用hash比較簡單,可以以nginx內(nèi)置的變量為key進行hash,一致性hash采用了nginx內(nèi)置的一致性hash環(huán),可以支持memcache。3.對比測試本測試主要為了對比各個策略的均衡性、一致性、容災性等,從而分析出其中的差異性,并據(jù)此給出各自的適用場景。為了能夠全面、客觀的測試nginx的負載均衡策略,我們采用了兩個測試工具、在不同場景下做測試,以此來降低環(huán)境對測試結果造成的影響。首先簡單介紹測試工具、測試網(wǎng)絡拓撲和基本的測試流程。測試工具3.1.1easyABCeasyABC是公司內(nèi)部開發(fā)的性能測試工具,采用epool模型實現(xiàn),簡單易上手,可以模擬GET/P0ST請求,極限情況下可以提供上萬的壓力,在公司內(nèi)部得到了廣泛的使用。由于被測試對象為反向代理服務器,因此需要在其后端搭建樁服務器,這里用nginx作為樁webserver,提供最基本的靜態(tài)文件服務。3.1.2polygraphpolygraph是一款免費的性能測試工具,以對緩存服務、代理、交換機等方面的測試見長。它有規(guī)范的配置語言PGL(PolygraphLanguage),為軟件提供了強大的靈活性。其工作原理如下圖所示:polygraph提供client端和server端,將測試目標nginx放在二者之間,三者之間的網(wǎng)絡交互均走http協(xié)議,只需配置ip+port即可。client端可以配置虛擬robot的個數(shù)以及每個robot發(fā)請求的速率,并向代理服務器發(fā)起隨機的靜態(tài)文件請求,server端將按照請求的url生成隨機大小的靜態(tài)文件做響應。這也是選用這個測試軟件的一個主要原因:可以產(chǎn)生隨機的url作為nginx各種hash策略的key。另外,polygraph還提供了日志分析工具,功能比較豐富,感興趣的同學可以參考附錄中的相關材料。測試環(huán)境本測試運行在5臺物理機上,其中被測對象單獨搭在一臺8核機器上,另外四臺4核機器分別搭建了easyABC、webserver樁和polygraph,如下圖所示:tentserverserver2ngirix/polyeraph_S0rvereasyABC/poItentserverserver2ngirix/polyeraph_S0rvereasyABC/poIygrap\hclientclient_1nginxprazy測試方案首先介紹下關鍵的測試指標:均衡性:是否能夠?qū)⒄埱缶鶆虻陌l(fā)送給后端一致性:同一個key的請求,是否能落到同一臺機器容災性:當部分后端機器掛掉時,是否能夠正常工作以上述指標為指導,我們針對如下四個測試場景分別用easyABC和polygraph進行測試:場景1server_*均正常提供服務;場景2server_4掛掉,其他正常;場景3server_3、server_4掛掉,其他正常;場景4server_*均恢復正常服務。上述四個場景將按照時間順序進行,每個場景將建立在上一個場景基礎上,被測試對象無需做任何操作,以最大程度模擬實際情況。另外,考慮到測試工具自身的特點,在easyabc上的測試壓力在17000左右,polygraph上的測試壓力在4000左右。以上測試均保證被測試對象可以正常工作,且無任何notice級別以上(alert/error/warn)的日志出現(xiàn),在每個場景中記錄下server_*的qps用于最后的策略分析。測試結果表1和圖1是輪詢策略在兩種測試工具下的負載情況。對比在兩種測試工具下的測試結果會發(fā)現(xiàn),結果完全一致,因此可以排除測試工具的影響。從圖表中可以看出,輪詢策略對于均衡性和容災性都可以做到很好的滿足。(點擊圖片查看大圖)表1輪詢策略亠場景1心場景2心場景3^場景3easyabc^poly+Jeasyabc^poly+Jeasyabc^poly+Jeasyabc^po:graphQgraphsgraphsgraserver_l^4269^1018^5743^1325^99呂和1903^4348^IQ;server_2^4245心99帀5757心1327^10011^20五5心431"10;server_3^4237^9込5755心1323^g4322^99server4p4240^1007^防加4322^10C2.S006000圖1輪詢策略〔左easyABC右polygraph)心1ID001990Q+場燉上 *場—詠2.S006000圖1輪詢策略〔左easyABC右polygraph)心1ID001990Q+場燉上 *場—詠15D01000sem—換s*rver_lserverserver+詠*場弟—場按Mserver1server2server,表2和圖2是fair策略在兩種測試工具下的負載情況。fair策略受環(huán)境影響非常大,在排除了測試工具的干擾之后,結果仍然有非常大的抖動。從直觀上講,這完全不滿足均衡性。但是從另一個角度出發(fā),恰恰是由于這種自適應性確保了在復雜的網(wǎng)絡環(huán)境中能夠物盡所用。因此,在應用到工業(yè)生產(chǎn)中之前,需要在具體的環(huán)境中做好測試工作。(點擊圖片查看大圖)
表2f引「策略dqp彌場景H場景2衛(wèi)場景3^場景4easyabc^poly+Jeasyabc^poly+Jeasyabc^poly+Jeasyabc^polgraphsgraphsgraphs呂r可server_l^5506p392^916225211842^545心4512心53server_2^1941^BQ礙2124^1774^4921^3529^3733^HEserver_3^5078^1338^5198^1549^腫CM7164^12Sserver3243^1001^g221319^13114:003120M10D0&$009圖2也獷策略£左easyABC14:003120M10D0&$009圖2也獷策略£左easyABC右polygraph)心server.l 塑性巴匸上 罷f就匚弓 佬九唱*」場叢』場損V^^^"場量3 ■■場索$—場挾1—坊援2strvcf?l5CTVCr_2MTV&r.SS<rver_4以下圖表是各種hash策略,所不同的僅僅是hashkey或者是具體的算法實現(xiàn),因此一起做對比。實際測試中發(fā)現(xiàn),通用hash和一致性hash均存在一個問題:當某臺后端的機器掛掉時,原有落到這臺機器上的流量會丟失,但是在iphash中就不存在這樣的問題。正如上文中對iphash源碼的分析,當iphash失效時,會退化為輪詢策略,因此不會有丟失流量的情況。從這個層面上說,iphash也可以看成是輪詢的升級版。(點擊圖片查看大圖)常上^^^羽5席三削「場漂3 ■-加"彙4ffi3通用hmsh策略(polygraph)圖4一致性hash策略(polygraph-^屮圖5為iphash策略,常上^^^羽5席三削「場漂3 ■-加"彙4ffi3通用hmsh策略(polygraph)圖4一致性hash策略(polygraph-^屮圖5為iphash策略,iphash是nginx內(nèi)置策略,可以看做是前兩種策略的特例:以來源ip為key。由于測試工具不便于模擬海量ip下的請求,因此這里截取線上實際的情況加以分析,如下圖所示:qp沖場景2場景2心場景3^場景與衛(wèi)qps^場景H場景2心場景3^serve
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技創(chuàng)新推動經(jīng)濟發(fā)展
- 知識經(jīng)濟下版權問題的深度思考與應對策略
- 園區(qū)用地出租合同范本
- 二零二五年度心理健康咨詢保密合作協(xié)議
- 污水改造商務合同范本
- 二零二五年度生豬銷售與養(yǎng)殖產(chǎn)業(yè)風險防控合同
- 2025年度餐飲行業(yè)廚師職業(yè)發(fā)展保障合同
- 二零二五年度新型互聯(lián)網(wǎng)居間合同糾紛管轄權協(xié)議
- 2025年度邊緣計算服務器租賃合同模板
- 2025年度環(huán)保技術研發(fā)企業(yè)職工勞動合同創(chuàng)新成果分享合同
- 2025年黑龍江農(nóng)墾職業(yè)學院單招職業(yè)傾向性測試題庫匯編
- 2025年01月明光市司法局司法協(xié)理員7人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 整體施工勞務服務方案
- 第六節(jié)-固定收益證券知識分享
- 2024 貴州公務員考試行測真題(省直)
- 2025年泰山職業(yè)技術學院高職單招職業(yè)適應性測試近5年常考版參考題庫含答案解析
- 中國企業(yè)智能化成熟度報告(2024) -企業(yè)智能化轉(zhuǎn)型進入2.0時代
- 人體解剖學肱骨講解
- 2025年南京旅游職業(yè)學院高職單招職業(yè)適應性測試近5年常考版參考題庫含答案解析
- 工業(yè)地產(chǎn)基礎知識
- 馬工程《藝術學概論》課件424P
評論
0/150
提交評論