我們需要一個計(jì)劃來減少負(fù)載,然后,我們和我們的托管服務(wù)提供商討論了這個問題。他們的一個系統(tǒng)管理員提出了一個好主意:“伙計(jì),你的服務(wù)器現(xiàn)在運(yùn)行在一個非常常見的Apache+mod_php架構(gòu)上。把你的Web服務(wù)器換成Lighttpd怎么樣?它是一個相當(dāng)小項(xiàng)目,但是維基百科都在使用它!蔽覀兺饬。(相關(guān)文章推薦:更好的選擇 細(xì)數(shù)Apache服務(wù)器的四個替代者)
"殺死"你的服務(wù)器的方法之二
把一個開箱即用的Web服務(wù)器架設(shè)在你的機(jī)器上,并且一點(diǎn)也沒有對它進(jìn)行優(yōu)化,那么你的服務(wù)器將會掛掉!那個管理員盡了他的最大努力,盡快地重新配置了所有的Web服務(wù)器。他拋棄了Apache,然后切換到Lighttpd+FastCGI+Xcache上來。后來,當(dāng)我們重新上線的時候,我們幾乎沒有再感受到壓力。這次,這些服務(wù)器會維持多長時間呢?
這些服務(wù)器運(yùn)行的出奇地好。負(fù)載比以前低很多,平均響應(yīng)時間也不錯。我們徹底放心了,然后我們都回家睡覺了。天已經(jīng)很晚了,我們認(rèn)為沒有其他的事情需要我們做了。第二天,網(wǎng)站運(yùn)行的相當(dāng)好,但是在高峰時段,它一直接近于崩潰的邊緣。我們發(fā)現(xiàn)MySQL是瓶頸,我們再次打電話給我們的托管服務(wù)提供商。他們建議在每個Web服務(wù)器上用MySQL從服務(wù)器進(jìn)行MySQL的主-從同步。
"殺死"你的服務(wù)器的方法之三
再強(qiáng)大的數(shù)據(jù)庫服務(wù)器也有它的極限,當(dāng)你到達(dá)它的極限的時候,你的服務(wù)器將會掛掉!在這種情況下,某些時候你的數(shù)據(jù)庫會變得十分緩慢,以至于隊(duì)列中大量的網(wǎng)絡(luò)連接會再次“殺死”我們的Web服務(wù)器。不幸的是這個問題很難修復(fù)。內(nèi)容管理系統(tǒng)在這方面十分的簡單,它本身并不支持單獨(dú)地讀取和寫入SQL查詢。重寫這一切花了很長時間,但是相對于每分鐘都遭遇到掛起休眠來說,是相當(dāng)值得的。
MySQL同步真的成功了,網(wǎng)站最終穩(wěn)定了!在接下來的幾周,幾個月里,網(wǎng)站取得了成功,用戶的數(shù)量開始不斷地增加。流量再次超過我們的資源限制,這只是時間的問題。
"殺死"你的服務(wù)器的方法之四
不提前作規(guī)劃,你的服務(wù)器可能會掛掉!
幸運(yùn)的是,我們一直在思考,并且一直在做規(guī)劃。我們優(yōu)化了代碼,減少了每個頁面載入的時候需要的SQL查詢的數(shù)量,我們意外地發(fā)現(xiàn)了MemCached這個好東東。首先,我們在一些核心功能上添加了對MemCached的支持,在一些重量級(運(yùn)行緩慢)的功能上我們也添加了對MemCached的支持。當(dāng)我們把這些變更部署以后,我們簡直不能相信這個結(jié)果——這感覺有點(diǎn)像發(fā)現(xiàn)了“圣杯”。我們每秒查詢的數(shù)量至少降低了50%。我們決定更多地使用MemCached,而不是購買另外一個Web服務(wù)器。
"殺死"你的服務(wù)器的方法之五
忘記做緩存,你會浪費(fèi)很多錢,而且,你的服務(wù)器還會掛掉!事實(shí)證明,MemCached幫助我們減少了70%-80%的MySQL服務(wù)器上負(fù)載,同時,在Web服務(wù)器上,也產(chǎn)生了巨大的性能提升。頁面載入的相當(dāng)快。
最終,我們的配置看起來似乎是完美的。即使在高峰時段,我們也無須再擔(dān)心崩潰或頁面響應(yīng)緩慢了。我們搞定它了嗎?不!一臺藍(lán)色的Web服務(wù)器開始有一點(diǎn)響應(yīng)緩慢了。然后出現(xiàn)了一些錯誤消息,空白頁面等等。這個系統(tǒng)負(fù)載能力很不錯,在大多數(shù)情況下服務(wù)器也都在工作,但是只是在“大多數(shù)情況下”而已。
"殺死"你的服務(wù)器的方法之六
把成百上千個小文件放在一個文件夾里,當(dāng)索引節(jié)點(diǎn)耗盡的時候,你的服務(wù)器將會掛掉!
是的,你沒有看錯。我們過去只是關(guān)注MySQL,PHP和Web服務(wù)器本身,并沒有太關(guān)注文件系統(tǒng)。Smarty緩存文件存儲在本地文件系統(tǒng)里——所有的緩存文件都存儲在同一個目錄下。解決方案是把Smarty放在一個專用的ReiserFS分區(qū)里。另外,我們還打開了Smarty的“use_subdirs”選項(xiàng)。
在過去的幾年里,我們一直在優(yōu)化頁面。我們把Smarty緩存放到了memcached中。為了更快速地處理靜態(tài)文件,我們安裝了Varnish來減少I/O負(fù)載。我們還切換到了Nginx(Lighttpd會隨機(jī)的產(chǎn)生error 500的消息),安裝了更多的內(nèi)存,購買了更好的硬件,更多的硬件......這個列表永遠(yuǎn)不會結(jié)束。
總結(jié)
擴(kuò)展一個網(wǎng)站是一個永遠(yuǎn)不會結(jié)束的過程。當(dāng)你解決了一個瓶頸以后,很可能馬上會遇到下一個瓶頸。永遠(yuǎn)都不要這樣想:“就是這樣,我們大功告成了”然后就靠邊站了。這會“殺死”你的服務(wù)器,甚至是你的業(yè)務(wù)。規(guī)劃和學(xué)習(xí)是一個持續(xù)的過程。如果你因?yàn)槿狈?jīng)驗(yàn)或資源而不能自己完成這個工作,那么可以找一個有能力勝任這個工作,而且很可靠的合作伙伴,和它一起來做這個工作。永遠(yuǎn)都不要停止和你的團(tuán)隊(duì)和合作伙伴溝通當(dāng)前遇到的一些問題和即將會遇到的一些問題。思考在前才能爭取主動。
原文:http://networking.ctocio.com.cn/386/11504386.shtml
本文鏈接:http://www.95time.cn/tech/site/2010/7924.asp
出處:IT專家網(wǎng)
責(zé)任編輯:bluehearts
上一頁 "殺死"你的服務(wù)器的6種方法 [1] 下一頁
◎進(jìn)入論壇網(wǎng)站綜合、網(wǎng)頁制作版塊參加討論
|