艾銻無(wú)限硬核:關(guān)于四層、七層負(fù)載均衡的區(qū)別
2020-03-18 17:52 作者:艾銻無(wú)限 瀏覽量:
馬云:年青人做好這十件事你離成功就不遠(yuǎn)了

第一件事:想清楚你要什么,你有什么,你要放棄什么?
一個(gè)人最難的不是把事情做成,而是想清楚自己真正要的是什么,大部分人是看到別人升官發(fā)財(cái)自己就想升官發(fā)財(cái),每一個(gè)人的優(yōu)勢(shì),天分,以及內(nèi)心渴望是不同的,要根據(jù)自己真心所想去追求,而不是被世相左右。
很多年青人有遠(yuǎn)大的目標(biāo)是好事,但也要看看自己有什么,不切實(shí)際的目標(biāo)只會(huì)讓你更快的放棄,而不是讓你持續(xù)的堅(jiān)持,既要仰望星空又要腳踏實(shí)地。
往往失敗最大的原因不是我們沒(méi)有能力,而是我們高估了自己的能力,覺(jué)得自己什么都能干,覺(jué)得自己應(yīng)該很多事一起干,不懂得放棄也不會(huì)擁有,不能專(zhuān)注就不能更深入,那些在自己領(lǐng)域獲得成功的人都是知道什么才是自己需要堅(jiān)持到底的人。
第二件事:無(wú)論什么時(shí)候都要樂(lè)觀看待這個(gè)世界
沒(méi)有任何一個(gè)人成功是順風(fēng)順?biāo)模际墙?jīng)歷無(wú)數(shù)的痛苦和坎坷,才能獲得你所看到的成功,很多人只看到別人的結(jié)果,卻不接受別人的過(guò)程.
那為什么只有極少數(shù)人成功呢,最大的原因是這些成功者無(wú)論什么時(shí)候都會(huì)樂(lè)觀地看待這個(gè)世界,所以無(wú)論是2000年的互聯(lián)網(wǎng)泡沫,2003年的非典,2008年的金融危機(jī),還是2020年的新冠病毒,雖然這些事件給無(wú)數(shù)的企業(yè)造成了無(wú)法估量的損失,但總有些人樂(lè)觀看待這些事情的發(fā)生,并透過(guò)這些事件反思自我,改變自我,最終成就了自我。
第三件事: “人生沒(méi)有彩排,每一天都是現(xiàn)場(chǎng)直播”
喬布斯也說(shuō)過(guò)類(lèi)似的話,把自己的每一天當(dāng)成自己最后一天,如果你能珍惜當(dāng)下,認(rèn)真去過(guò)好你所擁有的每一天,其實(shí)人生不需要提前準(zhǔn)備,但如果你不能好好利用自己擁有的每一天時(shí)間,即便你提前準(zhǔn)備了也沒(méi)什么用。
第四件事: 如果你簡(jiǎn)單,這個(gè)世界就對(duì)你簡(jiǎn)單
很多人有處理不完的糟心事,有沒(méi)完沒(méi)了的煩惱,那都是因?yàn)槲覀冏约涸斐傻模銖?fù)雜了,你的世界就復(fù)雜,你簡(jiǎn)單了,你的世界就簡(jiǎn)單,改變自己永遠(yuǎn)是改變世界的唯一法則。
第五件事: 要成功,需要朋友,要取得巨大的成功,需要敵人
一個(gè)人的成功,離不開(kāi)朋友和家人的幫助,但這也只能讓你小有成就,如果你期望有巨大的成功,你就需要敵人的幫助,因?yàn)閿橙撕团笥亚∏∠喾矗笥炎屇憧匆?jiàn)更多的是你的優(yōu)勢(shì),而敵人讓你看見(jiàn)的是你的弱勢(shì),就像木桶原理一樣,決定桶能裝多少水的不是最長(zhǎng)的那塊,而是最短的那塊,所以當(dāng)你不斷去改變自己弱勢(shì)你就能不斷增強(qiáng)你的優(yōu)勢(shì),學(xué)會(huì)與敵人交朋友的人才是最有智慧的人。
第六件事: 懷才就像懷孕,時(shí)間久了會(huì)讓人看出來(lái)
有些人有點(diǎn)能力,就想讓別人看見(jiàn),想讓別人知道,這些都不是真正有才能的人,而那些大將之才都像女人懷孕一樣,耐得住寂寞,守得住孤獨(dú),最后在適合的時(shí)機(jī)和適合的場(chǎng)合,一鳴驚人,所以有才華如果沒(méi)能施展,不用急,安住你的心,做好手上的每一件事,老天會(huì)給你啟示的。
第七件事: 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng).
頭天晚上想想千條路,第二天醒來(lái)依然走老路,這個(gè)世界上不缺想法的人,就缺少立刻行動(dòng)的人,今天想到了就今天行動(dòng),不要等到明天,因?yàn)槊魈煊肋h(yuǎn)都不會(huì)來(lái),立刻行動(dòng),立刻行動(dòng),立刻行動(dòng)是成功唯一的法則。
第八件事:書(shū)讀得少?zèng)]有關(guān)系,就怕不在社會(huì)上讀書(shū)
大部分人都喜歡從書(shū)本上獲得知識(shí),但書(shū)本上的知識(shí)很多時(shí)候卻不法讓你在社會(huì)上取得成功,原因是大部分寫(xiě)書(shū)的人都是理論家,自己也沒(méi)有經(jīng)歷過(guò),總結(jié)了一些理論和思想,但社會(huì)瞬息萬(wàn)變,很多理論和思想與現(xiàn)實(shí)情況并不相輔,在加上看書(shū)的人不能活學(xué)活用,最后就是失敗而告終,而最大的學(xué)習(xí)應(yīng)該是在社會(huì)中,在實(shí)戰(zhàn)中,不斷的學(xué)習(xí)和反思,從而找到一條屬于自己的道,學(xué)在多知識(shí)不如總結(jié)出一兩條規(guī)律,大部分成功的人都是掌握規(guī)律的人,而規(guī)律又不在書(shū)中,而在社會(huì)和自然中。
第九件事: 今天會(huì)很殘酷,明天會(huì)更殘酷,后天會(huì)很美好,但大部分人會(huì)死在明天晚上。
很多時(shí)候的失敗不是因?yàn)槲覀內(nèi)鄙倌芰Γ鄙儋Y源,缺少人才,而是我們?nèi)鄙賵?jiān)定的信念, 今天會(huì)很殘酷,明天會(huì)更殘酷,后天會(huì)很美好,但大部分人會(huì)死在明天晚上。這說(shuō)明信念不夠堅(jiān)定的人很容易放棄,而信念堅(jiān)定的人會(huì)比別人多堅(jiān)持一天,也許就是這一天,就能雨過(guò)天晴,風(fēng)和日麗。
第十件事: 夢(mèng)想還是要有的,萬(wàn)一實(shí)現(xiàn)了呢?
無(wú)論你還在身處什么環(huán)境,擁有什么樣的結(jié)果,你覺(jué)得人生有多么糟糕,夢(mèng)想還是要有的,萬(wàn)一實(shí)現(xiàn)了呢? 只要你把以上十件事做好了,你的夢(mèng)想就一定能實(shí)現(xiàn)。就像里采說(shuō)的,生命只有一次,為什么不大膽一點(diǎn),反正你什么也不會(huì)失去。
艾銻無(wú)限硬核:關(guān)于四層、七層負(fù)載均衡的區(qū)別
一、簡(jiǎn)介
1. 所謂四層就是基于IP+端口的負(fù)載均衡;七層就是基于URL等應(yīng)用層信息的負(fù)載均衡;**同理,還有基于MAC地址的二層負(fù)載均衡和基于IP地址的三層負(fù)載均衡。 換句換說(shuō),二層負(fù)載均衡會(huì)通過(guò)一個(gè)虛擬MAC地址接收請(qǐng)求,然后再分配到真實(shí)的MAC地址;三層負(fù)載均衡會(huì)通過(guò)一個(gè)虛擬IP地址接
收請(qǐng)求,然后再分配到真實(shí)的IP地址;四層通過(guò)虛擬IP+端口接收請(qǐng)求,然后再分配到真實(shí)的服務(wù)器;七層通過(guò)虛擬的URL或主機(jī)名接收請(qǐng)求,然后再分配到真實(shí)的服務(wù)器。
2. 所謂的四到七層負(fù)載均衡,就是在對(duì)后臺(tái)的服務(wù)器進(jìn)行負(fù)載均衡時(shí),依據(jù)四層的信息或七層的信息來(lái)決定怎么樣轉(zhuǎn)發(fā)流量。比如四層的負(fù)載均衡,就是通過(guò)發(fā)布三層的IP地址(VIP),然后加四層的端口號(hào),來(lái)決定哪些流量需要做負(fù)載均衡,對(duì)需要處理的流量進(jìn)行NAT處理,轉(zhuǎn)發(fā)至后臺(tái)服務(wù)器,并記錄下這個(gè)TCP或者UDP的流量是由哪臺(tái)服務(wù)器處理的,后續(xù)這個(gè)連接的所有流量都同樣轉(zhuǎn)發(fā)到同一臺(tái)服務(wù)器處理。七層的負(fù)載均衡,就是在四層的基礎(chǔ)上(沒(méi)有四層是絕對(duì)不可能有七層的),再考慮應(yīng)用層的特征,比如同一個(gè)Web服務(wù)器的負(fù)載均衡,除了根據(jù)VIP加80端口辨別是否需要處理的流量,還可根據(jù)七層的URL、瀏覽器類(lèi)別、語(yǔ)言來(lái)決定是否要進(jìn)行負(fù)載均衡。舉個(gè)例子,如果你的Web服務(wù)器分成兩組,一組是中文語(yǔ)言的,一組是英文語(yǔ)言的,那么七層負(fù)載均衡就可以當(dāng)用戶來(lái)訪問(wèn)你的域名時(shí),自動(dòng)辨別用戶語(yǔ)言,然后選擇對(duì)應(yīng)的語(yǔ)言服務(wù)器組進(jìn)行負(fù)載均衡處理。
3. 負(fù)載均衡器通常稱(chēng)為四層交換機(jī)或七層交換機(jī)。四層交換機(jī)主要分析IP層及TCP/UDP層,實(shí)現(xiàn)四層流量負(fù)載均衡。七層交換機(jī)除了支持四層負(fù)載均衡以外,還有分析應(yīng)用層的信息,如HTTP協(xié)議URI或Cookie信息。
4. 負(fù)載均衡分為L(zhǎng)4 switch(四層交換),即在OSI第4層工作,就是TCP層啦。此種Load Balance不理解應(yīng)用協(xié)議(如HTTP/FTP/MySQL等等)。例子:LVS,F(xiàn)5。
5. 另一種叫做L7 switch(七層交換),OSI的最高層,應(yīng)用層。此時(shí),該Load Balancer能理解應(yīng)用協(xié)議。例子: haproxy,MySQL Proxy。
注意:上面的很多Load Balancer既可以做四層交換,也可以做七層交換。
二、區(qū)別
1. 技術(shù)原理上
所謂四層負(fù)載均衡,也就是主要通過(guò)報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見(jiàn)的TCP為例,負(fù)載均衡設(shè)備在接收到第一個(gè)來(lái)自客戶端的SYN 請(qǐng)求時(shí),即通過(guò)上述方式選擇一個(gè)最佳的服務(wù)器,并對(duì)報(bào)文中目標(biāo)IP地址進(jìn)行修改(改為后端服務(wù)器IP),直接轉(zhuǎn)發(fā)給該服務(wù)器。TCP的連接建立,即三次握手是客戶端和服務(wù)器直接建立的,負(fù)載均衡設(shè)備只是起到一個(gè)類(lèi)似路由器的轉(zhuǎn)發(fā)動(dòng)作。在某些部署情況下,為保證服務(wù)器回包可以正確返回給負(fù)載均衡設(shè)備,在轉(zhuǎn)發(fā)報(bào)文的同時(shí)可能還會(huì)對(duì)報(bào)文原來(lái)的源地址進(jìn)行修改。
所謂七層負(fù)載均衡,也稱(chēng)為“內(nèi)容交換”,也就是主要通過(guò)報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見(jiàn)的TCP為例,負(fù)載均衡設(shè)備如果要根據(jù)真正的應(yīng)用層內(nèi)容再選擇服務(wù)器,只能先代理最終的服務(wù)器和客戶端建立連接(三次握手)后,才可能接受到客戶端發(fā)送的真正應(yīng)用層內(nèi)容的報(bào)文,然后再根據(jù)該報(bào)文中的特定字段,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。負(fù)載均衡設(shè)備在這種情況下,更類(lèi)似于一個(gè)代理服務(wù)器。負(fù)載均衡和前端的客戶端以及后端的服務(wù)器會(huì)分別建立TCP連接。所以從這個(gè)技術(shù)原理上來(lái)看,七層負(fù)載均衡明顯的對(duì)負(fù)載均衡設(shè)備的要求更高,處理七層的能力也必然會(huì)低于四層模式的部署方式。
1. 應(yīng)用場(chǎng)景
七層應(yīng)用負(fù)載的好處,是使得整個(gè)網(wǎng)絡(luò)更智能化。例如訪問(wèn)一個(gè)網(wǎng)站的用戶流量,可以通過(guò)七層的方式,將對(duì)圖片類(lèi)的請(qǐng)求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);將對(duì)文字類(lèi)的請(qǐng)求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。當(dāng)然這只是七層應(yīng)用的一個(gè)小案例,從技術(shù)原理上,這種
方式可以對(duì)客戶端的請(qǐng)求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。很多在后臺(tái),例如Nginx或者Apache上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶請(qǐng)求中的Header重寫(xiě),服務(wù)器響應(yīng)中的關(guān)鍵字過(guò)濾或者內(nèi)容插入等功能。
另外一個(gè)常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見(jiàn)的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假I(mǎi)P地址對(duì)同一目標(biāo)發(fā)送SYN攻擊,通常這種攻擊會(huì)大量發(fā)送SYN報(bào)文,耗盡服務(wù)器上的相關(guān)資源,以達(dá)到Denial of Service(DoS)的目的。從技術(shù)原理上也可以看出,四層模式下這些SYN攻擊都會(huì)被轉(zhuǎn)發(fā)到后端的服務(wù)器上;而七層模式下這些SYN攻擊自然在負(fù)載均衡設(shè)備上就截止,不會(huì)影響后臺(tái)服務(wù)器的正常運(yùn)營(yíng)。另外負(fù)載均衡設(shè)備可以在七層層面設(shè)定多種策略,過(guò)濾特定報(bào)文,例如SQL Injection等應(yīng)用層面的特定攻擊手段,從應(yīng)用層面進(jìn)一步提高系統(tǒng)整體安全。
現(xiàn)在的7層負(fù)載均衡,主要還是著重于應(yīng)用HTTP協(xié)議,所以其應(yīng)用范圍主要是眾多的網(wǎng)站或者內(nèi)部信息平臺(tái)等基于B/S開(kāi)發(fā)的系統(tǒng)。 4層負(fù)載均衡則對(duì)應(yīng)其他TCP應(yīng)用,例如基于C/S開(kāi)發(fā)的ERP等系統(tǒng)。
三、Nginx、LVS及HAProxy負(fù)載均衡軟件的優(yōu)缺點(diǎn)
負(fù)載均衡 (Load Balancing) 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力,同時(shí)能夠提高網(wǎng)絡(luò)的靈活性和可用性。
Nginx/LVS/HAProxy是目前使用最廣泛的三種負(fù)載均衡軟件。
一般對(duì)負(fù)載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來(lái)使用不同的技術(shù)。具體的應(yīng)用需求還得具體分析,如果是中小型的Web應(yīng)用,比如日PV小于1000萬(wàn),用Nginx就完全可以了;如果機(jī)器不少,可以用DNS輪詢,LVS所耗費(fèi)的機(jī)器還是比較多的;大型網(wǎng)站或重要的服務(wù),且服務(wù)器比較
多時(shí),可以考慮用LVS。
一種是通過(guò)硬件來(lái)進(jìn)行,常見(jiàn)的硬件有比較昂貴的F5和Array等商用的負(fù)載均衡器,它的優(yōu)點(diǎn)就是有專(zhuān)業(yè)的維護(hù)團(tuán)隊(duì)來(lái)對(duì)這些服務(wù)進(jìn)行維護(hù)、缺點(diǎn)就是花銷(xiāo)太大,所以對(duì)于規(guī)模較小的網(wǎng)絡(luò)服務(wù)來(lái)說(shuō)暫時(shí)還沒(méi)有需要使用;另外一種就是類(lèi)似于Nginx/LVS/HAProxy的基于 Linux的開(kāi)源免費(fèi)的負(fù)載均衡軟
件,這些都是通過(guò)軟件級(jí)別來(lái)實(shí)現(xiàn),所以費(fèi)用非常低廉。
目前關(guān)于網(wǎng)站架構(gòu)一般比較合理流行的架構(gòu)方案:Web前端采用Nginx/HAProxy+ Keepalived作負(fù)載均衡器;后端采用 MySQL數(shù)據(jù)庫(kù)一主多從和讀寫(xiě)分離,采用LVS+Keepalived的架構(gòu)。當(dāng)然要根據(jù)項(xiàng)目具體需求制定方案。
下面說(shuō)說(shuō)各自的特點(diǎn)和適用場(chǎng)合。
Nginx的優(yōu)點(diǎn)是:
1. 工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略,比如針對(duì)域名、目錄結(jié)構(gòu),它的正則規(guī)則比HAProxy更為強(qiáng)大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了。
2. Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴(lài)非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個(gè)也是它的優(yōu)勢(shì)之一;相反LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性依賴(lài)比較大。
3. Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)比較方便,它基本能把錯(cuò)誤用日志打印出來(lái)。LVS的配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了,LVS對(duì)網(wǎng)絡(luò)依賴(lài)比較大。
4. 可以承擔(dān)高負(fù)載壓力且穩(wěn)定,在硬件不差的情況下一般能支撐幾萬(wàn)次的并發(fā)量,負(fù)載度比LVS相對(duì)小些。
5. Nginx可以通過(guò)端口檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn),不過(guò)其中缺點(diǎn)就是不支持url來(lái)檢測(cè)。比如用戶正在上傳一個(gè)文件,而處理該上傳的節(jié)點(diǎn)剛好在上傳過(guò)程中出現(xiàn)故障,Nginx會(huì)把上傳切到另一臺(tái)服
務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話,用戶可能會(huì)因此而不滿。
6. Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。LNMP也是近幾年非常流行的web架構(gòu),在高流量的環(huán)境中穩(wěn)定性也很好。
7. Nginx現(xiàn)在作為Web反向加速緩存越來(lái)越成熟了,速度比傳統(tǒng)的Squid服務(wù)器更快,可以考慮用其作為反向代理加速器。
8. Nginx可作為中層反向代理使用,這一層面Nginx基本上無(wú)對(duì)手,唯一可以對(duì)比Nginx的就只有 lighttpd了,不過(guò) lighttpd目前還沒(méi)有做到Nginx完全的功能,配置也不那么清晰易讀,社區(qū)資料也遠(yuǎn)遠(yuǎn)沒(méi)Nginx活躍。
9. Nginx也可作為靜態(tài)網(wǎng)頁(yè)和圖片服務(wù)器,這方面的性能也無(wú)對(duì)手。還有Nginx社區(qū)非常活躍,第三方模塊也很多。
Nginx的缺點(diǎn)是:
1. Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn)。
2. 對(duì)后端服務(wù)器的健康檢查,只支持通過(guò)端口來(lái)檢測(cè),不支持通過(guò)url來(lái)檢測(cè)。不支持Session的直接保持,但能通過(guò)ip_hash來(lái)解決。
LVS:使用Linux內(nèi)核集群實(shí)現(xiàn)一個(gè)高性能、高可用的負(fù)載均衡服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS的優(yōu)點(diǎn)是:
1. 抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生,這個(gè)特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的,對(duì)內(nèi)存和cpu資源消耗比較低。
2. 配置性比較低,這是一個(gè)缺點(diǎn)也是一個(gè)優(yōu)點(diǎn),因?yàn)闆](méi)有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯(cuò)的幾率。
3. 工作穩(wěn)定,因?yàn)槠浔旧砜关?fù)載能力很強(qiáng),自身有完整的雙機(jī)熱備方案,如LVS+Keepalived。
4. 無(wú)流量,LVS只分發(fā)請(qǐng)求,而流量并不從它本身出去,這點(diǎn)保證了均衡器IO的性能不會(huì)受到大流量的影響。
5. 應(yīng)用范圍比較廣,因?yàn)長(zhǎng)VS工作在4層,所以它幾乎可以對(duì)所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫(kù)、在線聊天室等等。
LVS的缺點(diǎn)是:
1. 軟件本身不支持正則表達(dá)式處理,不能做動(dòng)靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強(qiáng)的需求,這個(gè)是Nginx/HAProxy+Keepalived的優(yōu)勢(shì)所在。
2. 如果是網(wǎng)站應(yīng)用比較龐大的話,LVS/DR+Keepalived實(shí)施起來(lái)就比較復(fù)雜了,特別后面有 Windows Server的機(jī)器的話,如果實(shí)施及配置還有維護(hù)過(guò)程就比較復(fù)雜了,相對(duì)而言,Nginx/HAProxy+Keepalived就簡(jiǎn)單多了。
HAProxy的特點(diǎn)是:
1. HAProxy也是支持虛擬主機(jī)的。
2. HAProxy的優(yōu)點(diǎn)能夠補(bǔ)充N(xiāo)ginx的一些缺點(diǎn),比如支持Session的保持,Cookie的引導(dǎo);同時(shí)支持通過(guò)獲取指定的url來(lái)檢測(cè)后端服務(wù)器的狀態(tài)。
3. HAProxy跟LVS類(lèi)似,本身就只是一款負(fù)載均衡軟件;單純從效率上來(lái)講HAProxy會(huì)比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
4. HAProxy支持TCP協(xié)議的負(fù)載均衡轉(zhuǎn)發(fā),可以對(duì)MySQL讀進(jìn)行負(fù)載均衡,對(duì)后端的MySQL節(jié)點(diǎn)進(jìn)行檢測(cè)和負(fù)載均衡,大家可以用LVS+Keepalived對(duì)MySQL主從做負(fù)載均衡。
5. HAProxy負(fù)載均衡策略非常多,HAProxy的負(fù)載均衡算法現(xiàn)在具體有如下8種:
① roundrobin,表示簡(jiǎn)單的輪詢,這個(gè)不多說(shuō),這個(gè)是負(fù)載均衡基本都具備的;
② static-rr,表示根據(jù)權(quán)重,建議關(guān)注;
③ leastconn,表示最少連接者先處理,建議關(guān)注;
④ source,表示根據(jù)請(qǐng)求源IP,這個(gè)跟Nginx的IP_hash機(jī)制類(lèi)似,我們用其作為解決session問(wèn)題的一種方法,建議關(guān)注;
⑤ ri,表示根據(jù)請(qǐng)求的URI;
⑥ rl_param,表示根據(jù)請(qǐng)求的URl參數(shù)’balance url_param’ requires an URL parameter name;
⑦ hdr(name),表示根據(jù)HTTP請(qǐng)求頭來(lái)鎖定每一次HTTP請(qǐng)求;
⑧ rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求。
6.
Nginx和LVS對(duì)比的總結(jié):
1. Nginx工作在網(wǎng)絡(luò)的7層,所以它可以針對(duì)http應(yīng)用本身來(lái)做分流策略,比如針對(duì)域名、目錄結(jié)構(gòu)等,相比之下LVS并不具備這樣的功能,所以Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了;但Nginx有用的這些功能使其可調(diào)整度要高于LVS,所以經(jīng)常要去觸碰觸碰,觸碰多了,人為出問(wèn)題的幾率也
就會(huì)大。
2. Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴(lài)較小,理論上只要ping得通,網(wǎng)頁(yè)訪問(wèn)正常,Nginx就能連得通,這是Nginx的一大優(yōu)勢(shì)!Nginx同時(shí)還能區(qū)分內(nèi)外網(wǎng),如果是同時(shí)擁有內(nèi)外網(wǎng)的節(jié)點(diǎn),就相當(dāng)于單機(jī)擁有了備份線路;LVS就比較依賴(lài)于網(wǎng)絡(luò)環(huán)境,目前來(lái)看服務(wù)器在同一網(wǎng)段內(nèi)并且LVS使用direct方式分
流,效果較能得到保證。另外注意,LVS需要向托管商至少申請(qǐng)多一個(gè)ip來(lái)做Visual IP,貌似是不能用本身的IP來(lái)做VIP的。要做好LVS管理員,確實(shí)得跟進(jìn)學(xué)習(xí)很多有關(guān)網(wǎng)絡(luò)通信方面的知識(shí),就不再是一個(gè)HTTP那么簡(jiǎn)單了。
3. Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)也很方便,因?yàn)樗灸馨彦e(cuò)誤用日志打印出來(lái)。LVS的安裝和配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了;LVS對(duì)網(wǎng)絡(luò)依賴(lài)比較大,很多時(shí)候不能配置成功都是因?yàn)榫W(wǎng)絡(luò)問(wèn)題而不是配置問(wèn)題,出了問(wèn)題要解決也相應(yīng)的會(huì)麻煩得多。
4. Nginx也同樣能承受很高負(fù)載且穩(wěn)定,但負(fù)載度和穩(wěn)定度差LVS還有幾個(gè)等級(jí):Nginx處理所有流量所以受限于機(jī)器IO和配置;本身的bug也還是難以避免的。
5. Nginx可以檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn)。目前LVS中 ldirectd也能支持針對(duì)服務(wù)器內(nèi)部的情況來(lái)監(jiān)控,但LVS的原理使其不能重發(fā)請(qǐng)求。比如用戶正在上傳一個(gè)文件,而處理該上傳的節(jié)點(diǎn)剛好在上傳
過(guò)程中出現(xiàn)故障,Nginx會(huì)把上傳切到另一臺(tái)服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話,用戶可能會(huì)因此而惱火。
6. Nginx對(duì)請(qǐng)求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載,假如使用 apache直接對(duì)外服務(wù),那么出現(xiàn)很多的窄帶鏈接時(shí)apache服務(wù)器將會(huì)占用大 量?jī)?nèi)存而不能釋放,使用多一個(gè)Nginx做apache代理的話,這些窄帶鏈接會(huì)被Nginx擋住,apache上就不會(huì)堆積過(guò)多的請(qǐng)求,這樣就減少了相當(dāng)多的資源
占用。這點(diǎn)使用squid也有相同的作用,即使squid本身配置為不緩存,對(duì)apache還是有很大幫助的。
7. Nginx能支持http、https和email(email的功能比較少用),LVS所支持的應(yīng)用在這點(diǎn)上會(huì)比Nginx更多。在使用上,一般最前端所采取的策略應(yīng)是LVS,也就是DNS的指向應(yīng)為L(zhǎng)VS均衡器,LVS的優(yōu)點(diǎn)令它非常適合做這個(gè)任務(wù)。重要的ip地址,最好交由LVS托管,比如數(shù)據(jù)庫(kù)的 ip、webservice服務(wù)器的ip等等,這些ip地址隨著時(shí)間推移,使用面會(huì)越來(lái)越大,如果更換ip則故障會(huì)接踵而至。所以將這些重要ip交給 LVS托管是最為穩(wěn)妥的,這樣做的唯一缺點(diǎn)是需要的VIP數(shù)量會(huì)比較多。Nginx可作為L(zhǎng)VS節(jié)點(diǎn)機(jī)器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。當(dāng)然這一層面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所遜色于Nginx。Nginx也可作為中層代理使用,這一層面Nginx基本上無(wú)對(duì)手,唯一可以撼動(dòng)Nginx的就只有l(wèi)ighttpd了,不過(guò)lighttpd目前還沒(méi)有能做到 Nginx完全的功能,配置也不那么清晰易讀。另外,中層代理的IP也是重要的,所以中層代理也擁有一個(gè)VIP和LVS是最完美的方案了。具體的應(yīng)用還得具體分析,如果是比較小的網(wǎng)站(日PV小于1000萬(wàn)),用Nginx就完全可以了,如果機(jī)器也不少,可以用DNS輪詢,LVS所耗費(fèi)的機(jī)器還是比較多的;大型網(wǎng)站或者重要的服務(wù),機(jī)器不發(fā)愁的時(shí)候,要多多考慮利用LVS。
現(xiàn)在對(duì)網(wǎng)絡(luò)負(fù)載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來(lái)使用不同的技術(shù):
· 第一階段:利用Nginx或HAProxy進(jìn)行單點(diǎn)的負(fù)載均衡,這一階段服務(wù)器規(guī)模剛脫離開(kāi)單服務(wù)器、單數(shù)據(jù)庫(kù)的模式,需要一定的負(fù)載均衡,但是仍然規(guī)模較小沒(méi)有專(zhuān)業(yè)的維護(hù)團(tuán)隊(duì)來(lái)進(jìn)行維護(hù),也沒(méi)有需要進(jìn)行大規(guī)模的網(wǎng)站部署。這樣利用Nginx或HAproxy就是第一選擇,此時(shí)這些東西上手快, 配置
容易,在七層之上利用HTTP協(xié)議就可以。這時(shí)是第一選擇。
· 第二階段:隨著網(wǎng)絡(luò)服務(wù)進(jìn)一步擴(kuò)大,這時(shí)單點(diǎn)的Nginx已經(jīng)不能滿足,這時(shí)使用LVS或者商用Array就是首要選擇,Nginx此時(shí)就作為L(zhǎng)VS或者Array的節(jié)點(diǎn)來(lái)使用,具體LVS或Array的是選擇是根據(jù)公司規(guī)模和預(yù)算來(lái)選擇,Array的應(yīng)用交付功能非常強(qiáng)大,本人在某項(xiàng)目中使用過(guò),性價(jià)比也遠(yuǎn)高于
F5,商用首選,但是一般來(lái)說(shuō)這階段相關(guān)人才跟不上業(yè)務(wù)的提升,所以購(gòu)買(mǎi)商業(yè)負(fù)載均衡已經(jīng)成為了必經(jīng)之路。
· 第三階段:這時(shí)網(wǎng)絡(luò)服務(wù)已經(jīng)成為主流產(chǎn)品,此時(shí)隨著公司知名度也進(jìn)一步擴(kuò)展,相關(guān)人才的能力以及數(shù)量也隨之提升,這時(shí)無(wú)論從開(kāi)發(fā)適合自身產(chǎn)品的定制,以及降低成本來(lái)講開(kāi)源的LVS,已經(jīng)成為首選,這時(shí)LVS會(huì)成為主流。
最終形成比較理想的基本架構(gòu)為:Array/LVS — Nginx/Haproxy — Squid/Varnish — AppServer。