解析匯報(bào)Nginx負(fù)載均衡_第1頁(yè)
解析匯報(bào)Nginx負(fù)載均衡_第2頁(yè)
解析匯報(bào)Nginx負(fù)載均衡_第3頁(yè)
解析匯報(bào)Nginx負(fù)載均衡_第4頁(yè)
解析匯報(bào)Nginx負(fù)載均衡_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)用文案對(duì)于一個(gè)大型網(wǎng)站來(lái)說(shuō),負(fù)載均衡是永恒的話題。隨著硬件技術(shù)的迅猛發(fā)展,越來(lái)越多的負(fù)載均衡硬件設(shè)備涌現(xiàn)出來(lái),如F5BIG-IP、CitrixNetScaler 、Radware等等,雖然可以解決問(wèn)題,但其高昂的價(jià)格卻往往令人望而卻步, 因此負(fù)載均衡軟件仍然是大部分公司的不二之選。 nginx作為webserver 的后起之秀,其優(yōu)秀的反向代理功能和靈活的負(fù)載均衡策略受到了業(yè)界廣泛的關(guān)注。 本文將以工業(yè)生產(chǎn)為背景,從設(shè)計(jì)實(shí)現(xiàn)和具體應(yīng)用等方面詳細(xì)介紹 nginx負(fù)載均衡策略。關(guān)鍵字:nginx 負(fù)載均衡 反向代理前言隨著互聯(lián)網(wǎng)信息的爆炸性增長(zhǎng), 負(fù)載均衡(loadbalance )已經(jīng)不再是一個(gè)很陌生的話題,顧名思義,負(fù)載均衡即是將負(fù)載分?jǐn)偟讲煌姆?wù)單元, 既保證服務(wù)的可用性,又保證響應(yīng)足夠快,給用戶很好的體驗(yàn)。快速增長(zhǎng)的訪問(wèn)量和數(shù)據(jù)流量催生了各式各樣的負(fù)載均衡產(chǎn)品,很多專業(yè)的負(fù)載均衡硬件提供了很好的功能,但卻價(jià)格不菲,這使得負(fù)載均衡軟件大受歡迎, nginx就是其中的一個(gè)。nginx第一個(gè)公開(kāi)版本發(fā)布于 2004年,2011年發(fā)布了1.0版本。它的特點(diǎn)是穩(wěn)定性高、功能強(qiáng)大、資源消耗低,從其目前的市場(chǎng)占有而言, nginx大有與apache搶市場(chǎng)的勢(shì)頭。其中不得不提到的一個(gè)特性就是其負(fù)載均衡功能,這也成了很多公司選擇它的主要原因。本文將從源碼的角度介紹 nginx的內(nèi)置負(fù)載均衡策略和擴(kuò)展負(fù)載均衡策略,以實(shí)際的工業(yè)生產(chǎn)為案例,對(duì)比各負(fù)載均衡策略,為nginx使用者提供參考。標(biāo)準(zhǔn)實(shí)用文案源碼剖析nginx的負(fù)載均衡策略可以劃分為兩大類: 內(nèi)置策略和擴(kuò)展策略。內(nèi)置策略包含加權(quán)輪詢和iphash,在默認(rèn)情況下這兩種策略會(huì)編譯進(jìn) nginx內(nèi)核,只需在nginx配置中指明參數(shù)即可。擴(kuò)展策略有很多,如 fair、通用hash、consistenthash等,默認(rèn)不編譯進(jìn)nginx 內(nèi)核。由于在nginx版本升級(jí)中負(fù)載均衡的代碼沒(méi)有本質(zhì)性的變化,因此下面將以 穩(wěn)定版為例,從源碼角度分析各個(gè)策略。2.1. 加權(quán)輪詢(weightedroundrobin )輪詢的原理很簡(jiǎn)單,首先我們介紹一下輪詢的基本流程。 如下是處理一次請(qǐng)求的流程圖:圖中有兩點(diǎn)需要注意,第一,如果可以把加權(quán)輪詢算法分為先深搜索和先廣搜索,那么nginx采用的是先深搜索算法,即將首先將請(qǐng)求都分給高權(quán)重的機(jī)器,直到該機(jī)器的權(quán)值降到了比其他機(jī)器低,才開(kāi)始將請(qǐng)求分給下一個(gè)高權(quán)重的機(jī)器;標(biāo)準(zhǔn)實(shí)用文案第二,當(dāng)所有后端機(jī)器都 down 掉時(shí),nginx會(huì)立即將所有機(jī)器的標(biāo)志位清成初始狀態(tài),以避免造成所有的機(jī)器都處在 timeout 的狀態(tài),從而導(dǎo)致整個(gè)前端被夯住。接下來(lái)看下源碼。nginx源碼的目錄結(jié)構(gòu)很清晰,加權(quán)輪詢所在路徑為 ,在源碼的基礎(chǔ)上,針對(duì)重要的、不易理解的地方我加了注釋。首先看下ngx_http_upstream_round_robin.h 中的重要聲明:從變量命名中,我們就可以大致猜出其作用。其中, current_weight 和weight的區(qū)別主要是前者為權(quán)重排序的值,隨著處理請(qǐng)求會(huì)動(dòng)態(tài)的變化,后者是配置值,用于恢復(fù)初始狀態(tài)。接下來(lái)看下輪詢的創(chuàng)建過(guò)程,代碼如下圖所示。標(biāo)準(zhǔn)實(shí)用文案這里有個(gè)tried變量需要做些說(shuō)明。tried中記錄了服務(wù)器當(dāng)前是否被嘗試連接過(guò)。他是一個(gè)位圖。如果服務(wù)器數(shù)量小于 32,則只需在一個(gè) int中即可記錄下所有服務(wù)器狀態(tài)。如果服務(wù)器數(shù)量大于 32,則需在內(nèi)存池中申請(qǐng)內(nèi)存來(lái)存儲(chǔ)。對(duì)該位圖數(shù)組的使用可參考如下代碼:最后是實(shí)際的策略代碼,邏輯很簡(jiǎn)單,代碼實(shí)現(xiàn)也只有 30行,直接上代碼。標(biāo)準(zhǔn)實(shí)用文案2.2.iphashiphash是nginx內(nèi)置的另一個(gè)負(fù)載均衡的策略,流程和輪詢很類似,只是其中的算法和具體的策略有些變化,如下圖所示:標(biāo)準(zhǔn)實(shí)用文案iphash算法的核心實(shí)現(xiàn)如下圖:從代碼中可以看出,hash值既與ip有關(guān)又與后端機(jī)器的數(shù)量有關(guān)。經(jīng)過(guò)測(cè)試,上述算法可以連續(xù)產(chǎn)生 1045個(gè)互異的value,這是該算法的硬限制。對(duì)此nginx使用了保護(hù)機(jī)制,當(dāng)經(jīng)過(guò) 20次hash仍然找不到可用的機(jī)器時(shí),算法退化成輪詢。因此,從本質(zhì)上說(shuō),iphash算法是一種變相的輪詢算法,如果兩個(gè) ip的初始hash值恰好相同,那么來(lái)自這兩個(gè)ip的請(qǐng)求將永遠(yuǎn)落在同一臺(tái)服務(wù)器上,這為均衡性埋下了很深的隱患。2.3.fair標(biāo)準(zhǔn)實(shí)用文案fair策略是擴(kuò)展策略,默認(rèn)不被編譯進(jìn)nginx 內(nèi)核。其原理是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間判斷負(fù)載情況,從中選出負(fù)載最輕的機(jī)器進(jìn)行分流。 這種策略具有很強(qiáng)的自適應(yīng)性,但是實(shí)際的網(wǎng)絡(luò)環(huán)境往往不是那么簡(jiǎn)單,因此要慎用。2.4. 通用hash、一致性hash這兩種也是擴(kuò)展策略,在具體的實(shí)現(xiàn)上有些差別,通用 hash比較簡(jiǎn)單,可以以nginx內(nèi)置的變量為key進(jìn)行hash,一致性hash采用了nginx內(nèi)置的一致性hash環(huán),可以支持memcache。對(duì)比測(cè)試本測(cè)試主要為了對(duì)比各個(gè)策略的均衡性、 一致性、容災(zāi)性等,從而分析出其中的差異性,并據(jù)此給出各自的適用場(chǎng)景。為了能夠全面、客觀的測(cè)試 nginx的負(fù)載均衡策略,我們采用了兩個(gè)測(cè)試工具、 在不同場(chǎng)景下做測(cè)試,以此來(lái)降低環(huán)境對(duì)測(cè)試結(jié)果造成的影響。首先簡(jiǎn)單介紹測(cè)試工具、測(cè)試網(wǎng)絡(luò)拓?fù)浜突镜臏y(cè)試流程。3.1. 測(cè)試工具easyABC是公司內(nèi)部開(kāi)發(fā)的性能測(cè)試工具, 采用epool 模型實(shí)現(xiàn),簡(jiǎn)單易上手,可以模擬GET/POST請(qǐng)求,極限情況下可以提供上萬(wàn)的壓力,在公司內(nèi)部得到了廣泛的使用。由于被測(cè)試對(duì)象為反向代理服務(wù)器, 因此需要在其后端搭建樁服務(wù)器,這里用nginx作為樁webserver,提供最基本的靜態(tài)文件服務(wù)。標(biāo)準(zhǔn)實(shí)用文案polygraph 是一款免費(fèi)的性能測(cè)試工具,以對(duì)緩存服務(wù)、代理、交換機(jī)等方面的測(cè)試見(jiàn)長(zhǎng)。它有規(guī)范的配置語(yǔ)言 PGL(PolygraphLanguage ),為軟件提供了強(qiáng)大的靈活性。其工作原理如下圖所示:polygraph 提供client端和server端,將測(cè)試目標(biāo)nginx放在二者之間,三者之間的網(wǎng)絡(luò)交互均走 http 協(xié)議,只需配置 ip+port 即可。client端可以配置虛擬robot的個(gè)數(shù)以及每個(gè)robot發(fā)請(qǐng)求的速率,并向代理服務(wù)器發(fā)起隨機(jī)的靜態(tài)文件請(qǐng)求,server端將按照請(qǐng)求的url生成隨機(jī)大小的靜態(tài)文件做響應(yīng)。這也是選用這個(gè)測(cè)試軟件的一個(gè)主要原因:可以產(chǎn)生隨機(jī)的url作為nginx各種hash策略的key。另外,polygraph 還提供了日志分析工具,功能比較豐富,感興趣的同學(xué)可以參考附錄中的相關(guān)材料。3.2. 測(cè)試環(huán)境本測(cè)試運(yùn)行在5臺(tái)物理機(jī)上,其中被測(cè)對(duì)象單獨(dú)搭在一臺(tái) 8核機(jī)器上,另外四臺(tái)4核機(jī)器分別搭建了 easyABC、webserver 樁和polygraph ,如下圖所示:標(biāo)準(zhǔn)實(shí)用文案3.3. 測(cè)試方案首先介紹下關(guān)鍵的測(cè)試指標(biāo):均衡性:是否能夠?qū)⒄?qǐng)求均勻的發(fā)送給后端一致性:同一個(gè)key的請(qǐng)求,是否能落到同一臺(tái)機(jī)器容災(zāi)性:當(dāng)部分后端機(jī)器掛掉時(shí),是否能夠正常工作以上述指標(biāo)為指導(dǎo),我們針對(duì)如下四個(gè)測(cè)試場(chǎng)景分別用 easyABC和polygraph進(jìn)行測(cè)試:場(chǎng)景1server_*均正常提供服務(wù);標(biāo)準(zhǔn)實(shí)用文案場(chǎng)景2server_4掛掉,其他正常;場(chǎng)景3server_3、server_4掛掉,其他正常;場(chǎng)景4server_*均恢復(fù)正常服務(wù)。上述四個(gè)場(chǎng)景將按照時(shí)間順序進(jìn)行, 每個(gè)場(chǎng)景將建立在上一個(gè)場(chǎng)景基礎(chǔ)上, 被測(cè)試對(duì)象無(wú)需做任何操作,以最大程度模擬實(shí)際情況。另外,考慮到測(cè)試工具自身的特點(diǎn),在easyabc上的測(cè)試壓力在 17000左右,polygraph 上的測(cè)試壓力在4000左右。以上測(cè)試均保證被測(cè)試對(duì)象可以正常工作, 且無(wú)任何notice 級(jí)別以上(alert/error/warn )的日志出現(xiàn),在每個(gè)場(chǎng)景中記錄下 server_*的qps用于最后的策略分析。3.4. 測(cè)試結(jié)果表1和圖1是輪詢策略在兩種測(cè)試工具下的負(fù)載情況。對(duì)比在兩種測(cè)試工具下的測(cè)試結(jié)果會(huì)發(fā)現(xiàn),結(jié)果完全一致,因此可以排除測(cè)試工具的影響。從圖表中可以看出,輪詢策略對(duì)于均衡性和容災(zāi)性都可以做到很好的滿足。(點(diǎn)擊圖片查看大圖)標(biāo)準(zhǔn)實(shí)用文案表2和圖2是fair策略在兩種測(cè)試工具下的負(fù)載情況。fair策略受環(huán)境影響非常大,在排除了測(cè)試工具的干擾之后,結(jié)果仍然有非常大的抖動(dòng)。從直觀上講,這完全不滿足均衡性。但是從另一個(gè)角度出發(fā),恰恰是由于這種自適應(yīng)性確保了在復(fù)雜的網(wǎng)絡(luò)環(huán)境中能夠物盡所用。因此,在應(yīng)用到工業(yè)生產(chǎn)中之前,需要在具體的環(huán)境中做好測(cè)試工作。(點(diǎn)擊圖片查看大圖)標(biāo)準(zhǔn)實(shí)用文案以下圖表是各種 hash策略,所不同的僅僅是 hashkey或者是具體的算法實(shí)現(xiàn),因此一起做對(duì)比。實(shí)際測(cè)試中發(fā)現(xiàn),通用hash和一致性hash均存在一個(gè)問(wèn)題:當(dāng)某臺(tái)后端的機(jī)器掛掉時(shí),原有落到這臺(tái)機(jī)器上的流量會(huì)丟失,但是在 iphash中就不存在這樣的問(wèn)題。正如上文中對(duì)iphash源碼的分析,當(dāng)iphash失效時(shí),會(huì)退化為輪詢策略,因此不會(huì)有丟失流量的情況。從這個(gè)層面上說(shuō), iphash也可以看成是輪詢的升級(jí)版。 (點(diǎn)擊圖片查看大圖)標(biāo)準(zhǔn)實(shí)用文案圖5為iphash策略,iphash是nginx內(nèi)置策略,可以看做是前兩種策略的特例:以來(lái)源ip為key。由于測(cè)試工具不便于模擬海量 ip下的請(qǐng)求,因此這里截取線上實(shí)際的情況加以分析,如下圖所示:標(biāo)準(zhǔn)實(shí)用文案圖5iphash策略圖中前1/3使用輪詢策略,中間段使用 iphash策略,后1/3仍然是輪詢策略??梢悦黠@的看出,iphash的均衡性存在著很大的問(wèn)題。原因并不難分析,在實(shí)際的網(wǎng)絡(luò)環(huán)境中,有大量的高校出口路由器 ip、企業(yè)出口路由器 ip等網(wǎng)絡(luò)節(jié)點(diǎn),這些節(jié)點(diǎn)帶來(lái)的流量往往是普通用戶的成百上千倍, 而iphash策略恰恰是按照ip來(lái)劃分流量,因此造成上述后果也就自然而然了??偨Y(jié)與展望通過(guò)實(shí)際的對(duì)比測(cè)試,我們對(duì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論