浅谈Nginx负载均衡与F5(硬件)的区别
轉(zhuǎn)自:淺談Niginx負(fù)載均衡與F5的區(qū)別——IDEADATA.Inc?
?
前言
筆者最近在負(fù)責(zé)某集團(tuán)網(wǎng)站時,同時用到了Nginx與F5,如圖所示,負(fù)載均衡器F5作為處理外界請求的第一道“墻”,將請求分發(fā)到web服務(wù)器后,web服務(wù)器上的Nginx再進(jìn)行處理,靜態(tài)內(nèi)容直接訪問本地門戶,動態(tài)數(shù)據(jù)則通過反向代理指向內(nèi)網(wǎng)服務(wù)。?
?
其實(shí)Nginx和F5這兩者均可用作網(wǎng)站負(fù)載均衡,那二者有什么區(qū)別呢?筆者在此淺談下Nginx與F5的一些區(qū)別。
目前很多網(wǎng)站或應(yīng)用在設(shè)計(jì)之初都會為高并發(fā)的數(shù)據(jù)請求做負(fù)載均衡,不差錢的土豪用戶一般會直接買F5硬件設(shè)備作為其負(fù)載均衡器,原因不用多說,其功能強(qiáng)大,不僅包含負(fù)載均衡還包括應(yīng)用交換、會話交換、狀態(tài)監(jiān)控、智能網(wǎng)絡(luò)地址轉(zhuǎn)換、通用持續(xù)性、響應(yīng)錯誤處理、IPv6網(wǎng)關(guān)、高級路由、智能端口鏡像、SSL加速、智能HTTP壓縮、TCP優(yōu)化、第7層速率整形、內(nèi)容緩沖、內(nèi)容轉(zhuǎn)換、連接加速、高速緩存、Cookie加密、選擇性內(nèi)容加密、應(yīng)用攻擊過濾、拒絕服務(wù)(DoS)攻擊和SYN Flood保護(hù)、防火墻過濾等功能,是不是很強(qiáng)大?當(dāng)然價格也是讓人很“心動”。而一些預(yù)算并不高,正在初期發(fā)展的網(wǎng)站來說,Nginx這種軟負(fù)載也能很好的滿足其數(shù)據(jù)分流的需求,下面我們先來看看Nginx是如何滿足我們的負(fù)載均衡需求的:
一、什么是Nginx:
Nginx:高性能的 HTTP和反向代理服務(wù)器,同時支持作為IMAP/POP3/SMTP代理服務(wù)器。目前被很多網(wǎng)站應(yīng)用為其HTTP軟負(fù)載均衡器。高效的性能、良好的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗正逐漸被大型互聯(lián)網(wǎng)公司所青睞。例如騰訊、淘寶、新浪等大型門戶及商業(yè)網(wǎng)站都采用Nginx進(jìn)行HTTP網(wǎng)站的數(shù)據(jù)分流。
二、Nginx功能特點(diǎn):
1、工作在網(wǎng)絡(luò)的7層之上,可以針對http應(yīng)用做一些分流的策略,比如針對域名、目錄結(jié)構(gòu);?
2、Nginx對網(wǎng)絡(luò)的依賴比較小;?
3、Nginx安裝和配置比較簡單,測試起來比較方便;?
4、可以承擔(dān)高的負(fù)載壓力且穩(wěn)定,一般能支撐超過1萬次的并發(fā);?
5、Nginx可以通過端口檢測到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點(diǎn),不過其中缺點(diǎn)就是不支持url來檢測;?
6、Nginx對請求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載;?
7、Nginx能支持http和Email;
三、原理?
Nginx采用的是反向代理技術(shù),代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器。反向代理負(fù)載均衡技術(shù)是把將來自internet上的連接請求以反向代理的方式動態(tài)地轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的多臺服務(wù)器進(jìn)行處理,從而達(dá)到負(fù)載均衡的目的。
具體是怎么運(yùn)行的呢?其實(shí)當(dāng)Nginx啟動后,其工作進(jìn)程是由配置文件對其進(jìn)行初始化的,主進(jìn)程處理配置文件中的讀取、端口綁定等特權(quán)操作,之后創(chuàng)建一小組子進(jìn)程,由這些子進(jìn)程進(jìn)行請求的處理,同時緩存加載器加載硬盤中緩存到內(nèi)存中,接著退出,保證資源開銷始終保持著較低的狀態(tài)。
可以看出,創(chuàng)建的子進(jìn)程其實(shí)在負(fù)責(zé)所有的工作,處理網(wǎng)絡(luò)連接、硬盤讀寫操作、以及上游服務(wù)器通信。
如圖所示:masert process是其主線程,worker process 顧名思義,“我是具體干活的啦”,筆者截圖的進(jìn)程還是比較少的,因?yàn)檫@是自己的服務(wù)器,沒有太多服務(wù),實(shí)際業(yè)務(wù)中有可能會出現(xiàn)幾十個worker process,還是挺壯觀的。?
?
Nginx推薦的配置是,一個工作進(jìn)程對應(yīng)一個CPU內(nèi)核,確保硬件資源的有效利用。
一旦NGINX服務(wù)起來,僅有工作進(jìn)程在忙,每個工作進(jìn)程采用非阻塞地方式處理多個連接,降低上下文切換的次數(shù)。
每個工作進(jìn)程都是單線程且獨(dú)立運(yùn)行,負(fù)責(zé)獲取新連接并進(jìn)行處理。進(jìn)程之間通過共享內(nèi)存進(jìn)行通信,諸如緩存數(shù)據(jù),會話持續(xù)化數(shù)據(jù)(ession persistence data),以及其他共享資源。
四、F5的負(fù)載均衡功能
其實(shí)看到Nginx的原理和功能,是不是覺得已經(jīng)不需要F5了?當(dāng)然也不是,F5畢竟是負(fù)載均衡的老前輩,一直以來都以功能強(qiáng)大,性能穩(wěn)定著稱,很多功能其實(shí)是軟負(fù)載無法做到的。
F5 BIG-IP用作HTTP負(fù)載均衡器的主要功能:
1、F5 BIG-IP提供12種靈活的算法將所有流量均衡的分配到各個服務(wù)器,而面對用戶,只是一臺虛擬服務(wù)器。
2、F5 BIG-IP可以確認(rèn)應(yīng)用程序能否對請求返回對應(yīng)的數(shù)據(jù)。假如F5 BIG-IP后面的某一臺服務(wù)器發(fā)生服務(wù)停止、死機(jī)等故障,F5會檢查出來并將該服務(wù)器標(biāo)識為宕機(jī),從而不將用戶的訪問請求傳送到該臺發(fā)生故障的服務(wù)器上。這樣,只要其它的服務(wù)器正常,用戶的訪問就不會受到影響。宕機(jī)一旦修復(fù),F5 BIG-IP就會自動查證應(yīng)用保證對客戶的請求作出正確響應(yīng)并恢復(fù)向該服務(wù)器傳送。
3、F5 BIG-IP具有動態(tài)Session的會話保持功能,筆者也是在網(wǎng)站中使用的F5將用戶IP與Session通過F5進(jìn)行的綁定,使其Session保持一致。
4、F5 BIG-IP的iRules功能可以做HTTP內(nèi)容過濾,根據(jù)不同的域名、URL,將訪問請求傳送到不同的服務(wù)器。
五、二者對比
F5,硬件
優(yōu)點(diǎn):能夠直接通過智能交換機(jī)實(shí)現(xiàn),處理能力更強(qiáng),而且與系統(tǒng)無關(guān),負(fù)載性能強(qiáng),更適用于一大堆設(shè)備、大訪問量、簡單應(yīng)用。?
缺點(diǎn):成本高,除設(shè)備價格高昂,而且配置冗余,很難想象后面服務(wù)器做一個集群,但最關(guān)鍵的負(fù)載均衡設(shè)備卻是單點(diǎn)配置,無法有效掌握服務(wù)器及應(yīng)用狀態(tài)。?
硬件負(fù)載均衡,一般都不管實(shí)際系統(tǒng)與應(yīng)用的狀態(tài),而只是從網(wǎng)絡(luò)層來判斷,所以有時候系統(tǒng)處理能力已經(jīng)不行了,但網(wǎng)絡(luò)可能還來得及反應(yīng)(這種情況非常典型,比如應(yīng)用服務(wù)器后面內(nèi)存已經(jīng)占用很多,但還沒有徹底不行,如果網(wǎng)絡(luò)傳輸量不大就未必在網(wǎng)絡(luò)層能反映出來)
Nginx,軟負(fù)載
優(yōu)點(diǎn):基于系統(tǒng)與應(yīng)用的負(fù)載均衡,能夠更好地根據(jù)系統(tǒng)與應(yīng)用的狀況來分配負(fù)載。這對于復(fù)雜應(yīng)用是很重要的,性價比高,實(shí)際上如果幾臺服務(wù)器,用F5之類的硬件產(chǎn)品顯得有些浪費(fèi),而用軟件就要合算得多,因?yàn)榉?wù)器同時還可以跑應(yīng)用、做集群等。?
缺點(diǎn):負(fù)載能力受服務(wù)器本身性能的影響,性能越好,負(fù)載能力越大。
結(jié)語
其實(shí)還是如筆者最初說到的,如果不差錢,完全可以直接上F5,同時配以Nginx作為負(fù)載均衡及web容器,處理大數(shù)據(jù)量的用戶并發(fā)完全沒問題,如果預(yù)算不夠,其實(shí)Nginx目前也能滿足大多數(shù)用戶需求了,當(dāng)然也不能迷信負(fù)載均衡,對我們IT工作者來說的話,程序、SQL等涉及數(shù)據(jù)處理的業(yè)務(wù)邏輯的地方,無論是架構(gòu)還是代碼亦或是模型的合理性,其重要性永遠(yuǎn)是要高于中間件的,這點(diǎn)想必是每位ITer的共鳴。
來源:https://blog.csdn.net/a58YYXG/article/details/80350987
總結(jié)
以上是生活随笔為你收集整理的浅谈Nginx负载均衡与F5(硬件)的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是PE
- 下一篇: Nginx反向代理,负载均衡,redis