淺談Nginx負載均衡和F5的區別

前言web

筆者最近在負責某集團網站時,同時用到了Nginx與F5,如圖所示,負載均衡器F5做爲處理外界請求的第一道「牆」,將請求分發到web服務器後,web服務器上的Nginx再進行處理,靜態內容直接訪問本地門戶,動態數據則經過反向代理指向內網服務。算法

 

 

李源1.png

其實Nginx和F5這二者都可用做網站負載均衡,那兩者有什麼區別呢?筆者在此淺談下Nginx與F5的一些區別。緩存

目前不少網站或應用在設計之初都會爲高併發的數據請求作負載均衡,不差錢的土豪用戶通常會直接買F5硬件設備做爲其負載均衡器,緣由不用多說,其功能強大,不只包含負載均衡還包括應用交換、會話交換、狀態監控、智能網絡地址轉換、通用持續性、響應錯誤處理、IPv6網關、高級路由、智能端口鏡像、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、內容緩衝、內容轉換、鏈接加速、高速緩存、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆過濾等功能,是否是很強大?固然價格也是讓人很「心動」。而一些預算並不高,正在初期發展的網站來講,Nginx這種軟負載也能很好的知足其數據分流的需求,下面咱們先來看看Nginx是如何知足咱們的負載均衡需求的:服務器

1、什麼是Nginx:網絡

Nginx:高性能的 HTTP和反向代理服務器,同時支持做爲IMAP/POP3/SMTP代理服務器。目前被不少網站應用爲其HTTP軟負載均衡器。高效的性能、良好的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗正逐漸被大型互聯網公司所青睞。例如騰訊、淘寶、新浪等大型門戶及商業網站都採用Nginx進行HTTP網站的數據分流。架構

2、Nginx功能特色:併發

一、工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構;負載均衡

二、Nginx對網絡的依賴比較小;異步

三、Nginx安裝和配置比較簡單,測試起來比較方便;高併發

四、能夠承擔高的負載壓力且穩定,通常能支撐超過1萬次的併發;

五、Nginx能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測;

六、Nginx對請求的異步處理能夠幫助節點服務器減輕負載;

七、Nginx能支持http和Email;

3、原理

Nginx採用的是反向代理技術,代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。反向代理負載均衡技術是把未來自internet上的鏈接請求以反向代理的方式動態地轉發給內部網絡上的多臺服務器進行處理,從而達到負載均衡的目的。

具體是怎麼運行的呢?其實當Nginx啓動後,其工做進程是由配置文件對其進行初始化的,主進程處理配置文件中的讀取、端口綁定等特權操做,以後建立一小組子進程,由這些子進程進行請求的處理,同時緩存加載器加載硬盤中緩存到內存中,接着退出,保證資源開銷始終保持着較低的狀態。

能夠看出,建立的子進程其實在負責全部的工做,處理網絡鏈接、硬盤讀寫操做、以及上游服務器通訊。

如圖所示:masert process是其主線程,worker process 顧名思義,「我是具體幹活的啦」,筆者截圖的進程仍是比較少的,由於這是本身的服務器,沒有太多服務,實際業務中有可能會出現幾十個worker process,仍是挺壯觀的。

22.png

Nginx推薦的配置是,一個工做進程對應一個CPU內核,確保硬件資源的有效利用。

一旦NGINX服務起來,僅有工做進程在忙,每一個工做進程採用非阻塞地方式處理多個鏈接,下降上下文切換的次數。

每一個工做進程都是單線程且獨立運行,負責獲取新鏈接並進行處理。進程之間經過共享內存進行通訊,諸如緩存數據,會話持續化數據(ession persistence data),以及其餘共享資源。

4、F5的負載均衡功能

其實看到Nginx的原理和功能,是否是以爲已經不須要F5了?固然也不是,F5畢竟是負載均衡的老前輩,一直以來都以功能強大,性能穩定著稱,不少功能實際上是軟負載沒法作到的。

F5 BIG-IP用做HTTP負載均衡器的主要功能:

一、F5 BIG-IP提供12種靈活的算法將全部流量均衡的分配到各個服務器,而面對用戶,只是一臺虛擬服務器。

二、F5 BIG-IP能夠確認應用程序可否對請求返回對應的數據。假如F5 BIG-IP後面的某一臺服務器發生服務中止、死機等故障,F5會檢查出來並將該服務器標識爲宕機,從而不將用戶的訪問請求傳送到該臺發生故障的服務器上。這樣,只要其它的服務器正常,用戶的訪問就不會受到影響。宕機一旦修復,F5 BIG-IP就會自動查證應用保證對客戶的請求做出正確響應並恢復向該服務器傳送。

三、F5 BIG-IP具備動態Session的會話保持功能,筆者也是在網站中使用的F5將用戶IP與Session經過F5進行的綁定,使其Session保持一致。

四、F5 BIG-IP的iRules功能能夠作HTTP內容過濾,根據不一樣的域名、URL,將訪問請求傳送到不一樣的服務器。

5、兩者對比

F5,硬件

優勢:可以直接經過智能交換機實現,處理能力更強,並且與系統無關,負載性能強,更適用於一大堆設備、大訪問量、簡單應用。

缺點:成本高,除設備價格高昂,並且配置冗餘,很難想象後面服務器作一個集羣,但最關鍵的負載均衡設備倒是單點配置,沒法有效掌握服務器及應用狀態。

硬件負載均衡,通常都無論實際系統與應用的狀態,而只是從網絡層來判斷,因此有時候系統處理能力已經不行了,但網絡可能還來得及反應(這種狀況很是典型,好比應用服務器後面內存已經佔用不少,但尚未完全不行,若是網絡傳輸量不大就未必在網絡層能反映出來)

Nginx,軟負載

優勢:基於系統與應用的負載均衡,可以更好地根據系統與應用的情況來分配負載。這對於複雜應用是很重要的,性價比高,實際上若是幾臺服務器,用F5之類的硬件產品顯得有些浪費,而用軟件就要合算得多,由於服務器同時還能夠跑應用、作集羣等。

缺點:負載能力受服務器自己性能的影響,性能越好,負載能力越大。

結語

其實仍是如筆者最初說到的,若是不差錢,徹底能夠直接上F5,同時配以Nginx做爲負載均衡及web容器,處理大數據量的用戶併發徹底沒問題,若是預算不夠,其實Nginx目前也能知足大多數用戶需求了,固然也不能迷信負載均衡,對咱們IT工做者來講的話,程序、SQL等涉及數據處理的業務邏輯的地方,不管是架構仍是代碼亦或是模型的合理性,其重要性永遠是要高於中間件的,這點想必是每位ITer的共鳴。

相關文章
相關標籤/搜索