全球主机交流论坛

标题: 高并发流媒体服务器寻求解决方案 [打印本页]

作者: newphp    时间: 2013-1-8 23:18
标题: 高并发流媒体服务器寻求解决方案
本帖最后由 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的问题,分布式因为成本的问题就不用考虑了。
作者: vagaa    时间: 2013-1-8 23:20
找专业人士
作者: gaogeli    时间: 2013-1-8 23:27
有1G的带宽可以用啊,这个费用随便分出一点来就能买十台服务器了吧
作者: wmfy808    时间: 2013-1-8 23:28
做这个只有p2p才是王道!否则做不大,大了必死!
作者: 嫂子抱紧我    时间: 2013-1-8 23:32
ssd缓存量大的
作者: 拉里佩奇    时间: 2013-1-8 23:36
raid0?真是牛逼啊。一块坏了,数据全部丢失,起码做个raid5。我怎么感觉这样的话,速度应该很快的啊。读速度应该是n块的总和
作者: newphp    时间: 2013-1-8 23:39
拉里佩奇 发表于 2013-1-8 23:36
raid0?真是牛逼啊。一块坏了,数据全部丢失,起码做个raid5。我怎么感觉这样的话,速度应该很快的啊。读速 ...

raid0的写入速度没话说,但是读取速度在频繁单读某个区域的时候跟单盘差不多。
如果用raid5还不如用raid6,raid6在写方面不行,在读方面性能非常好。
作者: 嫂子抱紧我    时间: 2013-1-8 23:41
不是全部用ssd 程序判断热片就转移到ssd 一定时间没请求就删除
作者: Zeraba    时间: 2013-1-8 23:41
本帖最后由 Zeraba 于 2013-1-8 23:54 编辑

我正想试试
如果是nginx
带上--with-file-aio编译
内核2.6.22+
然后修改nginx.conf中相应部分
  1. ...
  2. location / {
  3.   aio on;
  4.   directio 1;
  5.   output_buffers 1 128k;
  6. }
  7. ...
复制代码
我还没来得及测试 大文件不知道如何 小文件应该是可以的
nginx aio 不用等待每次 io 的结果有助于并发处理大量 io 和提高 nginx 处理效率
我下午看的vpsee.com里面的博文

如果I/O wait到了100% 考虑下其他raid 没到应该可以用程序稍稍优化 不过效果不大
最好还是分布式 再买些两手硬件 用这些硬盘再组出两台 性能次要 是最好的了
我就能想到这么多 等大牛来
作者: palina    时间: 2013-1-8 23:44
降低视频质量减小文件大小
作者: wmfy808    时间: 2013-1-8 23:46
参考一下爱奇艺,优酷,letv吧,有电脑端p2p,ipad之类也可以走p2p分流的
作者: newphp    时间: 2013-1-8 23:58
嫂子抱紧我 发表于 2013-1-8 23:41
不是全部用ssd 程序判断热片就转移到ssd 一定时间没请求就删除

12块硬盘已经把硬盘位全部用完了。
租用服务器的话,加64G内存,每个月多64欧元而己,算下来貌似要比SSD便宜些样。
作者: hepac    时间: 2013-1-9 00:04
把你手动的工作自动化,这个问题自然就解决了
作者: newphp    时间: 2013-1-9 00:06
Zeraba 发表于 2013-1-8 23:41
我正想试试
如果是nginx
带上--with-file-aio编译

现在的应用成了一个整体,最开始的架构以及程序,还要考虑收费方面的东西,牵一发动全身的,以前试过nginx,但后来放弃了,我们的视频兼容性有点问题,或者说是缺陷吧,让我们必须用apache。
通过iostat -m -x 2来看,await在高峰期非常高,%util肯定是百分百,是硬盘的磁头响应不过来,毕竟机械硬盘移动磁头需要时间。
小文件不存在,直接缓存到硬盘就行了,有现成的软件可用,但文件太大,而且还有query string,比如?start=123之类的,用squid来缓存就不现实了。
非常感谢回复。
作者: loveminds    时间: 2013-1-9 00:58
rtsp?mms?
http://www.chinanetcenter.com/pro_cdn_lmt.html
作者: Zeraba    时间: 2013-1-9 00:58
newphp 发表于 2013-1-9 00:06
现在的应用成了一个整体,最开始的架构以及程序,还要考虑收费方面的东西,牵一发动全身的,以前试过ngin ...

如果是磁头转不过来了 那程序上应该是无解了 考虑撤掉两块机械换上ssd cache也许可行  或者买几台KT的阿童木 总之 单机硬盘的瓶颈是没法避免的 两者每月成本应该差不多
nginx的确有些收费的东西不能做 我知道的就有某些程序的流量统计是依赖apache的 lnmpa倒是也行 不过既然是磁盘卡住了 那程序也无所谓了
作者: wdlth    时间: 2013-1-9 02:24
本帖最后由 wdlth 于 2013-1-9 02:34 编辑

很明显是大数据问题,有钱就上数据仓库。
会写模块的话用ATS缓存也行。
文件可以分段,像优酷那样。
RTMP服务器加P2P。
当然用得起CDN最好。
作者: domin    时间: 2013-1-9 03:50
ssd缓存即可. adaptec maxcache或者 lsi的cachecade.
作者: 一直在寻找    时间: 2013-1-9 03:52
据我所知 那些视频公司都会用的squid缓存···




欢迎光临 全球主机交流论坛 (https://sunk.eu.org/) Powered by Discuz! X3.4