Nginx的優勢是:web
一、工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構正則表達式
它的正則規則比HAProxy更爲強大和靈活,這也是它目前普遍流行的主要緣由之一算法
Nginx單憑這點可利用的場合就遠多於LVS了。數據庫
二、Nginx對網絡穩定性的依賴很是小,理論上能ping通就就能進行負載功能,這個也是它的優點之一後端
相反LVS對網絡穩定性依賴比較大,這點本人深有體會;緩存
三、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來服務器
LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。cookie
四、能夠承擔高負載壓力且穩定,在硬件不差的狀況下通常能支撐幾萬次的併發量,負載度比LVS相對小些。網絡
五、Nginx能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測。好比用戶正在上傳一個文件,而處理該上傳的節點恰好在上傳過程當中出現故障,Nginx會把上傳切到另外一臺服務器從新處理,而LVS就直接斷掉了session
若是是上傳一個很大的文件或者很重要的文件的話,用戶可能會所以而不滿。
六、Nginx不只僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器
LNMP也是近幾年很是流行的web架構,在高流量的環境中穩定性也很好。
七、Nginx如今做爲Web反向加速緩存愈來愈成熟了,速度比傳統的Squid服務器更快,可考慮用其做爲反向代理加速器
八、Nginx可做爲中層反向代理使用,這一層面Nginx基本上無對手,惟一能夠對比Nginx的就只有lighttpd了
不過lighttpd目前尚未作到Nginx徹底的功能,配置也不那麼清晰易讀,社區資料也遠遠沒Nginx活躍
九、Nginx也可做爲靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區很是活躍,第三方模塊也不少
Nginx的缺點是:
一、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點
二、對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過url來檢測
不支持Session的直接保持,但能經過ip_hash來解決
LVS:使用Linux內核集羣實現一個高性能、高可用的負載均衡服務器
它具備很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的優勢是:
一、抗負載能力強、是工做在網絡4層之上僅做分發之用,沒有流量的產生
這個特色也決定了它在負載均衡軟件裏的性能最強的,對內存和cpu資源消耗比較低
二、配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西
因此並不須要太多接觸,大大減小了人爲出錯的概率
三、工做穩定,由於其自己抗負載能力很強,自身有完整的雙機熱備方案
如LVS+Keepalived,不過咱們在項目實施中用得最多的仍是LVS/DR+Keepalived
四、無流量,LVS只分發請求,而流量並不從它自己出去,這點保證了均衡器IO的性能不會收到大流量的影響。
五、應用範圍較廣,由於LVS工做在4層,因此它幾乎可對全部應用作負載均衡,包括http、數據庫、在線聊天室等
LVS的缺點是:
一、軟件自己不支持正則表達式處理,不能作動靜分離
而如今許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優點所在
二、若是是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了
特別後面有Windows Server的機器的話,若是實施及配置還有維護過程就比較複雜了
相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy的特色是:
一、HAProxy也是支持虛擬主機的。
二、HAProxy的優勢可以補充Nginx的一些缺點,好比支持Session的保持,Cookie的引導
同時支持經過獲取指定的url來檢測後端服務器的狀態
三、HAProxy跟LVS相似,自己就只是一款負載均衡軟件
單純從效率上來說HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的
四、HAProxy支持TCP協議的負載均衡轉發,能夠對MySQL讀進行負載均衡
對後端的MySQL節點進行檢測和負載均衡,你們能夠用LVS+Keepalived對MySQL主從作負載均衡
五、HAProxy負載均衡策略很是多,HAProxy的負載均衡算法如今具體有以下8種:
①roundrobin,表示簡單的輪詢,這個很少說,這個是負載均衡基本都具有的;
② static-rr,表示根據權重,建議關注;
③leastconn,表示最少鏈接者先處理,建議關注;
④ source,表示根據請求源IP,這個跟Nginx的IP_hash機制相似
咱們用其做爲解決session問題的一種方法,建議關注;
⑤ri,表示根據請求的URI;
⑥rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。