淺談Nginx負載均衡與F5(硬體)的區別
前言
筆者最近在負責某集團網站時,同時用到了Nginx與F5,如圖所示,負載均衡器F5作為處理外界請求的第一道“牆”,將請求分發到web伺服器後,web伺服器上的Nginx再進行處理,靜態內容直接訪問本地門戶,動態資料則通過反向代理指向內網服務。
其實Nginx和F5這兩者均可用作網站負載均衡,那二者有什麼區別呢?筆者在此淺談下Nginx與F5的一些區別。
目前很多網站或應用在設計之初都會為高併發的資料請求做負載均衡,不差錢的土豪使用者一般會直接買F5硬體裝置作為其負載均衡器,原因不用多說,其功能強大,不僅包含負載均衡還包括應用交換、會話交換、狀態監控、智慧網路地址轉換、通用持續性、響應錯誤處理、IPv6閘道器、高階路由、智慧埠映象、SSL加速、智慧HTTP壓縮、TCP優化、第7層速率整形、內容緩衝、內容轉換、連線加速、快取記憶體、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆過濾等功能,是不是很強大?當然價格也是讓人很“心動”。而一些預算並不高,正在初期發展的網站來說,Nginx這種軟負載也能很好的滿足其資料分流的需求,下面我們先來看看Nginx是如何滿足我們的負載均衡需求的:
一、什麼是Nginx:
Nginx:高效能的 HTTP和反向代理伺服器,同時支援作為IMAP/POP3/SMTP代理伺服器。目前被很多網站應用為其HTTP軟負載均衡器。高效的效能、良好的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗正逐漸被大型網際網路公司所青睞。例如騰訊、淘寶、新浪等大型門戶及商業網站都採用Nginx進行HTTP網站的資料分流。
二、Nginx功能特點:
1、工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;
2、Nginx對網路的依賴比較小;
3、Nginx安裝和配置比較簡單,測試起來比較方便;
4、可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的併發;
5、Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支援url來檢測;
6、Nginx對請求的非同步處理可以幫助節點伺服器減輕負載;
7、Nginx能支援http和Email;
三、原理
Nginx採用的是反向代理技術,代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。反向代理負載均衡技術是把將來自internet上的連線請求以反向代理的方式動態地轉發給內部網路上的多臺伺服器進行處理,從而達到負載均衡的目的。
具體是怎麼執行的呢?其實當Nginx啟動後,其工作程序是由配置檔案對其進行初始化的,主程序處理配置檔案中的讀取、埠繫結等特權操作,之後建立一小組子程序,由這些子程序進行請求的處理,同時快取載入器載入硬碟中快取到記憶體中,接著退出,保證資源開銷始終保持著較低的狀態。
可以看出,建立的子程序其實在負責所有的工作,處理網路連線、硬碟讀寫操作、以及上游伺服器通訊。
如圖所示:masert process是其主執行緒,worker process 顧名思義,“我是具體幹活的啦”,筆者截圖的程序還是比較少的,因為這是自己的伺服器,沒有太多服務,實際業務中有可能會出現幾十個worker process,還是挺壯觀的。
Nginx推薦的配置是,一個工作程序對應一個CPU核心,確保硬體資源的有效利用。
一旦NGINX服務起來,僅有工作程序在忙,每個工作程序採用非阻塞地方式處理多個連線,降低上下文切換的次數。
每個工作程序都是單執行緒且獨立執行,負責獲取新連線並進行處理。程序之間通過共享記憶體進行通訊,諸如快取資料,會話持續化資料(ession persistence data),以及其他共享資源。
四、F5的負載均衡功能
其實看到Nginx的原理和功能,是不是覺得已經不需要F5了?當然也不是,F5畢竟是負載均衡的老前輩,一直以來都以功能強大,效能穩定著稱,很多功能其實是軟負載無法做到的。
F5 BIG-IP用作HTTP負載均衡器的主要功能:
1、F5 BIG-IP提供12種靈活的演算法將所有流量均衡的分配到各個伺服器,而面對使用者,只是一臺虛擬伺服器。
2、F5 BIG-IP可以確認應用程式能否對請求返回對應的資料。假如F5 BIG-IP後面的某一臺伺服器發生服務停止、宕機等故障,F5會檢查出來並將該伺服器標識為宕機,從而不將使用者的訪問請求傳送到該臺發生故障的伺服器上。這樣,只要其它的伺服器正常,使用者的訪問就不會受到影響。宕機一旦修復,F5 BIG-IP就會自動查證應用保證對客戶的請求作出正確響應並恢復向該伺服器傳送。
3、F5 BIG-IP具有動態Session的會話保持功能,筆者也是在網站中使用的F5將使用者IP與Session通過F5進行的繫結,使其Session保持一致。
4、F5 BIG-IP的iRules功能可以做HTTP內容過濾,根據不同的域名、URL,將訪問請求傳送到不同的伺服器。
五、二者對比
F5,硬體
優點:能夠直接通過智慧交換機實現,處理能力更強,而且與系統無關,負載效能強,更適用於一大堆裝置、大訪問量、簡單應用。
缺點:成本高,除裝置價格高昂,而且配置冗餘,很難想象後面伺服器做一個叢集,但最關鍵的負載均衡裝置卻是單點配置,無法有效掌握伺服器及應用狀態。
硬體負載均衡,一般都不管實際系統與應用的狀態,而只是從網路層來判斷,所以有時候系統處理能力已經不行了,但網路可能還來得及反應(這種情況非常典型,比如應用伺服器後面記憶體已經佔用很多,但還沒有徹底不行,如果網路傳輸量不大就未必在網路層能反映出來)
Nginx,軟負載
優點:基於系統與應用的負載均衡,能夠更好地根據系統與應用的狀況來分配負載。這對於複雜應用是很重要的,價效比高,實際上如果幾臺伺服器,用F5之類的硬體產品顯得有些浪費,而用軟體就要合算得多,因為伺服器同時還可以跑應用、做叢集等。
缺點:負載能力受伺服器本身效能的影響,效能越好,負載能力越大。
結語
其實還是如筆者最初說到的,如果不差錢,完全可以直接上F5,同時配以Nginx作為負載均衡及web容器,處理大資料量的使用者併發完全沒問題,如果預算不夠,其實Nginx目前也能滿足大多數使用者需求了,當然也不能迷信負載均衡,對我們IT工作者來說的話,程式、SQL等涉及資料處理的業務邏輯的地方,無論是架構還是程式碼亦或是模型的合理性,其重要性永遠是要高於中介軟體的,這點想必是每位ITer的共鳴。