【轉】淺談Nginx負載均衡與F5的區別

来源:http://www.cnblogs.com/zdd-java/archive/2017/02/21/6426236.html
-Advertisement-
Play Games

前言 筆者最近在負責某集團網站時,同時用到了Nginx與F5,如圖所示,負載均衡器F5作為處理外界請求的第一道“牆”,將請求分發到web伺服器後,web伺服器上的Nginx再進行處理,靜態內容直接訪問本地門戶,動態數據則通過反向代理指向內網服務。 其實Nginx和F5這兩者均可用作網站負載均衡,那二 ...


前言

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

 

 

李源1.png

其實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,還是挺壯觀的。

22.png

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的共鳴。

 

原文:http://www.ideadata.com.cn/wisdomAction/readWisdom.do?id=75

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 頁面里經常要用到文件上傳的功能,而且要求頁面不刷新,先說一下原理:頁面里放一個file控制項和submit按鈕,外面用form表單包住,給form表單加上對應的屬性值,action、method、entype、name,到這一步,能上傳文件了,但是這樣上傳文件會刷新頁面,這不是我們想要的。我們要的是文 ...
  • 在學習Java的IO部分時有如下代碼: 一般都要將關閉資源.close()放在finally代碼塊中,防止try中發生異常資源沒有關閉,可上邊代碼報了IOException錯誤,當file.close();寫在try塊最後就沒有問題,原因是我把文件聲名FileInputStream file = n ...
  • 1、JDK JDK(Java Development Kit) 是 Java 語言的軟體開發工具包(SDK)。 JDK(Java Development Kit) 是 Java 語言的軟體開發工具包(SDK)。 SE(J2SE),standard edition,標準版,是我們通常用的一個版本,從J ...
  • 一、場景:有一個氣象站,檢測氣象後發佈氣象信息,有3個觀察者會接受氣象的發佈信息。 二、普通的處理方式: 三、觀察者模式處理方式: OO原則:為交互對象之間的松耦合設計而努力。(這個是第四條,後續還有幾條) 松耦合的設計之所以能讓我們建立有彈性的OO系統,能夠應對變化,是因為對象之間的互相依賴降到了 ...
  • 一、概述 建造者模式很容易讓人想到建房子,不管建剛需房、改善房還是別墅,它們都離不開地基、柱子、層面和牆體這些組成部分,建築工人就是把這些組成部分一個個建起來,最後連成一體建出一棟棟樓房。 來看看建造者模式的定義,將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。建房子的過程 ...
  • 一:現實場景 有時候在開發的過程中,我們經常會根據某個狀態的值,寫出很多的ifelse邏輯,比如拿項目裡面的案例來說,如果當前發送的是彩信,此種狀態需要如何給 實體賦值,如果是簡訊,郵件又是其他方式的賦值,等等此類,這種情況下一般會寫出如下if判斷,對吧,真實代碼如下: 上面的代碼還是非常簡單明瞭的 ...
  • 在面向對象軟體開發過程中,一些有經驗的軟體開發人員通常會採用設計模式來解決一些日常工作中的一些問題。設計模式是前人在軟體開發的過程中總結出來的一些解決問題的方案,並且經受住了時間的考驗和廣大軟體開發人員的不斷驗證。在軟體開發過程中,如果我們合理的使用設計模式可以提高代碼的復用性和可維護性。為了保證引 ...
  • 封裝矩形構造函數,扇形構造函數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...