談談nginx和lvs各自的優缺點以及使用

        在最開始呢,我們先說一下什麼叫負載均衡,負載均衡呢,就是將一批請求,根據請求的內容,分發到不一樣的後端去進行相應的處理,從而提供負載分擔,主備切換等功能。
        
        對於不一樣的負載均衡軟件,有不一樣的流量分發算法,今天,咱們最市面上比較主流的兩種負載均衡作一個對比,看看他們分別的優缺點,以及在不少狀況下如何去作配合。
 
【四層和七層】
        首先,說說四層和七層的區別;
                四層負載均衡,指的是IP+端口的負載均衡;
                七層負載均衡,指的是基於WEB請求,URL等應用層信息的負載均衡。
                固然,同理,還有基於MAC地址的二層負載均衡和基於IP地址的三層負載均衡。
 
                四層負載均衡,主要分析IP層和TCP/UDP層。
                七層負載均衡,要分析應用層協議,好比HTTP協議,URL,cookie等信息。
 
【關於LVS】
        LVS的負載能力很強,由於其工做模式很是簡單,僅進行請求的分發,並且其工做在第四層,沒有流量,在效率方面最高。
        LVS是在四層,能夠對幾乎全部的應用做負載均衡。
        可是LVS對於故障後端感知並不敏感,好比在DR模式下,要是有一個後端服務器沒有配置VIP,就會致使請求的一部分數據會直接丟失。
        且LVS對於網絡環境的穩定性要求較高,若是請求失敗了,只能依賴於前端的應用自身的重試機制,負載均衡不對請求進行從新下發。
        並且LVS也很受限於網絡架構,在設計之初就要考慮到網絡架構是否知足LVS負載的前置條件。
 
【關於nginx】
        一樣的,nginx也能夠用於負載均衡,可是因爲nginx須要對源端/目的端都創建鏈接,因此處理流量的速度受限於機器I/O,CPU內存等一系列配置,因此nginx的負載能力相對較差。
        nginx安裝,配置都比較簡單,與LVS對比,nginx不須要很嚴格的網絡架構,只要網絡能夠聯通便可。
        且nginx自身的重試機制,能夠保證請求下發失敗以後,會從新下發到健康的後端上。
        可是,nginx由於沒有現成的熱備機制,因此,存在單點故障的問題,通常須要搭配keepalived使用
        不過,nginx做爲一款應用層負載均衡(後來引入stream模塊以後,四層也支持了),能夠提供負載分擔,貯備切換,HTTPS寫在,帶寬限速,隱藏真實IP,隱藏真實端口,屏蔽攻擊等能力,這是LVS所不能提供的。
 
【對比】
        lvs和nginx都是如今很主流的負載均衡方式,他們各有優缺點,在生產環境須要根據其特色作選擇。
 
  LVS Nginx
  四層 四層/七層
抗負載能力
配置性
可配置性低
同時也減小了人爲出錯的機率
可配置性高
能夠配置一些高級功能
穩定性
穩定性高
有完整的雙機熱備方案
穩定性低,有單機故障
無現成的雙機熱備方案
網絡架構依賴
強依賴
很是依賴網絡架構設計
固然能夠採用比較簡單的NAT方式解決此問題
無依賴
網絡穩定性依賴
依賴
數據包分發到壞的後端,不會從新分發,會直接返回錯誤
不依賴
數據包分發到壞的後端並返回錯誤後,會嘗試從新分發到健康的後端
網絡流量
僅請求流量通過lvs的網絡,響應流量由後端服務器的網絡返回。
FULL_NAT同Nginx。
全部的請求和響應流量都會通過nginx
宿主機性能要求
要求較低
lvs僅僅作分發請求,流量並不從它自己出去,因此瓶頸僅僅受限於網絡帶寬和網卡性能
要求較高
由於nginx須要對源端和目的端都單獨創建鏈接,中間還涉及到一些數據包的解析處理,因此依賴宿主機的I/O性能和CPU內存
轉發方式
同步轉發
lvs服務器接收到請求以後,當即redirect到一個後端服務器,由客戶端直接和後端服務器創建鏈接。
異步轉發
在保持客戶端鏈接的同時,發起一個相同內容的新請求到後端,等後端返回結果後,由nginx返回給客戶端
其餘  
支持rewrite重寫規則:可以根據域名、url的不一樣,將http請求分到不一樣的後端服務器羣組。
節省帶寬:支持gzip壓縮,能夠添加瀏覽器本地緩存的header頭。
 
【二者配合】
        在使用上,通常最前端所採起的的策略應是lvs,也就是dns的指向應爲lvs均衡器,主要緣由在於nginx雖然功能強大,可是看成爲後端的服務器規模龐大時,nginx的網絡帶寬就成了一個巨大的瓶頸。
        可是當lvs做爲負載均衡的話,一旦後端接受到請求的服務器出了問題,那麼此次請求就失敗了。
        
        因此在不少狀況下,nginx會做爲lvs的節點進行負載均衡,這樣,既能夠避免nginx的性能形成很嚴重的帶寬瓶頸,也能夠利用nginx的錯誤重傳避免lvs一錘子買賣,還能利用nginx的各類高級功能,包括https卸載,報文頭修改等。
相關文章
相關標籤/搜索