ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          現(xiàn)在網(wǎng)站發(fā)展的趨勢對網(wǎng)絡(luò)負(fù)載均衡的使用是隨著網(wǎng)站規(guī)模的提升根據(jù)不同的階段來使用不同的技術(shù):

          一種是通過硬件來進(jìn)行進(jìn)行,常見的硬件有比較昂貴的NetScaler、F5、Radware和Array等商用的負(fù)載均衡器,它的優(yōu)點(diǎn)就是有專業(yè)的維護(hù)團(tuán)隊來對這些服務(wù)進(jìn)行維護(hù)、缺點(diǎn)就是花銷太大,所以對于規(guī)模較小的網(wǎng)絡(luò)服務(wù)來說暫時還沒有需要使用;另外一種就是類似于LVS/HAProxy、Nginx的基于Linux的開源免費(fèi)的負(fù)載均衡軟件策略,這些都是通過軟件級別來實現(xiàn),所以費(fèi)用非常低廉,所以我個也比較推薦大家采用第二種方案來實施自己網(wǎng)站的負(fù)載均衡需求。

          近期朋友劉鑫(紫雨荷雪)的項目成功上線了,PV達(dá)到了億級/日的訪問量,最前端用的是HAProxy+Keepalived雙機(jī)作的負(fù)載均衡器 /反向代理,整個網(wǎng)站非常穩(wěn)定;這讓我更堅定了以前跟老男孩前輩聊的關(guān)于網(wǎng)站架構(gòu)比較合理設(shè)計的架構(gòu)方案:即Nginx /HAProxy+Keepalived作Web最前端的負(fù)載均衡器,后端的MySQL數(shù)據(jù)庫架構(gòu)采用一主多從,讀寫分離的方式,采用LVS+Keepalived的方式。

          在這里我也有一點(diǎn)要跟大家申明下:很多朋友擔(dān)心軟件級別的負(fù)載均衡在高并發(fā)流量沖擊下的穩(wěn)定情況,事實是我們通過成功上線的許多網(wǎng)站發(fā)現(xiàn),它們的穩(wěn) 定性也是非常好的,宕機(jī)的可能性微乎其微,所以我現(xiàn)在做的項目,基本上沒考慮服務(wù)級別的高可用了。相信大家對這些軟件級別的負(fù)載均衡軟件都已經(jīng)有了很深的 的認(rèn)識,下面我就它們的特點(diǎn)和適用場合分別說明下。

          LVS:使用集群技術(shù)和Linux操作系統(tǒng)實現(xiàn)一個高性能、高可用的服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感謝章文嵩博士為我們提供如此強(qiáng)大實用的開源軟件。

          LVS的特點(diǎn)是:

          1. 抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生,這個特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的;
          2. 配置性比較低,這是一個缺點(diǎn)也是一個優(yōu)點(diǎn),因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率;
          3. 工作穩(wěn)定,自身有完整的雙機(jī)熱備方案,如LVS+Keepalived和LVS+Heartbeat,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived;
          4. 無流量,保證了均衡器IO的性能不會收到大流量的影響;
          5. 應(yīng)用范圍比較廣,可以對所有應(yīng)用做負(fù)載均衡;
          6. 軟件本身不支持正則處理,不能做動靜分離,這個就比較遺憾了;其實現(xiàn)在許多網(wǎng)站在這方面都有較強(qiáng)的需求,這個是Nginx/HAProxy+Keepalived的優(yōu)勢所在。
          7. 如果是網(wǎng)站應(yīng)用比較龐大的話,實施LVS/DR+Keepalived起來就比較復(fù)雜了,特別后面有Windows Server應(yīng)用的機(jī)器的話,如果實施及配置還有維護(hù)過程就比較復(fù)雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。站長教學(xué)網(wǎng) eduyo.com

          Nginx的特點(diǎn)是:

          1. 工作在網(wǎng)絡(luò)的7層之上,可以針對http應(yīng)用做一些分流的策略,比如針對域名、目錄結(jié)構(gòu),它的正則規(guī)則比HAProxy更為強(qiáng)大和靈活,這也是許多朋友喜歡它的原因之一;
          2. Nginx對網(wǎng)絡(luò)的依賴非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個也是它的優(yōu)勢所在;
          3. Nginx安裝和配置比較簡單,測試起來比較方便;
          4. 也可以承擔(dān)高的負(fù)載壓力且穩(wěn)定,一般能支撐超過幾萬次的并發(fā)量;
          5. Nginx可以通過端口檢測到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點(diǎn),不過其中缺點(diǎn)就是不支持url來檢測;
          6. Nginx僅能支持http和Email,這樣就在適用范圍上面小很多,這個它的弱勢;
          7. Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。LNMP現(xiàn)在也是非常流行的web架構(gòu),大有和以前最流行的LAMP架構(gòu)分庭抗?fàn)幹畡荩诟吡髁康沫h(huán)境中也有很好的效果。
          8. Nginx現(xiàn)在作為Web反向加速緩存越來越成熟了,很多朋友都已在生產(chǎn)環(huán)境下投入生產(chǎn)了,而且反映效果不錯,速度比傳統(tǒng)的Squid服務(wù)器更快,有興趣的朋友可以考慮用其作為反向代理加速器。

          HAProxy的特點(diǎn)是:

          1. HAProxy是支持虛擬主機(jī)的,以前有朋友說這個不支持虛擬主機(jī),我這里特此更正一下。
          2. 能夠補(bǔ)充Nginx的一些缺點(diǎn)比如Session的保持,Cookie的引導(dǎo)等工作
          3. 支持url檢測后端的服務(wù)器出問題的檢測會有很好的幫助。
          4. 它跟LVS一樣,本身僅僅就只是一款負(fù)載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
          5. HAProxy可以對Mysql讀進(jìn)行負(fù)載均衡,對后端的MySQL節(jié)點(diǎn)進(jìn)行檢測和負(fù)載均衡,不過在后端的MySQL slaves數(shù)量超過10臺時性能不如LVS,所以我向大家推薦LVS+Keepalived。
          6. HAProxy的算法現(xiàn)在也越來越多了,具體有如下8種:
            ① roundrobin,表示簡單的輪詢,這個不多說,這個是負(fù)載均衡基本都具備的;
            ② static-rr,表示根據(jù)權(quán)重,建議關(guān)注;
            ③ leastconn,表示最少連接者先處理,建議關(guān)注;
            ④ source,表示根據(jù)請求源IP,這個跟Nginx的IP_hash機(jī)制類似,我們用其作為解決session問題的一種方法,建議關(guān)注;
            ⑤ ri,表示根據(jù)請求的URI;
            ⑥ rl_param,表示根據(jù)請求的URl參數(shù)'balance url_param' requires an URL parameter name;
            ⑦ hdr(name),表示根據(jù)HTTP請求頭來鎖定每一次HTTP請求;
            ⑧ rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請求。

           

           

          Nginx和LVS作對比的結(jié)果

          1、Nginx工作在網(wǎng)絡(luò)的7層,所以它可以針對http應(yīng)用本身來做分流策略,比如針對域名、目錄結(jié)構(gòu)等,相比之下LVS并不具備這樣的功能,所 以 Nginx單憑這點(diǎn)可利用的場合就遠(yuǎn)多于LVS了;但Nginx有用的這些功能使其可調(diào)整度要高于LVS,所以經(jīng)常要去觸碰觸碰,由LVS的第2條優(yōu)點(diǎn) 看,觸碰多了,人為出問題的幾率也就會大。
          2、Nginx對網(wǎng)絡(luò)的依賴較小,理論上只要ping得通,網(wǎng)頁訪問正常,Nginx就能連得通,Nginx同時還能區(qū)分內(nèi)外網(wǎng),如果是同時擁有內(nèi)外網(wǎng)的 節(jié)點(diǎn),就相當(dāng)于單機(jī)擁有了備份線路;LVS就比較依賴于網(wǎng)絡(luò)環(huán)境,目前來看服務(wù)器在同一網(wǎng)段內(nèi)并且LVS使用direct方式分流,效果較能得到保證。另 外注意,LVS需要向托管商至少申請多一個ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實得跟進(jìn)學(xué)習(xí)很多有關(guān)網(wǎng)絡(luò)通信方面的知識,就不再是一個HTTP那么簡單了。站長教學(xué)網(wǎng) eduyo.com
          3、Nginx安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日志打印出來。LVS的安裝和配置、測試就要花比較長的時間了,因為同上所述,LVS對網(wǎng)絡(luò)依賴比較大,很多時候不能配置成功都是因為網(wǎng)絡(luò)問題而不是配置問題,出了問題要解決也相應(yīng)的會麻煩得多。
          4、Nginx也同樣能承受很高負(fù)載且穩(wěn)定,但負(fù)載度和穩(wěn)定度差LVS還有幾個等級:Nginx處理所有流量所以受限于機(jī)器IO和配置;本身的bug也還是難以避免的;Nginx沒有現(xiàn)成的雙機(jī)熱備方案,所以跑在單機(jī)上還是風(fēng)險較大,單機(jī)上的事情全都很難說。
          5、Nginx可以檢測到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點(diǎn)。目前LVS中 ldirectd也能支持針對服務(wù)器內(nèi)部的情況來監(jiān)控,但LVS的原理使其不能重發(fā)請求。重發(fā)請求這點(diǎn),譬如用戶正在上傳一個文件,而處理該上傳的節(jié)點(diǎn)剛 好在上傳過程中出現(xiàn)故障,Nginx會把上傳切到另一臺服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能 會因此而惱火。
          6、Nginx對請求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載,假如使用apache直接對外服務(wù),那么出現(xiàn)很多的窄帶鏈接時apache服務(wù)器將會占用大 量內(nèi)存而不能釋放,使用多一個Nginx做apache代理的話,這些窄帶鏈接會被Nginx擋住,apache上就不會堆積過多的請求,這樣就減少了相 當(dāng)多的內(nèi)存占用。這點(diǎn)使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。LVS沒有這些功能,也就無法能 比較。
          7、Nginx能支持http和email(email的功能估計比較少人用),LVS所支持的應(yīng)用在這點(diǎn)上會比Nginx更多。在使用上,一般最前端所 采取的策略應(yīng)是LVS,也就是DNS的指向應(yīng)為LVS均衡器,LVS的優(yōu)點(diǎn)令它非常適合做這個任務(wù)。重要的ip地址,最好交由LVS托管,比如數(shù)據(jù)庫的 ip、webservice服務(wù)器的ip等等,這些ip地址隨著時間推移,使用面會越來越大,如果更換ip則故障會接踵而至。所以將這些重要ip交給 LVS托管是最為穩(wěn)妥的,這樣做的唯一缺點(diǎn)是需要的VIP數(shù)量會比較多。Nginx可作為LVS節(jié)點(diǎn)機(jī)器使用,一是可以利用Nginx的功能,二是可以利 用Nginx的性能。當(dāng)然這一層面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所遜色于Nginx。Nginx也 可作為中層代理使用,這一層面Nginx基本上無對手,唯一可以撼動Nginx的就只有l(wèi)ighttpd了,不過lighttpd目前還沒有能做到 Nginx完全的功能,配置也不那么清晰易讀。另外,中層代理的IP也是重要的,所以中層代理也擁有一個VIP和LVS是最完美的方案了。具體的應(yīng)用還得 具體分析,如果是比較小的網(wǎng)站(日PV<1000萬),用Nginx就完全可以了,如果機(jī)器也不少,可以用DNS輪詢,LVS所耗費(fèi)的機(jī)器還是比較 多的;大型網(wǎng)站或者重要的服務(wù),機(jī)器不發(fā)愁的時候,要多多考慮利用LVS

          posted on 2013-12-25 12:34 ivaneeo 閱讀(6567) 評論(0)  編輯  收藏 所屬分類: GNU牛力
          主站蜘蛛池模板: 诏安县| 郑州市| 临高县| 安图县| 台南市| 桑日县| 老河口市| 兴仁县| 商南县| 浏阳市| 安龙县| 岳阳市| 台湾省| 建宁县| 华容县| 广安市| 宜君县| 甘南县| 延吉市| 威海市| 乐平市| 余江县| 高青县| 大名县| 嘉义县| 东海县| 嘉定区| 灵石县| 三穗县| 大悟县| 定襄县| 合川市| 嘉定区| 大城县| 德保县| 特克斯县| 金溪县| 兴城市| 泸定县| 凤翔县| 抚宁县|