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

本文出自 “撫琴煮酒” 博客,請務必保留此出處http://andrewyu.blog.51cto.com/1604432/612032

看完了撫琴煮酒兄的這篇文章,又是有一番啓發,就像看病,下藥前得找到病因啊,有問題纔會去找解決問題的方法啊,所以,做網站運維,也得明白網站的哪些地方需要我們去維護的。不多說,看文章咯。

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


網頁緩存層
首先說下這個網頁緩存層,比如CDN租賃(效果比公司自己部署Squid/Varnish要好,他們專業,價格低廉,比如快網/CC等(價格80元/M/月不到)而且覆蓋的城市更多),自己架設squid/Varnish是次選。另外,很多朋友喜歡嘗試自建CDN,這個是一個比較吃力不討好的活兒,未必能達到預期目標,這塊系統架構師在架設網站初期就有規劃好,不要等到網站流量及壓力巨大時纔去規劃。事實上,這一層有很多優
秀的開源軟件都能勝利,比如傳統的Squid Cache,另外,後起之秀Nginx和Varnish因爲性能優異,越來越多的朋友嘗試在自己的網站使用他們作爲自己的網頁緩存,事實上,Nginx已經具備Squid所擁有的Web緩存加速功能,此外,Nginx對多核CPU的利用,勝過Squid不少,現在越來越來的架構師都喜歡將Nginx同時作爲“負載均衡服務器”與“Web緩存服務器”來使用,大家可以根據自己網站的情況,來決定究竟使用哪種軟件來作爲自己網站的網頁緩存。

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

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

文件服務器層
現在大家的生產服務器一般是使用如下四種來作爲自己的文件服務器層:
1)單NFS+備份NFS作爲文件服務器,這樣的好處是維護方便,但存在着單點故障,需要人爲手動干預;
2)DRBD+Heartbeat+NFS高可用文件服務器,維護方便,也不存在着單點故障,但隨着訪問量的增大,後期一樣存在着壓力過大的情況;
3)分佈式文件系統MFS、Gluster,,MFS易用,穩定,對海量小文件很高效,而且新版的MFS解決了
Master Server存在着單點故障的問題, 國內越來越多的公司在使用MFS。事實上,分佈式文件系統是解決文件服務器壓力過大的最終途徑,但這個同時也有隱患,網站功能越多,攤子越大,機器越多,維護起來越複雜。
4)如果大家的公司是淘寶和騰記這種巨量級的公司,可以嘗試開發自己的分佈式文件系統了,大家可以嘗試根據自己網站的情況,來決定究竟選擇哪一種軟件來作爲自己的文件服務器。

數據庫層
數據庫層的壓力,我覺得網站的PV和並發上去以後,數據庫這塊的壓力是最大的,CDN大型廣告網站我們用的是Oacle RAC方案,它保證了數據的高可用性,當然了價格也是非常昂貴的(如果使用高配置的PC服務器,Oracle一般按照CPU個數收費);那麼免費的 MySQL數據庫,面對這種併發壓力大的情況,這個時候我們應該怎麼辦呢?首先,我們可以在數據庫加入memcached數據緩存,在實際線上使用時,我們也發現memcached功能強大,性能穩定,在數據庫頻繁讀寫,壓力過大的情況下,增加一臺memcached數據緩存服務器的效果能超過我們的預期。數據庫的硬件方面可以考慮投入,磁盤陣列做成RAID10,如果資金充裕,磁盤可以用固定硬盤來代替SAS硬盤,畢竟數據庫的壓力主要來自於磁盤I/O方面。合理的設計MySQL數據庫的架構,事實上,在生產環境下,一主多從、讀寫分離是靠譜的設計方案,從

MySQL的負載均衡我這裏推薦大家使用LVS,這是因爲當後面的MySQL機器超過十臺時,HAProxy在這方面的性能不如LVS。如果網站的業務量過大,我們可以採用分庫的方法,比如將網站的業務量分成Web、BBS、Blog等幾組,每一組均採用主從架構,這樣設計的話就避免了單組數據庫壓力過大的情況。

另外,我們還應該配合公司的MySQL DBA和開發人員,在數據庫參數優化、SQL語句優化、數據切分上多做功夫,避免數據庫成爲我們網站的瓶頸。

希望大家能夠通過以上網站的五層分解,結合自己網站的情況,瞭解每一層在網站設計中的作用和重要性,找出網站瓶頸加以優化,將自己的網站打造成高可用高可擴展性的網站。

本文出自 “撫琴煮酒” 博客,請務必保留此出處http://andrewyu.blog.51cto.com/1604432/612032

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