如何将CDN视频转码集群的吞吐打到10Gb/s

    视频业务中要提供视频的转码,切片和缩略图,这类业务有个明显特点,都是高cpu ,高网络吞吐的。下面主要介绍背景,有大批量文件需要 hls 切片,这是个耗cpu 的过程,然后,需要从源拉取切片再推回去,而且整个业务,有时间限制,所以,这里需要平衡cpu ,网络流量和磁盘。

该文章后续仍在不断的更新修改中, 请移步到原文地址http://dmwan.cc

    环境介绍:万兆光卡 + 万兆光纤,ssd 硬盘。

    首先,速度测试,ffmpeg codec copy (不设置,就不一定是输入的编码,就可能产生解码操作,极大影响性能)切片的速度大概是100M/s ,单机带宽可以打到500M/s。

方案一: cpu 核数线程调用ffmepg,ffmpeg -i 直接指定url 拉,每个线程for 循环推,或者直接ffmpeg推。

    这个是最开始想的方案, 结果ffmpeg 边拉边切片,速度比直接切片慢了10倍。这里先download。

方案二, cpu 核数线程调用ffmepg,先download 下载,再切片,循环上传。

    结果,cpu 特别低,流量也打不高。根本不能再指定时间完成任务。

方案三,多进程调用ffmpeg, 线程池或者协程池推文件,将上行带宽打高。

    最终选择的是多进程+线程池的方式,这里并不是阻塞业务,异步并不会由太大的效果。但是又出了问题,由于网速很快,将iowait打到90%。

    整体吞吐只能到80M/s 不到。明显是磁盘出了异常。

iostat -d -k 1 10

查询,磁盘写入速度不到100M,这是ssd 硬盘啊!这种顺序读写,沟通了下,磁盘写可以理论上达到500MB/s,所以两种处理方式:

    第一种,横向挂四块盘,将所有请求hash到不同盘。发现写入速度直接提高近4倍。

    第二种,调整ssd硬盘,调整4k对齐后,速度提高3倍左右(由同时调整,应该是仍没达到理想性能)。

经过上面的优化,单机整体吞吐,能达到400MB/s。

还有可能的优化,怎么平衡转码和切片;在一次demuxer 后,转码和切片执行不用多次解封装;分段并行转码(有难点);cpu改成gpu转码; ffmpeg本身参数filter 及其复杂,该如何封装;缩略图等业务会产生大量小文件,如何减少这种小文件的读写,等等。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值