我們的網站壓力究竟在哪裏

目前網站架構一般分成負載均衡層、WEB層和數據庫層,我其實一般還會多加一層,即文件服務器層,這樣我們在後面的討論過程中,我們可以依次對這四層進行討論;這裏爲了更具有說服力,我將用三個併發較大的生產環境來說明下,一個是我現在維護的電子商務網站(併發最大值2000,日PV500萬左右,此併發並不是總這麼高的,只是最高峯是有2900,下面的網站類似)、我的一拍網網站(併發最大值500,日PV50萬左右)、以前維護的大型CDN廣告網站(併發最大值5000,日PV5000萬左右)。

首先說下負載均衡層,我們熟悉的硬件/軟件技術有F5/LVS、HAProxy,還有Nginx,它們的性能都是非常優異的,且不說F5的抗併發能力,LVS現在在全世界範圍內的應用,而且淘寶現在升級架構,也將LVS取代了F5,HAProxy可能大家不是特別熟悉,但它確實在生產環境下表現優異,強大的吞吐能力,穩定性比之硬件過尤不及,再說下Nginx,我是將Nginx/HAProxy+Keepalived架構用於了各種生產環境中的,經過長時間的線上觀察,發現Nginx/HAProxy作爲負載均衡器/反向代理也很穩定,就算併發壓力過大,我們前面可以用F5/LVS來頂,而將Nginx作爲中層代理,這樣的效果其實也不差,所以負載均衡層的壓力不能算是特別大。

WEB層這塊壓力比較大的網站現在都換成了Nginx作爲WEB應用服務器,事實上,它的抗併發能力確實超過了預期;我朋友維護的一家門戶網站,高峯期時某臺Nginx應用服務器的並發達到了一萬以上,但Nginx也很負責和穩定的提供服務,在實際的生產環境中,如果我們考慮到後端的數據庫服務時,一萬併發應該也算是一個比較大的數值了;另外,Linux集羣有一個優勢,就是它的高擴展性,就算我們的網站的併發有一萬以上,我們後端的WEB服務是Apache,我們多加幾臺Apache服務器即可,在實際的線上維護時,我們發現,高峯期間,實際上每臺WEB的併發並不算是特別大,所以網站的壓力在這一層我們也能通過技術手段加以克服。

再說下文件服務器層,由於網站的後期宣傳策話,名氣也越來越大,PV值也越來越高,原先的DRBD+Heartbeat+NFS(這個其實也只是單NFS,只不過我們利用DRBD來保證NFS的高可用而已)已經越來越頂不住壓力了,這個時候我們想到了分佈式文件系統,我測試的的是MooseFS,在內網測試了很長時間還是沒敢用到生產環境下面,googel的分佈式文件系統還是很成熟的,推薦大家學習;最後還是用採用以前的CDN傳統的方法解決這個問題,即用了squid反向代理加速器來解決小文件過多的問題,Nginx強大的正則處理分發能力,也讓後端的NFS壓力變得很小;另外,我還用採用域名的分散策略例如使用pics.xxx.com/pdf.xxx.com...來區分標記爲a或b的一系列文件,這些文件存儲的時候,依然按照標記,存到pics或pdf的服務器上。這個策略將區分機器的任務交由dns服務器來執行,擴容時會相應輕鬆。這需要web項目初期就規劃好這些東東,後期才轉用域名策略的成本比較高甚至不可以實現,大家可以注意下,其實這一層如果網站是專業的圖片服務器網站時壓力還是很大的,我們需要在這個上面投入足夠多的硬件資源。

最後說下數據庫層的壓力,我覺得網站的PV和並發上去以後,數據庫這塊的壓力是最大的,CDN大型廣告網站我們用的是oracle RAC方案,它保證了數據的高可用性,當然了價格也是非常昂貴的(如果使用高配置的PC服務器,Oracle一般按照CPU個數收費);那麼免費的MySQL數據庫,面對這種併發壓力大的情況,又用哪些方法呢?首先,我們說下傳統的MySQL主從方案,配置簡單,單機MySQL優化做好事性能也不弱,如果這種架構解決不了數據庫的壓力情況,我們可以考慮以下幾種方案:

常規復制架構--Master-slaves,是由一個Master複製到一個或多個Salve的架構模式,主要用於讀壓力大的應用數據庫端廉價擴展解決方案,讀寫分離,Master主要負責寫方面的壓力。級聯複製架構,即Master-Slaves-Slaves,這個也是爲了防止Slaves的讀壓力過大,而配置一層二級 Slaves,很容易解決Master端因爲附屬slave太多而成爲瓶勁的風險。

Dual Master與級聯複製結合架構,即Master-Master-Slaves,最大的好處是既可以避免主Master的寫操作受到Slave集羣的複製帶來的影響,而且保證了主Master的單點故障。

MySQL的數據庫切分,我們可以通過數據切恰好技術將一個大的MySQL Server切分成多個小的MySQL Server,既解了寫入性能瓶頸問題,同時也一次提升了整個數據庫集羣的擴展性,從而解決了數據庫壓力過大的問題,這個現在也是我在生產環境中比較推薦的做法之一。

事實上我也跟許多系統維護人員和MySQL DBA線下交流過,現在生產環境下用得比較多的MySQL架構有:一、MySQL一主一從(這個優化得好,百多萬PV的網站完全沒問題);二、DRBD+Heartbeat+MySQL(MySQL官方推薦);三、MySQL一主多從,讀寫分離,LVS或HAProxy作讀的LB。

這段時間一直跟老男孩前輩交流千萬級PV的網站架構,系統架構其實是件藝術活兒,我們應該儘量做到以下幾點:一、保證高可用;二、保證高可擴展性;三、儘量把用戶往外面推(老男孩語),足矣。

 

本文出自 “撫琴煮酒” 博客,轉自:http://andrewyu.blog.51cto.com/1604432/612032

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章