如果沒有任何經(jīng)驗,學習如何擴展一個網(wǎng)站是相當困難的。假設現(xiàn)在你有很多像highscalability.com那樣網(wǎng)站,你需要一些好的解決方案來擴展它們,但是世上沒有“萬能藥”,沒有哪個解決方案可以適應所有網(wǎng)站的需要。你不得不自己動手,通過不斷地思考來找到一個能滿足你的需求的解決方案。我也是這樣做的。
幾年以前,我的老板來找我,然后對我說:“我們有一個新項目想交給你來做。主要是一個網(wǎng)站的重構,在一個月內(nèi),這個站點已經(jīng)擁有100萬個用戶了。你必須重新構建這個網(wǎng)站,來確保我們可以應對將來逐漸增加的用戶數(shù)量!蔽乙呀(jīng)是一個有經(jīng)驗的程序員了,但是在這些方面并不擅長,所以我不得不開始學習如何擴展一個網(wǎng)站——整個過程歷盡了艱難困苦。(相關文章推薦:重構:“為什么”和“怎么做”)
這個網(wǎng)站的后臺軟件是一個PHP內(nèi)容管理系統(tǒng),基于Smarty和MySQL。第一個任務是找到一個合適的托管公司,這個公司需要具有豐富的經(jīng)驗,可以為我們管理服務器。經(jīng)過一番調(diào)查研究,我們找到了一家這樣的公司,然后告訴他們我們的需求,他們給我們推薦的配置如下:
- 負載均衡器 (+Fallback)
- 2個Web服務器
- MySQL服務器(+Fallback)
- 開發(fā)機器
他們說,這就是我們需要的所有東西了——對此,我們深信不疑。我們最后得到的配置是:
- 負載均衡器 (單核, 1GB 內(nèi)存, Pound)
- 2個Web服務器 (雙核, 4GB 內(nèi)存, Apache)
- MySQL服務器 (四核, 8GB 內(nèi)存)
- 開發(fā)機器 (單核, 1GB 內(nèi)存)
這個配置十分的基礎,并沒有做進一步優(yōu)化。為了同步文件(PHP和媒體文件),他們建立了一個active-active DRBD。最后,重構開始了——當然,我們很興奮。一大早,我們把域名切換到了新的IP上,運行我們的監(jiān)控腳本,然后盯著屏幕看。我們馬上在這些機器上看到了流量,一切似乎都工作的很好。頁面載入的很快,MySQL負擔了大量的查詢?nèi)蝿,我們所有人都很高興。
然后,突然我們的電話開始響個不停:“我們不能訪問你們的網(wǎng)站了,這是怎么回事?”我們看了一下我們的監(jiān)控軟件,事實的確如此——服務器都被frozen了,站點處于離線狀態(tài)!當然,我們做的第一件事情是打電話給我們的托管服務提供商:“我們的所有服務器都死機了。這是怎么回事?”他們答應檢查一下機器,一會再打過來。這個電話來了:“你的系統(tǒng)根本就無法插手。你做了什么?它完全被搞砸了!彼麄兺V沽素撦d均衡器,然后讓我觀察一下其中一個Web服務器?吹侥莻index.php文件,我大吃一驚。它包含一些奇怪的C代碼片段,錯誤消息和一些看起來像日志文件的東西。經(jīng)過進一步的調(diào)查,我們發(fā)現(xiàn)是DRBD引發(fā)了這次事故。
"殺死"你的服務器的方法之一
把Smarty compile和模板緩存放到一個高負載的active-active DRBD集群上,那么你的服務器將會掛掉!當我們的托管服務提供商修復了Web服務器的時候,為了在這些服務器的本地文件系統(tǒng)上存儲Smarty緩存文件,我重寫了部分CMS代碼。我們再次上線了!
現(xiàn)在是午后。這個網(wǎng)站通常在下午的晚些時候到傍晚達到峰值。晚上,幾乎沒有什么流量。我們一直盯著監(jiān)控軟件,我們所有人都緊張得不得了。這個網(wǎng)站可以被載入,但是后來,系統(tǒng)負載越高,響應就越慢。我增加了Smarty模板緩存的生存期,希望這能產(chǎn)生效果——但是很可惜,這并沒有產(chǎn)生效果!不久,服務器開始給出超時提示,空白頁面和錯誤信息。有兩臺機器不能處理負載。
我們的客戶這個時候有一點緊張,但是他說:OK,重構通常會引發(fā)一些問題的。只要你能很快地修復它,那就沒事了!
出處:IT專家網(wǎng)
責任編輯:bluehearts
上一頁 下一頁 "殺死"你的服務器的6種方法 [2]
◎進入論壇網(wǎng)站綜合、網(wǎng)頁制作版塊參加討論
|