作者fare (遠)
看板share
標題Re: [資訊] http://tomsun.dyndns.org/cpg 台大學 …
時間Mon Feb 28 21:34:14 2005
[作者] far (Mac風) [站內] far_Room
[標題] [DOC] 架設大型網站
[時間] 2005/02/22 Tue 17:29:45
───────────────────────────<咖啡*微醺>─────
架設像Pixnet或者是無名這類網站真的要所費不貲麼?
其實不然.
下面的東西,對一些大Site來說是很基本的道理。只是想讓初學者
省去摸索跟試誤的時間。
一些架站的Tips..
1. Storage Server
外面一台專業存儲設備或者是NAS等等都價格昂貴,但有多少錢
做多少事情,買個幾台一般的主機,買個幾張RAID卡,RAID卡的價
錢,當然就關係著品質。建議購買具有RAID 5的功能之RAID卡,
stripe 可以加快讀取速度,硬碟越多顆,讀取速度越快。RAID 5
允許在有一顆硬碟fail的情況下可以rebuild資料回來。增加資料
安全性。
一般建立使用者,會給予其流水號,建議使用流水號來分目錄,
比如說Pixnet,有一位使用者的帳號是far,他的uid是12345,我
會將他的圖片放置於userpics/4/5/12345裡面,這樣有什麼好處?
好處在於可以把使用者平均的分散在不同的目錄,不同的機器上。
像pixnet的範例,依成長的比例,從1台~100台都可以自由運用。
(分的越細當然就可以分更多台)。有人會說每個人用量都不一樣,
真的能夠平均麼?可以的。人數越多,就越平均.:)。某site用的是
使用者名稱的第一個字母,但是英文字首的命名本來就極不平均
,所以要load banlance就越困難,加上他只能最多分到26台。
ㄧ般要讓其他機器可以存取圖檔,我們習慣的作法是開NFS,
但是我們建議,盡量不要用NFS,問題太多,效能也不好。能用其
他方式取代就取代。
2. DB
Pixnet 使用MySQL 5,自MySQL 4.1之後的sub-select是我很
愛用的,真的頗好用。DB在編譯的時候,用不到的功能能關就關,
my.cnf 其實有很多東西可以調,看你自己最多的query type是什
麼,對於memory的分配就很重要。DB重的是memory,所以能大就盡
量大。
tune my.cnf只能有部分的效能增進,要使其到極限,還是要
去改寫你的mysql query,使用EXPLAIN來看你的query是不是做太
多白工。這部份的效能增進是最大的。
打開log slow query,可以讓你知道哪些query最耗時,想辦
法改寫他。
打開mysql cache,這樣mysql會有cache的功能,相同的query
就不會再去處理一次,而把上ㄧ次同樣的結果丟出來。時間與CPU都
省了下來。
安裝mytop可以幫助你了解可能出問題的query在哪裡。
定期OPTIMIZE TABLE。
能讓php做的,就不要讓mysql去做。與其讓mysql去做非自己專
們的運算,不如給php做。
對於常常access且static的資料,比如像是熱門相簿等等,不需
要每次都重算。你可以每小時做一次統計,並且將結果丟到一個HEAP
的table,這樣對於這種很常大量access的資料,mysql幾乎只是提取
資料,而不需要另外做運算。效能上當然是大大增進。
將ㄧ些會很常大量access的資料,且可以經由其他table運算出來
的資料,放到另ㄧ個HEAP table,因為HEAP是把table放置到memory,
在server重起後,資料會不見。所以適合可以重新運算即可得到,且
被大量使用的資料上。
類似像隨機相簿這種,請不要真的把所有的資料放下去隨機,隨
著你的site成長越大,這部份的load也就會越大,你只要讓人家感覺
是隨機就好了。每個小時從原始資料中random出夠大的SET(比如說1萬份)
,當使用者要access時,再從這1萬份裡random取出10份即可。random
ㄧ萬份是比random一千萬份的時間是少之又少。Server Load也頓減許多。
要做的是功能,某種層度上它是真的隨機,請不要傻傻的全部去給他隨
機。
如果機器算多的話,做一下mysql replication,讓master專門
做寫入,讓多台slave做讀取,如此可以做到High Available又可以
做到備份的功效。效能增進上更是倍數成長。
3. reverse Proxy
Proxy是很重要的,他是擋在file server前面的東西。大家都知道
file server最怕的是硬碟壞軌,而過量的IO也確實會讓file Server的
壽命減少。Reverse Proxy的功能就在保護File Server的壽命。我在每
台file server上面跑thttpd。然後Reverse Proxy再跟file server的
HTTP要檔案。thttpd本身有cache的功能,你可以設定expire time,他
會cache在memory中,所以實際上可以減少硬碟的I/O,加上Reverse Proxy
又再一次的cache,可以做到雙層cache,做到保護硬碟的功效。
4. Web
如果可以的話,讓網站只有很簡單的吞吐,不要有多餘的功能,如果
是用APACHE之類的,module load越少越好,htaccess能關儘量關掉。PHP
如果可以就跑fastcgi,現在php cache的soft有很多,像是mmcache,APC
,eaccelerator等等。它可以將php complie候cache在memory裡,如此,
下一次同樣的request就可以少掉這段的耗費。
如果可以弄成static page就最好弄成static page。靜態頁面的吞吐
大過於php產生頁面。
5. 程式
程式方面就沒什麼好說了,這多少是看功力。多試多玩,他就是你的
了。
還有,做這種東西,很重要的是"Cache!Cache!Cache!!"
很多Optimize的方法Google其實都有,不要怕花太多時間,就算是一點點
小tip,有時也是很實用的。
寫的有點雜亂無章.以後想到再補訴。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.108.155
1F:推 TauriCrab:隨機相簿是抽樣後的隨機... 140.112.78.120 02/28
2F:→ TauriCrab:雖然早就想到是這麼一回事... 140.112.78.120 02/28
3F:→ TauriCrab:看到作者的說明還是很心酸... 140.112.78.120 02/28
4F:→ TauriCrab:按一個小時的隨機相簿,再出來的相簿都看過了 140.112.78.120 02/28
5F:推 Vanua:再次感謝法大分享寶貴經驗 :)140.138.252.160 02/28