作者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