大型網站性能策略:詳細解析nginx負載均衡(2)

發表于:2014-07-14來源:IT博客大學習作者:不詳點擊數: 標簽:負載均衡
2.2. ip hash ip hash是nginx內置的另一個負載均衡的策略,流程和輪詢很類似,只是其中的算法和具體的策略有些變化,如下圖所示: ip hash算法的核心實現如下

  2.2. ip hash

  ip hash是nginx內置的另一個負載均衡的策略,流程和輪詢很類似,只是其中的算法和具體的策略有些變化,如下圖所示:

  ip hash算法的核心實現如下圖:

  從代碼中可以看出,hash值既與ip有關又與后端機器的數量有關。經過測試,上述算法可以連續產生1045個互異的value,這是該算法的硬限制。對此nginx使用了保護機制,當經過20次hash仍然找不到可用的機器時,算法退化成輪詢。因此,從本質上說,ip hash算法是一種變相的輪詢算法,如果兩個ip的初始hash值恰好相同,那么來自這兩個ip的請求將永遠落在同一臺服務器上,這為均衡性埋下了很深的隱患。

  2.3. fair

  fair策略是擴展策略,默認不被編譯進nginx內核。其原理是根據后端服務器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網絡環境往往不是那么簡單,因此要慎用。

  2.4. 通用hash、一致性hash

  這兩種也是擴展策略,在具體的實現上有些差別,通用hash比較簡單,可以以nginx內置的變量為key進行hash,一致性hash采用了nginx內置的一致性hash環,可以支持memcache。

  3. 對比測試

  本測試主要為了對比各個策略的均衡性、一致性、容災性等,從而分析出其中的差異性,并據此給出各自的適用場景。為了能夠全面、客觀的測試 nginx的負載均衡策略,我們采用了兩個測試工具、在不同場景下做測試,以此來降低環境對測試結果造成的影響。首先簡單介紹測試工具、測試網絡拓撲和基本的測試流程。

  3.1. 測試工具

  3.1.1 easyABC

  easyABC是公司內部開發性能測試工具,采用epool模型實現,簡單易上手,可以模擬GET/POST請求,極限情況下可以提供上萬的壓力,在公司內部得到了廣泛的使用。由于被測試對象為反向代理服務器,因此需要在其后端搭建樁服務器,這里用nginx作為樁webserver,提供最基本的靜態文件服務。

  3.1.2 polygraph

  polygraph是一款免費的性能測試工具,以對緩存服務、代理、交換機等方面的測試見長。它有規范的配置語言PGL(Polygraph Language),為軟件提供了強大的靈活性。其工作原理如下圖所示:

  polygraph提供client端和server端,將測試目標nginx放在二者之間,三者之間的網絡交互均走http協議,只需配置ip+port即可。client端可以配置虛擬robot的個數以及每個robot發請求的速率,并向代理服務器發起隨機的靜態文件請求,server端將按照請求的url生成隨機大小的靜態文件做響應。這也是選用這個測試軟件的一個主要原因:可以產生隨機的url作為nginx各種hash策略的key。

  另外,polygraph還提供了日志分析工具,功能比較豐富,感興趣的同學可以參考附錄中的相關材料。

  3.2. 測試環境

  本測試運行在5臺物理機上,其中被測對象單獨搭在一臺8核機器上,另外四臺4核機器分別搭建了easyABC、webserver樁和polygraph,如下圖所示:

  3.3. 測試方案

  首先介紹下關鍵的測試指標:

  均衡性:是否能夠將請求均勻的發送給后端

  一致性:同一個key的請求,是否能落到同一臺機器

  容災性:當部分后端機器掛掉時,是否能夠正常工作

  以上述指標為指導,我們針對如下四個測試場景分別用easyABC和polygraph進行測試:

  場景1 server_*均正常提供服務;

原文轉自:http://blogread.cn/it/article/5608?f=wb2

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97