印象中haproxy,nginx.lvs都和負載均衡掛鉤,但是一直不知道各自有什麼區別和特點,今天在網上搜尋了下,記錄下來,以便後面需要了檢視。
總歸一句話,haproxy和nginx除了做負載均衡外都可以做靜態檔案伺服器,另外,nginx可以作為web伺服器使用。另外,有乙個區分就是:
lvs和f5(硬體負載方案)是四層負載,而haproxy和nginx是七層負載。具體區別及特點見下文:
haproxy特點:
1、haproxy是支援虛擬主機的,以前有朋友說這個不支援虛擬主機,我這裡特此更正一下。
2、能夠補充nginx的一些缺點比如session的保持,cookie的引導等工作
3、支援url檢測後端的伺服器出問題的檢測會有很好的幫助。
4、它跟lvs一樣,本身僅僅就只是一款負載均衡軟體;單純從效率上來講haproxy更會比nginx有更出色的負載均衡速度,在併發處理上也是優於nginx的。
5、haproxy可以對mysql讀進行負載均衡,對後端的mysql節點進行檢測和負載均衡,不過在後端的mysql sl**es數量超過10台時效能不如lvs,所以我向大家推薦lvs+keepalived。
6、haproxy的演算法現在也越來越多了,具體有如下8種:
roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
static-rr,表示根據權重,建議關注;
leastconn,表示最少連線者先處理,建議關注;
ri,表示根據請求的uri;
rl_param,表示根據請求的url引數'balance url_param' requires an url parameter name;
hdr(name),表示根據http請求頭來鎖定每一次http請求;
rdp-cookie(name),表示根據據cookie(name)來鎖定並雜湊每一次tcp請求。
lvs特點:
1、抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體裡的效能最強的;
2、配置性比較低,這是乙個缺點也是乙個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的機率;
3、工作穩定,自身有完整的雙機熱備方案,如lvs+keepalived和lvs+heartbeat,不過我們在專案實施中用得最多的還是lvs/dr+keepalived;
4、無流量,保證了均衡器io的效能不會收到大流量的影響;
5、應用範圍比較廣,可以對所有應用做負載均衡;
6、軟體本身不支援正則處理,不能做動靜分離,這個就比較遺憾了;其實現在許多**在這方面都有較強的需求,這個是nginx/haproxy+keepalived的優勢所在。
7、如果是**應用比較龐大的話,實施lvs/dr+keepalived起來就比較複雜了,特別後面有windows server應用的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,nginx/haproxy+keepalived就簡單多了。
nginx特點:
1、工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對網域名稱、目錄結構,它的正則規則比haproxy更為強大和靈活,這也是許多朋友喜歡它的原因之一;
2、nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
3、nginx安裝和配置比較簡單,測試起來比較方便;
4、也可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的併發量;
5、nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另乙個節點,不過其中缺點就是不支援url來檢測;
6、nginx僅能支援http和email,這樣就在適用範圍上面小很多,這個它的弱勢;
7、nginx不僅僅是一款優秀的負載均衡器/反向**軟體,它同時也是功能強大的web應用伺服器。lnmp現在也是非常流行的web架構,大有和以前最流行的lamp架構分庭抗爭之勢,在高流量的環境中也有很好的效果。
8、nginx現在作為web反向加速快取越來越成熟了,很多朋友都已在生產環境下投入生產了,而且反映效果不錯,速度比傳統的squid伺服器更快,有興趣的朋友可以考慮用其作為反向**加速器。
Haproxy LVS Nginx的優缺點總結
haproxy也是支援虛擬主機的 haproxy支援8種負載均衡策略 haproxy支援tcp協議的負載均衡 haproxy的優點能夠補充nginx的一些缺點,比如session的保持,cookie的引導,同時支援通過獲取指定url來檢測後端伺服器的狀態 haproxy跟lvs類似,本身就只是一款負...
單臨界區管理和多臨界區管理的效率對比
測試 struct test1 test1 void add void sub struct test2 test2 void add void sub int main auto thread pool thread pool instance auto start time timer get ...
ios swift 對比懶載入和普通賦值的區別
定義乙個字串的變數的方法 objc view plain copy 直接賦值 var str jobdeer 閉包方式 varstr string 簡化閉包,省略了等號和括號 varstr string objc view plain copy 閉包中可以定義get set方法。varstr str...