Nginx負載均衡和LVS負載均衡的比較分析

lvs和nginx都可以用作多機負載的方案,它們各有優缺,在生產環境中需要好好分析實際情況并加以利用。

首先提醒,做技術切不可人云亦云,我云即你云;同時也不可太趨向保守,過于相信舊有方式而等別人來幫你做墊被測試。把所有即時聽說到的好東西加以鉆研,從而提高自己對技術的認知和水平,乃是一個好習慣。

下面來分析一下兩者:

一、lvs的優勢:

1、抗負載能力強,因為lvs工作方式的邏輯是非常之簡單,而且工作在網絡4層僅做請求分發之用,沒有流量,所以在效率上基本不需要太過考慮。在我手里的lvs,僅僅出過一次問題:在并發最高的一小段時間內均衡器出現丟包現象,據分析為網絡問題,即網卡或linux2.4內核的承載能力已到上限,內存和cpu方面基本無消耗。

2、配置性低,這通常是一大劣勢,但同時也是一大優勢,因為沒有太多可配置的選項,所以除了增減服務器,并不需要經常去觸碰它,大大減少了人為出錯的幾率。

3、工作穩定,因為其本身抗負載能力很強,所以穩定性高也是順理成章,另外各種lvs都有完整的雙機熱備方案,所以一點不用擔心均衡器本身會出什么問題,節點出現故障的話,lvs會自動判別,所以系統整體是非常穩定的。

4、無流量,上面已經有所提及了。lvs僅僅分發請求,而流量并不從它本身出去,所以可以利用它這點來做一些線路分流之用。沒有流量同時也保住了均衡器的IO性能不會受到大流量的影響。

5、基本上能支持所有應用,因為lvs工作在4層,所以它可以對幾乎所有應用做負載均衡,包括http、數據庫、聊天室等等。

另:lvs也不是完全能判別節點故障的,譬如在wlc分配方式下,集群里有一個節點沒有配置VIP,會使整個集群不能使用,這時使用wrr分配方式則會丟掉一臺機。目前這個問題還在進一步測試中。所以,用lvs也得多多當心為妙。

二、nginx和lvs作對比的結果

1、nginx工作在網絡的7層,所以它可以針對http應用本身來做分流策略,比如針對域名、目錄結構等,相比之下lvs并不具備這樣的功能,所以nginx單憑這點可利用的場合就遠多于lvs了;但nginx有用的這些功能使其可調整度要高于lvs,所以經常要去觸碰觸碰,由lvs的第2條優點看,觸碰多了,人為出問題的幾率也就會大。

2、nginx對網絡的依賴較小,理論上只要ping得通,網頁訪問正常,nginx就能連得通,nginx同時還能區分內外網,如果是同時擁有內外網的節點,就相當于單機擁有了備份線路;lvs就比較依賴于網絡環境,目前來看服務器在同一網段內并且lvs使用direct方式分流,效果較能得到保證。另外注意,lvs需要向托管商至少申請多一個ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實得跟進學習很多有關網絡通信方面的知識,就不再是一個HTTP那么簡單了。

3、nginx安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日志打印出來。lvs的安裝和配置、測試就要花比較長的時間了,因為同上所述,lvs對網絡依賴比較大,很多時候不能配置成功都是因為網絡問題而不是配置問題,出了問題要解決也相應的會麻煩得多。

4、nginx也同樣能承受很高負載且穩定,但負載度和穩定度差lvs還有幾個等級:nginx處理所有流量所以受限于機器IO和配置;本身的bug也還是難以避免的;nginx沒有現成的雙機熱備方案,所以跑在單機上還是風險較大,單機上的事情全都很難說。

5、nginx可以檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點。目前lvs中ldirectd也能支持針對服務器內部的情況來監控,但lvs的原理使其不能重發請求。重發請求這點,譬如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,nginx會把上傳切到另一臺服務器重新處理,而lvs就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而惱火。

6、nginx對請求的異步處理可以幫助節點服務器減輕負載,假如使用apache直接對外服務,那么出現很多的窄帶鏈接時apache服務器將會占用大量內存而不能釋放,使用多一個nginx做apache代理的話,這些窄帶鏈接會被nginx擋住,apache上就不會堆積過多的請求,這樣就減少了相當多的內存占用。這點使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。lvs沒有這些功能,也就無法能比較。

7、nginx能支持http和email(email的功能估計比較少人用),lvs所支持的應用在這點上會比nginx更多。

在使用上,一般最前端所采取的策略應是lvs,也就是DNS的指向應為lvs均衡器,lvs的優點令它非常適合做這個任務。

重要的ip地址,最好交由lvs托管,比如數據庫的ip、webservice服務器的ip等等,這些ip地址隨著時間推移,使用面會越來越大,如果更換ip則故障會接踵而至。所以將這些重要ip交給lvs托管是最為穩妥的,這樣做的唯一缺點是需要的VIP數量會比較多。

nginx可作為lvs節點機器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。當然這一層面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所遜色于nginx。

nginx也可作為中層代理使用,這一層面nginx基本上無對手,唯一可以撼動nginx的就只有lighttpd了,不過lighttpd目前還沒有能做到nginx完全的功能,配置也不那么清晰易讀。另外,中層代理的IP也是重要的,所以中層代理也擁有一個VIP和lvs是最完美的方案了。

nginx也可作為網頁靜態服務器,不過超出了本文討論的范疇,簡單提一下。

具體的應用還得具體分析,如果是比較小的網站(日PV<1000萬),用nginx就完全可以了,如果機器也不少,可以用DNS輪詢,lvs所耗費的機器還是比較多的;大型網站或者重要的服務,機器不發愁的時候,要多多考慮利用lvs。

轉載于:https://www.cnblogs.com/chenshoubiao/p/4792638.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374512.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374512.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374512.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QuartZ.net 常用配置說明

配置文件說明app.config中的quartz部分<quartz><!-- configure Thread Pool--><addkey"quartz.threadPool.type"value"Quartz.Simpl.SimpleThreadPool,Quartz" /><addkey"quartz.threadPool.threadCount"value"10&quo…

qopenglwidget 透明_廊坊透明真空袋用途-祺泰包裝

功能方面&#xff1a;平面真空袋抽真空后易形成不平整&#xff0c;不均勻的現象。目前&#xff0c;真空包裝主要用于食品的包裝&#xff0c;如肉類、谷類加工食品以及易氧化變質的食品&#xff0c;也可用于機械零件、儀器和羽絨制品、毛制品等蓬松制品的包裝。在超shi中&#x…

使用Spring Data Neo4j進行領域建模

大家好&#xff0c;威利在這里。 上次我告訴您&#xff0c;我正在使用Neo4j和Spring Data Neo4j構建Skybase CMDB&#xff0c;我很高興收到很多對此的積極反饋。 我展示了一些代碼&#xff0c;但沒有那么多。 在本文中&#xff0c;我將向您展示如何使用Spring Data Neo4j在Skyb…

mysql 阿里內核人員

丁奇 http://dinglin.javaeye.com/鳴嵩 曹偉-鳴嵩 (新浪微博)彭立勛 http://www.penglixun.com/皓庭 http://wqtn22.iteye.com/項仲 http://blog.csdn.net/wudongxu劍川 http://gaoyusong.com/武藏 http://ybbct.iteye.com/祁奚 http://i.mtime.com/844165/褚霸 http://blog.y…

linux基本命令學習

1. 執行文件&#xff1a; ./文件 &#xff1a;執行該文件 sh startup.sh 執行該文件 2. Vi編輯 vi命令&#xff1a; :w 保存文件但不退出 :w file 將修改另外保存到file中&#xff0c;不退出 :w! 強制保存&#xff0c;不推出 :wq 保存文件并退出 :wq! 強制保存文件&#xff0…

506. 相對名次

方法一 復制數組排序返回對應下標 class Solution {public String[] findRelativeRanks(int[] score) {int n score.length;int[] newScore Arrays.copyOf(score,n);Arrays.sort(newScore);String[] res new String[n];for(int i 0;i<n;i){int rank Arrays.binarySear…

Java壓縮

在最近的項目中&#xff0c;我們不得不做一些我個人從未真正看過的事情。 壓縮。 我們需要拍幾個文件和圖像&#xff0c;將它們壓縮并提供給FTP使用&#xff0c;是的&#xff0c;總有一天&#xff0c;感覺確實回到了90年代。 除了過去的FTP之行外&#xff0c;它還是一個很好的機…

蘇州面對公司發布

假設您對我們這種創業型公司和我們的發展方向感興趣的話&#xff0c;我們希望通過以下10個問答進一步添加兩方的了解。我們希望看到的是您經過深思熟慮的、對公司和自己的前途負責任的謹慎回答。而不是應付公差式的輕描淡寫&#xff08;我們會依據您回答質量的高低決定是否邀請…

linux多線程_Java+Linux,深入內核源碼講解多線程之進程

之前寫了兩篇文章&#xff0c;都是針對Linux這個系統的&#xff0c;為什么?我為什么這么喜歡寫這個系統的知識&#xff0c;可能就是為了今天的內容多線程系列&#xff0c;現在多線程不是一個面試重點 啊&#xff0c;那如果你能深入系統內核回答這個知識點&#xff0c;面試官會…

594. 最長和諧子序列

和諧數組是指一個數組里元素的最大值和最小值之間的差別 正好是 1 。 現在&#xff0c;給你一個整數數組 nums &#xff0c;請你在所有可能的子序列中找到最長的和諧子序列的長度。 數組的子序列是一個由數組派生出來的序列&#xff0c;它可以通過刪除一些元素或不刪除元素、…

解決git clone報錯SSL certificate problem

Git新手一枚&#xff0c;今天進行git clone操作時發生如下問題&#xff1a;提示無效的鏈接error: SSL certificate problem: Invalid certificate chain while accessing https://githib.com/...XXXX.git fatal: HTTP request failed解決方法也很簡單&#xff0c;一條命令就搞定…

使用內存映射文件獲取巨大的矩陣

總覽 矩陣可能真的很大&#xff0c;有時甚至比一個數組中可以容納的更大。 您可以通過具有多個數組來擴展最大大小&#xff0c;但這會使堆大小確實很大且效率低下。 一種替代方法是在內存映射文件上使用包裝器。 內存映射文件的優點是它們對堆的影響很小&#xff0c;并且可以由…

ipad連接電腦_這些應用讓iPad生產力分分鐘UP

IT時報見習記者 錢奕昀用iPad辦公這件事&#xff0c;多年前網友就在討論&#xff0c;最常見的還是那句“買前生產力&#xff0c;買后愛奇藝”。很長一段時間里&#xff0c;它的生產力屬性都是弱于娛樂屬性的。其實&#xff0c;作為PC端和移動端的形態中和&#xff0c;iPad可以…

Mac OSX 快捷鍵命令行

ctrlshift 快速放大dock的圖標會暫時放大&#xff0c;而如果你開啟了dock放大CommandOptionW 將所有窗口關閉CommandW 將當前窗口關閉(可以關閉Safari標簽欄,很實用) CommandOptionM …

將JavaFX 2.0與Swing和SWT集成

JavaFX 2.0對JavaFX的改進之一是可以更輕松地與Swing和SWT進行互操作 。 一些在線資源記錄了如何完成此操作。 其中包括將JavaFX集成到Swing應用程序和SWT Interop中 。 但是&#xff0c;在有效的類級Javadoc文檔的一個很好的示例中&#xff0c;各自的JavaFX類javafx.embed.swi…

iOS-如何返回某個字符串的拼音助記碼

我也是看了網上的一個示例代碼后&#xff0c;在它的基礎上進行的修改。因為項目上會用到&#xff0c;我相信很多人的項目上也會用到。所以實現后&#xff0c;也趕緊分享出來&#xff0c;希望后來人不需要花費時間了。 提示&#xff1a;這里用到了正則表達式&#xff0c;使用了一…

wifi rssi 計算 距離_WiFi和WLAN是一樣的?真相在這里~別再傻傻分不清了

我們通常上網的時候會說連接WiFi如果注意到無線網絡的名稱就會發現手機的連接顯示是WLAN別再將WiFI和WLAN搞混了&#xff01;二者的定義WLANWLAN的全稱為 Wireless Local Area Networks,中文意思為無線局域網絡&#xff0c;是一種數據傳輸系統。它是利用射頻技術進行數據傳輸&a…

【Shell劇本練習】得出的結論是當前用戶

推斷是否當前用戶root。假設是暗示root用戶&#xff0c;假設而不是提示對于普通用戶#!/bin/bash #title: testus.sh #author: orangleliu #date: 2014-08-09 #desc: get current user, if it is root user, tell us it is super user or tell us is a common user# #Function C…

播放框架模塊:分而治之

通常情況是您開始開發應用程序并繼續滿足要求。 當您的應用程序變得更大時&#xff0c;您開始意識到將其分為不同組件的便利。 而且&#xff0c;當您開發第二個或第三個應用程序時&#xff0c;您開始認識到可以在不同應用程序之間重用的某些功能。 這是模塊化應用程序的兩個很好…

Alpha階段項目總結

1.我們的軟件要解決什么問題&#xff1f;是否定義得很清楚&#xff1f;是否對典型用戶和典型場景有清晰的描述&#xff1f; 我們的軟件是一款針對健康飲食而做的一款飲食健康軟件&#xff0c;對生活中我們經常遲到的很多事物組合都進行了詳細的注解&#xff0c;用戶可以清楚地看…