廣州總校區(qū)切換校區(qū)
復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請(qǐng)前往微信添加好友
打開微信
圖片

行業(yè)新聞

百萬(wàn)級(jí)PV高可用網(wǎng)站架構(gòu)設(shè)計(jì)

發(fā)布時(shí)間: 2022-03-28

在許多小公司和小企業(yè),尤其是涉及電子廣告和電子資訊類的網(wǎng)站,其網(wǎng)站的日PV不超過(guò)一百萬(wàn),但由于其重要性,也要求網(wǎng)站應(yīng)該具備負(fù)載均衡高可用的特點(diǎn);另一方面,由于成本的制約,公司都會(huì)要求系統(tǒng)架構(gòu)師設(shè)計(jì)的方案能夠用最少的預(yù)算來(lái)滿足這個(gè)要求,作為運(yùn)維架構(gòu)師的我們,應(yīng)該如何滿足這個(gè)要求呢?

首先是機(jī)房的選擇,如果公司有自己的機(jī)房那是最好不過(guò)的了;如果沒(méi)有自己的機(jī)房,建議放在BGP機(jī)房?jī)?nèi)托管,最好是選擇帶有硬件防火墻的BGP機(jī)房,在安全方面會(huì)更有保障。另外,如何選擇服務(wù)器呢?在有了負(fù)載均衡高可用的集群環(huán)境后,我們完全可以自己組裝服務(wù)器,這在性價(jià)比上也是較高的。像IBM和DELL等品牌的服務(wù)器,雖然質(zhì)量有保障,但價(jià)格還是比較昂貴的。當(dāng)然了,一切以穩(wěn)定為前提和原則。



另外,如果考慮用云產(chǎn)品來(lái)部署自己的網(wǎng)站,可以對(duì)比下阿里云和亞馬遜云的價(jià)格,亞馬遜AWS宣布入華后,阿里云的全線產(chǎn)品下降了30%。而云計(jì)算相比傳統(tǒng)IT的較大優(yōu)勢(shì)在于成本。如果對(duì)比下同等規(guī)模的機(jī)器,可以發(fā)現(xiàn)阿里云在價(jià)格上具有絕對(duì)的優(yōu)勢(shì)。所以對(duì)于小型網(wǎng)站來(lái)說(shuō),可以考慮采用阿里云的方式進(jìn)行部署。

網(wǎng)站架構(gòu)設(shè)計(jì)首先要考慮的是負(fù)載均衡設(shè)備的選擇。這里有兩種選擇,一種是通過(guò)硬件來(lái)進(jìn)行,常見(jiàn)的硬件有比較昂貴的NetScaler、F5 BIG-IP等商用的負(fù)載均衡器,優(yōu)點(diǎn)就是有專業(yè)的維護(hù)團(tuán)隊(duì)來(lái)對(duì)這些服務(wù)進(jìn)行后期維護(hù);缺點(diǎn)就是開銷太大,所以對(duì)于規(guī)模較小的網(wǎng)絡(luò)服務(wù)來(lái)說(shuō)暫時(shí)還沒(méi)有使用的需要。另外一種就是類似于LVS/HAProxy、Nginx等基于Linux的負(fù)載均衡軟件策略,這些都是通過(guò)軟件級(jí)別來(lái)實(shí)現(xiàn)的,所以費(fèi)用非常低廉,小型企業(yè)和公司大都會(huì)選擇軟件級(jí)別的負(fù)載均衡。至于負(fù)載均衡高可用架構(gòu),首推是Nginx/HAProxy+Keepalived架構(gòu),可能有讀者會(huì)有疑問(wèn),為什么不選擇基于LVS/DR+Keepalived的集群方案呢?這是因?yàn)槲覀儾渴鸬木W(wǎng)站一般都會(huì)有動(dòng)靜分離、正則分發(fā)的需求,如果最初始選用LVS+Keepalived的架構(gòu),那么至少又要在中間加一層二級(jí)負(fù)載均衡的機(jī)器,這樣會(huì)比較耗機(jī)器,無(wú)形中也會(huì)增加整個(gè)網(wǎng)站的成本。另外,很多朋友都比較擔(dān)心的一個(gè)問(wèn)題,認(rèn)為Nginx/HAProxy+Keepalived的穩(wěn)定性不如LVS+Keepalived,這其實(shí)是個(gè)誤解。我們通過(guò)十幾個(gè)項(xiàng)目的實(shí)施和幾年的觀察,發(fā)現(xiàn)這些軟件級(jí)別的負(fù)載均衡器的穩(wěn)定性確實(shí)很好,在高并發(fā)的情況下宕機(jī)的可能性微乎其微。而近期實(shí)施的一個(gè)商業(yè)網(wǎng)站,用的就是HAProxy+Keepalived,在億PV/日高并發(fā)流量的沖擊下,HAProxy穩(wěn)如磐石。而小公司的并發(fā)和流量一般不是特別大,大概一天持續(xù)在100萬(wàn)~500萬(wàn)PV/日之間,所以這里也向大家推薦使用HAProxy+Keepalived。

在實(shí)際的項(xiàng)目實(shí)施過(guò)程中筆者發(fā)現(xiàn),像這樣的集群方案也比較耗費(fèi)資源,特別是對(duì)于網(wǎng)站規(guī)模較小,機(jī)器非常少的情況,效果會(huì)不太好。筆者之前維護(hù)的公司有一個(gè)新聞?lì)惥W(wǎng)站(此域名做了無(wú)害處理,非真實(shí)域名),其服務(wù)器就比較少,而且是阿里云主機(jī),前期做的是HAProxy+Keepalived集群方案,但發(fā)現(xiàn)效果并不是特別好,因?yàn)榘⒗镌浦鳈C(jī)的帶寬都是共享100MB,實(shí)際上分配到網(wǎng)站入口的帶寬僅僅只有10MB左右,繁忙的時(shí)候會(huì)嚴(yán)重影響業(yè)務(wù),雖然每個(gè)月我們通過(guò)加錢的方式來(lái)增加HAProxy+Keepalived的入口帶寬,但并不是完美的解決方案,其他機(jī)器的共享帶寬沒(méi)有得到充分的利用。此外,由于所有的機(jī)器都是獨(dú)享型主機(jī),二層交換機(jī)也并不集中在一個(gè)機(jī)柜上,若在中間加一層HAProxy代理,網(wǎng)站的速度很明顯又會(huì)變慢。這時(shí)候,筆者突然想到了最簡(jiǎn)單和原始的負(fù)載均衡機(jī)制,即DNS輪詢,通過(guò)在美國(guó)的HostMonster(DNS提供商,國(guó)內(nèi)像新網(wǎng)和萬(wàn)網(wǎng)均提供DNS輪詢功能)上配置3個(gè)www的A主機(jī),這樣就解決了上面所說(shuō)的一系列問(wèn)題,后期如果流量持續(xù)增加,還可以增加機(jī)器,將網(wǎng)站入口由原先的單一入口模式改成分布式的,而且完全不影響網(wǎng)站的訪問(wèn)速度。當(dāng)然了,平時(shí)一定要注意服務(wù)器的監(jiān)控和服務(wù)器的穩(wěn)定情況,畢竟每宕機(jī)一臺(tái)服務(wù)器,肯定會(huì)有用戶受到影響的。

通過(guò)這次成功的項(xiàng)目實(shí)施,我也明白了一個(gè)道理:集群的部署不應(yīng)該一成不變,而應(yīng)該根據(jù)具體情況具體分析,哪種方案實(shí)用就用哪種,哪怕是最簡(jiǎn)單的DNS輪詢。

如果網(wǎng)站是放在IDC機(jī)房托管,而機(jī)房的最前面也沒(méi)有硬件防火墻防護(hù),那么應(yīng)該盡量做好流量監(jiān)控的工作,筆者一般會(huì)在主Nginx/HAProxy上安裝Nload軟件來(lái)對(duì)流量進(jìn)行監(jiān)控,Nload可以對(duì)流量進(jìn)行即時(shí)監(jiān)控。

很多對(duì)集群感興趣的讀者經(jīng)常問(wèn)我,如果網(wǎng)站要部署負(fù)載均衡高可用的Linux集群方案,而公司又想用最節(jié)省成本的方式來(lái)實(shí)施的話,一般需要幾臺(tái)服務(wù)器呢?如果資金比較充裕,推薦大家用7臺(tái)來(lái)實(shí)施,即LB(2臺(tái))+Web(2臺(tái))+MySQL(2臺(tái))+NFS(1臺(tái));如果資金非常不充裕,這個(gè)方案其實(shí)還是可以壓縮的,即2+2架構(gòu),最前面是2臺(tái)Nginx/HAProxy+Keepalived機(jī)器,后面是2臺(tái)配置比較好的Web機(jī)器(推薦DELL R710),MySQL數(shù)據(jù)庫(kù)采用一主一從的方式,分別放在2臺(tái)Web機(jī)器上,監(jiān)控的Nagios部署在從Nginx/HAProxy機(jī)器上,流量監(jiān)控一般放在主Nginx/HAProxy上,軟件采用的是MRTG+Nload的方式,文件服務(wù)器這里用的是單NFS,放在備HAProxy機(jī)器上,Web機(jī)器采用掛載NFS的目錄作為本地的代碼或圖片存放的方法;當(dāng)然了,如果大家的公司對(duì)文件服務(wù)器有更高要求的時(shí)候(比如網(wǎng)站的圖片數(shù)量比較多的時(shí)候),可以考慮再增加一臺(tái)圖片服務(wù)器。

在類似以上的小公司集群架構(gòu)里,應(yīng)如何解決Session同步的問(wèn)題呢?可以采用Nginx的ip_hash和HAProxy的balance source算法,它們算法的原理是一樣的,都會(huì)讓某一客戶機(jī)在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)只訪問(wèn)固定的后端的某臺(tái)真實(shí)的Web服務(wù)器。這樣Session會(huì)話就會(huì)得以保持,我們?cè)诰W(wǎng)站的頁(yè)面上進(jìn)行登錄的時(shí)候,就不會(huì)在兩臺(tái)Web服務(wù)器之間跳來(lái)跳去了,自然也不會(huì)出現(xiàn)登錄一次后網(wǎng)站又提醒你重新登錄的情況,事實(shí)上,在千萬(wàn)級(jí)PV/日的網(wǎng)站上我們也嘗試過(guò)用這些方式來(lái)解決Session同步的問(wèn)題,效果也是相當(dāng)不錯(cuò)的。

另外,小公司的Web服務(wù)器也至少有兩種選擇:一種是Apache,另一種是Nginx。在流量和并發(fā)量不大的環(huán)境下,完全可以選擇Apache作為我們的Web服務(wù)器,雖然它的抗并發(fā)能力不高,但它的穩(wěn)定性是最好的,筆者的許多電子商務(wù)網(wǎng)站都是基于Apache來(lái)提供Web應(yīng)用的。

MySQL在這里用的就是一主一從的設(shè)計(jì),雖然很多朋友覺(jué)得這種設(shè)計(jì)比較簡(jiǎn)單,但事實(shí)證明,它也是最穩(wěn)定的。我的電子商務(wù)網(wǎng)站采用的也是這種架構(gòu),幾年下來(lái),從來(lái)沒(méi)有因?yàn)閿?shù)據(jù)庫(kù)的故障而發(fā)生丟單現(xiàn)象。另外,從MySQL機(jī)器并非僅僅只起一個(gè)備份和備機(jī)的作用,我們?cè)O(shè)計(jì)的數(shù)據(jù)庫(kù)讀寫分離,可將后臺(tái)的復(fù)雜查詢轉(zhuǎn)到從MySQL機(jī)器上以減輕主MySQL數(shù)據(jù)庫(kù)的壓力。當(dāng)然了,MySQL的主從復(fù)制狀態(tài)監(jiān)控也是非常重要的,筆者一般是通過(guò)Nagios和Shell腳本進(jìn)行雙監(jiān)控的方式。

如何能幫企業(yè)節(jié)約和省錢,這其實(shí)也是運(yùn)維架構(gòu)師的工作職責(zé)之一,希望大家在工作中能領(lǐng)悟到這點(diǎn)。這樣設(shè)計(jì)出來(lái)的網(wǎng)站,極具性價(jià)比,同時(shí)又具備高可用的特點(diǎn),特別適合流量不大,但穩(wěn)定性要求比較高的網(wǎng)站,有需求的朋友可以參考此架構(gòu)設(shè)計(jì)。
?

上一篇: 子查詢的分類

下一篇: 什么是負(fù)載均衡高可用

<
在線咨詢 ×

您好,請(qǐng)問(wèn)有什么可以幫您?我們將竭誠(chéng)提供最優(yōu)質(zhì)服務(wù)!