電子商務(wù)網(wǎng)站(并發(fā)最大峰值2900,日PV500萬(wàn)左右)
電子廣告網(wǎng)站(并發(fā)最大峰值1500,日PV150萬(wàn)左右)
大型CDN門戶廣告網(wǎng)站(并發(fā)最大峰值5000,日PV5000萬(wàn)左右)
首先說(shuō)網(wǎng)頁(yè)緩存層,比如CDN租憑,其效果比公司自己部署Squid/Varnish要好,它們專業(yè)、價(jià)格低廉(比如:快網(wǎng)、藍(lán)訊、阿里、騰訊)而且覆蓋的城市更多,自己架設(shè)Squid/Varnish是次選。
很多朋友喜歡嘗試自建CDN,這是一項(xiàng)吃力不討好的工作,未必能達(dá)到預(yù)期的目標(biāo),系統(tǒng)架構(gòu)師應(yīng)該在架設(shè)網(wǎng)站初期就規(guī)劃好,不要等到網(wǎng)站流量及壓力巨大時(shí)才去規(guī)劃。事實(shí)上,這一層有很多優(yōu)秀的開(kāi)源軟件都能勝任,比如傳統(tǒng)的Squid、Cache。另外,越來(lái)越多的朋友喜歡嘗試在自己的網(wǎng)站是用Nginx和Varnish作為自己的網(wǎng)頁(yè)緩存。事實(shí)上,Nginx已經(jīng)具備Squid所擁有的Web緩存加速功能。此外,Nginx對(duì)多核CPU的利用勝過(guò)Squid,現(xiàn)在越來(lái)越多的架構(gòu)師都喜歡將Nginx同時(shí)作為”負(fù)載均衡服務(wù)器”與”Web緩存服務(wù)器”來(lái)使用,大家可以根據(jù)自己的情況,來(lái)決定究竟使用那種軟件作為網(wǎng)站的網(wǎng)頁(yè)緩存。
我們熟悉的硬件/軟件技術(shù)有F5、LVS/HAProxy,還有Nginx,它們的性能都是非常優(yōu)異的,現(xiàn)在F5/LVS在全世界范圍內(nèi)應(yīng)用,而且淘寶現(xiàn)在升級(jí)架構(gòu),也用了LVS取代了F5。
HAProxy可能大家不是特別熟悉,單HAProxy+Keepalived確實(shí)在生產(chǎn)環(huán)境下表現(xiàn)優(yōu)異,強(qiáng)大的吞吐能力,穩(wěn)定性能比之硬件過(guò)猶不及,并且淘寶也在大規(guī)模地推廣使用HAProxy,有興趣的朋友也可以關(guān)注。
再來(lái)聊聊Nginx,我已經(jīng)將Nginx+Keepalived架構(gòu)用于各種生產(chǎn)環(huán)境,經(jīng)過(guò)長(zhǎng)期的線上觀察,發(fā)現(xiàn)Nginx作為負(fù)載均衡器/反向代理也很穩(wěn)定,如果兵發(fā)壓力過(guò)大,我們前面可以用F5/LVS作為最前端的負(fù)載均衡,而將Nginx作為七層代理,這樣的效果其實(shí)也不差,所以說(shuō)負(fù)載層壓力不算特別大。
Web層壓力比較大的網(wǎng)站現(xiàn)在都換成了Nginx作為Web應(yīng)用服務(wù)器,事實(shí)上,它的抗并發(fā)能力確實(shí)超過(guò)了預(yù)期。我現(xiàn)在維護(hù)的一家門戶網(wǎng)站,高峰期時(shí)某臺(tái)Nginx應(yīng)用服務(wù)器的并發(fā)達(dá)到了一萬(wàn)以上,但是Nginx也很穩(wěn)定地提供服務(wù)。在實(shí)際的生產(chǎn)環(huán)境中,如果我們考慮到后端的數(shù)據(jù)庫(kù)服務(wù)時(shí),一萬(wàn)兵法應(yīng)該也算是一個(gè)比較大的數(shù)值了。
另外,Linux集群有一個(gè)優(yōu)勢(shì),就是它的高擴(kuò)展性,就算網(wǎng)站的并發(fā)有一萬(wàn)以上,后端的Web服務(wù)是Nginx,我們多加幾臺(tái)Nginx服務(wù)器即可。在實(shí)際的線上維護(hù)時(shí)發(fā)現(xiàn),高峰期間,實(shí)際上每臺(tái)Web的并發(fā)不算是特別大,所以我們也能通過(guò)技術(shù)手段對(duì)這一層的網(wǎng)站的壓力加以克服。
現(xiàn)在大家生產(chǎn)服務(wù)器一般是使用如下四種作為自己的文件服務(wù)器層:
1、單NFS+備份NFS作為文件服務(wù)器,這樣做的好處是維護(hù)方便,但存在單點(diǎn)故障,需要人手動(dòng)干預(yù)。
2、DRBD+HeartBeat+NFS高可用文件服務(wù)器,維護(hù)方便,也不存在單點(diǎn)故障,單隨著訪問(wèn)量的增大,后期一樣存在壓力過(guò)大的情況。
3、分布式文件系統(tǒng)MFS、Glustr。MFS易用、穩(wěn)定、對(duì)海量小文件很高效,而且新版的MFS解決了MasterServer存在單點(diǎn)故障的問(wèn)題,國(guó)內(nèi)越來(lái)越多的公司在使用MFS。事實(shí)上,分布式文件系統(tǒng)是解決文件服務(wù)器壓力過(guò)大的最終途徑,但也存在隱患,網(wǎng)站功能越多,攤子越大,機(jī)器越多,維護(hù)起來(lái)越復(fù)雜。
4、如果是淘寶和騰訊這種巨量級(jí)的公司,可以嘗試開(kāi)發(fā)自己的分布式文件系統(tǒng)了。大家可以嘗試根據(jù)自己網(wǎng)站的情況,來(lái)決定究竟選擇哪一種如那件作為自己的文件服務(wù)器。
數(shù)據(jù)庫(kù)層的壓力,我覺(jué)得網(wǎng)站的PV和并發(fā)上去以后,數(shù)據(jù)庫(kù)這塊的壓力是最大的,CND大型廣告網(wǎng)站用的是Oracle、RAC方案,它保證了數(shù)據(jù)的搞可用性,當(dāng)然了價(jià)格也是非常昂貴的(如果使用高配置的PC服務(wù)器,Oracle一般按照CPU個(gè)數(shù)收費(fèi));那么字啊使用免費(fèi)的MySQL數(shù)據(jù)時(shí),面對(duì)這種并發(fā)壓力打的情況,我們應(yīng)該怎么辦?
首先,可以在數(shù)據(jù)庫(kù)中加入memcached數(shù)據(jù)緩存,在實(shí)際線上使用時(shí),發(fā)現(xiàn)memcached功能強(qiáng)大、性能穩(wěn)定,在數(shù)據(jù)流頻繁讀寫(xiě),壓力過(guò)大的情況下,增加一臺(tái)memcached數(shù)據(jù)庫(kù)緩存服務(wù)器的效果能超過(guò)我們的預(yù)期。
數(shù)據(jù)庫(kù)的硬件方面可以考慮投入磁盤隊(duì)列做成RAID10,如果資金充裕,磁盤可以用固定硬盤來(lái)代替SAS硬盤,畢竟數(shù)據(jù)庫(kù)的壓力主要來(lái)自磁盤I/O方面。
合理的設(shè)計(jì)MySQL數(shù)據(jù)庫(kù)的架構(gòu),事實(shí)上,在生產(chǎn)環(huán)境下,一主多從、讀寫(xiě)分離是靠譜的設(shè)計(jì)方案,從MySQL的負(fù)載均衡推薦大家使用LVS,這是因?yàn)楫?dāng)后面的MySQL機(jī)器超過(guò)十臺(tái)時(shí),HAProxy在這方面的性能不如LVS。
如果網(wǎng)站的業(yè)務(wù)量過(guò)大,可以采用分庫(kù)的方法,比如將網(wǎng)站的業(yè)務(wù)量分成Web、BBS、Blog等幾組,每一組均采用主從還夠,這樣的設(shè)計(jì)避免了單組數(shù)據(jù)庫(kù)壓力過(guò)大的情況。
另外我們應(yīng)該還配合公司的MySQL、DBA和開(kāi)發(fā)人員,在數(shù)據(jù)庫(kù)參數(shù)優(yōu)化、SQL語(yǔ)句優(yōu)化、數(shù)據(jù)切分上多下功夫,避免數(shù)據(jù)庫(kù)成為網(wǎng)站的瓶頸。
1、我們的網(wǎng)站放在IDC機(jī)房?jī)?nèi),首選考慮的就應(yīng)該是如何防止DDOS/CC攻擊。DDOS攻擊雖然沒(méi)什么技術(shù)含量,但真正攻擊過(guò)來(lái)還是很讓人煩躁的。在搭建網(wǎng)站或系統(tǒng)時(shí),我們應(yīng)該盡可能地了解和熟悉各種防火墻的技術(shù)指標(biāo)參數(shù),為客戶提供性價(jià)比最好的防火墻方案也是保證整套系統(tǒng)或網(wǎng)站成功的因素之一。
2、業(yè)務(wù)邏輯設(shè)計(jì)要合理,尤其是程序代碼層的相關(guān)設(shè)計(jì),如果程序應(yīng)用架構(gòu)和業(yè)務(wù)實(shí)現(xiàn)不夠優(yōu)化,一個(gè)本來(lái)很簡(jiǎn)單的實(shí)現(xiàn)卻繞了很多彎路才實(shí)現(xiàn),那么多強(qiáng)的硬件也沒(méi)有用。
3、也許是受張宴先生的影響,現(xiàn)在越來(lái)越多的朋友把注意力放在Nginx上了。其實(shí)Apache的抗并發(fā)能力并不弱。在生產(chǎn)環(huán)境下,如果我們的網(wǎng)站不是廣告型網(wǎng)站、門戶型網(wǎng)站或游戲型網(wǎng)站,2000并發(fā)已經(jīng)是一個(gè)很驚人的數(shù)字。另外這個(gè)僅僅是一臺(tái)Apache的并發(fā),一個(gè)中等規(guī)模的網(wǎng)站,后端至少會(huì)有3~4臺(tái)Apache的Web應(yīng)用程序,所以,全部加起來(lái)我們的網(wǎng)站差不多可以頂住上萬(wàn)的并發(fā),上萬(wàn)的并發(fā)量對(duì)網(wǎng)站根本沒(méi)有什么大的影響。當(dāng)然,如果換作Nginx作為Web應(yīng)用服務(wù)器更沒(méi)問(wèn)題了。另外,就算并發(fā)量非常大,我們最前端的F5/LVS還是頂?shù)米〉模瑹o(wú)非是在后端多加幾臺(tái)Web應(yīng)用服務(wù)器。所以說(shuō),并發(fā)量大不可能成為Web應(yīng)用服務(wù)器的瓶頸。
4、DRBD+HeartBeat+NFS文件服務(wù)器在初期沒(méi)什么壓力,但隨著網(wǎng)站的用戶數(shù)和流量越來(lái)越大,它可能會(huì)感覺(jué)有些頂不住了,特別是用戶頻繁訪問(wèn)圖片文件時(shí)。我們?cè)诠緝?nèi)部也測(cè)試郭Google的分布式文件系統(tǒng),但是一直沒(méi)敢用于生產(chǎn)環(huán)境中,最后還是決定采用Nginx作為中層代理,增加Squid反向代理服務(wù)器集群的方法來(lái)解決文件服務(wù)器的壓力問(wèn)題。另外,如果資金充裕,最前端也應(yīng)該租售CDN用于網(wǎng)站加速。
5、將Nginx作為中層代理使用是一件性價(jià)比非常高的事情。如果擔(dān)心單點(diǎn)Nginx故障,我們可以設(shè)置3臺(tái)以上的Nginx負(fù)載均衡器,而它們的load、balance可以讓F5/LVS來(lái)做。Nginx在這層可以利用其強(qiáng)大的正則處理能力很完美地處理客戶端對(duì)靜態(tài)文件的訪問(wèn),比如將html、jpg、png、css等交給后端的Squidarnish集群處理,冬天的PHP/JSP訪問(wèn)請(qǐng)求交給后端的PHP/Tomcat集群服務(wù)器處理,動(dòng)靜分離,最大化地發(fā)揮Nginx作為負(fù)載均衡器/反向代理的優(yōu)勢(shì)。
如果沒(méi)有硬件的F5、Big-Ip設(shè)備,我們也可以用軟件LVS來(lái)實(shí)現(xiàn),這樣成本會(huì)相當(dāng)?shù)?。Nginx則利用其強(qiáng)大的正則功能,并根據(jù)URL或客戶請(qǐng)求文件的后綴名來(lái)做動(dòng)靜分離,或者輪訓(xùn)不同的Squid/Varnish反向代理群組。
6、上線的項(xiàng)目在后期無(wú)論怎么優(yōu)化或架構(gòu),最后其壓力最大的肯定是MySQL數(shù)據(jù)庫(kù),尤其是那些動(dòng)態(tài)網(wǎng)站。我們?cè)诰S護(hù)時(shí)也發(fā)現(xiàn),MySQL數(shù)據(jù)庫(kù)在頻繁地讀寫(xiě),如何優(yōu)化MySQL數(shù)據(jù)庫(kù)及設(shè)計(jì)高性能高可用的MySQL數(shù)據(jù)庫(kù)架構(gòu)一致是我們關(guān)注和研究的方向,我也希望大家在工作中注意這個(gè)問(wèn)題。
7、系統(tǒng)或網(wǎng)站的構(gòu)建、運(yùn)維和調(diào)試并不只是一個(gè)人的事情,它是整個(gè)團(tuán)隊(duì)合作努力的結(jié)果,需要整個(gè)團(tuán)隊(duì)的開(kāi)發(fā)人員、系統(tǒng)工程師和DBA及測(cè)試人員共同努力,要寫(xiě)出安全、效率高、優(yōu)美的代碼,需要花費(fèi)開(kāi)發(fā)人員大量的心血。
來(lái)源:徐亮偉架構(gòu)師之路
原文:http://t.cn/R44k5Zx
版權(quán):本文版權(quán)歸原作者所有
聯(lián)系客服