|
本帖最后由 newphp 于 2013-1-8 23:20 编辑
我现在遇到一个非常纠结的问题。
公司做的是E文视频站,因为成本的问题,没有做分布式架构,现在就只用一台服务器,12块2T的硬盘,1G的带宽,12块硬盘做了raid0,做视频流的。
现在的问题是某些热门片子请求量太大,做了raid0的硬盘都遇到了IO瓶颈。
因为在FB上在做推广,有时候一个几百M的文件,同时被一百多个人请求,导致IO wait非常高,正常情况下带宽跑500M带宽没问题,非常轻松,当只要某一个文件被大量请求的时候,带宽最多只能跑120M。
如果是小文件可以用squid或varnish来做缓存,但是文件太大,有点不太现实,服务器上现在近10T的mp4。
这里说的某一个文件,这个文件不固定,可能这个小时是a.mp4,过了一个小时就是b.mp4,再过一个小时又是x.mp4,完全是随机的,无法精确到某一个文件。
现在我只能人肉检测,预先将一部份文件,比如说今天更新的片子,移到/dev/shm,然后监测只要发现某个文件请求量有升高的趋势,我现在是用lsof -c httpd获得文件被打开的情况,马上就把它复制到/dev/shm,然后再将原文件改名,并做软链接到/dev/shm里所对应的文件。
现在正在写自动检测程序,让机器去做那些机械的工作。
就是不知道有没有其它更好的解决方案,能缓解硬盘IO的问题,分布式因为成本的问题就不用考虑了。 |
|