您的位置:首页 > 其它

超级rtmp服务器和屌丝wowza

2014-10-23 09:47 197 查看
写在前面:最近公司有个相关的项目要用到80G的的万兆网络环境,正好公司的大牛搞个st的东东,写了一个压力测试工具,对比了一下各种流媒体服务,FMS没有包含在内,比较遗憾,不过已经比较全面了。原来听说intel的万兆网卡有问题,只能跑到不到的理论带宽,这点我测试过了,用intel最新的驱动,centos6,最次能跑到80%的理论带宽,最高能跑到95%以上,完全没有问题。没有做任何优化,这个以后我单发贴子吧。原来对Wowza影响很好,单经过这次测试彻底无语了,可能专注的点不同吧,wowza3还不如wowza2,很失望,先转这个测试的报告大家看看吧。

给某CDN公司做了一个rtmp服务器,使用state-threads(该公司首席架构师micheal定的框架),今天正好有80Gbps的万兆网络环境,就测了一下服务器在超级并发下的性能如何。

st在架构上,和nginx的异步架构是同源的,因为rtmp协议实际上损失了部分性能,实际上http的性能比这个更高。http跑到过72Gbps,带宽的90%。

手头只有wowza2的license,不过wowza2就传说能到10Gbps,我很怀疑,所以对比了一下。

nginx-rtmp做edge的配置:

[plain]view
plaincopy

rtmp {

server {

listen 1935;

application edge{

live on;

pull rtmp://127.0.0.1:2935/live;

}

}

}

也就是说,源站的播放地址是:rtmp://192.168.1.50:2935/live/livestream,而边缘的播放地址是:rtmp://192.168.1.50:1935/edge/livestream

Wowza2的配置如下:

[plain]view
plaincopy

修改:/usr/local/WowzaMediaServer/bin/startup.sh

多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m

java -server -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote=true -Xms2024m -Xmx13048m -Dcom.wowza.wms.AppHome=/usr/local/WowzaMediaServer -Dcom.wowza.wms.ConfigURL=
-Dcom.wowza.wms.ConfigHome=/usr/local/WowzaMediaServer -cp /usr/local/WowzaMediaServer/bin/wms-bootstrap.jar com.wowza.wms.bootstrap.Bootstrap start

修改Ping超时设置:

/usr/local/WowzaMediaServer/conf/live/Application.xml

<ApplicationTimeout>60000000</ApplicationTimeout>

<PingTimeout>12000000</PingTimeout>

Wowza3的配置更改如下:

[plain]view
plaincopy

修改:/usr/local/WowzaMediaServer/bin/startup.sh

多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m

$_EXECJAVA -server -Xms2024m -Xmx13048m -Djava.net.preferIPv4Stack=true $JMXOPTIONS -Dcom.wowza.wms.runmode="$mode" -Dcom.wowza.wms.native.base="linux" -Dcom.wowza.wms.AppHome="$WMSAPP_HOME"
-Dcom.wowza.wms.ConfigURL="$WMSCONFIG_URL" -Dcom.wowza.wms.ConfigHome="$WMSCONFIG_HOME" -cp $WMSAPP_HOME/bin/wms-bootstrap.jar com.wowza.wms.bootstrap.Bootstrap start

修改Ping超时设置:

/usr/local/WowzaMediaServer/conf/live/Application.xml

<ApplicationTimeout>60000000</ApplicationTimeout>

<PingTimeout>12000000</PingTimeout>

测试数据如下。


Test 5k Clients

5.5k的数据如下:

RTMP 900kbps 5k Clients

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU663.9%1247.5%494%310%425%
Mem1GB6.7GB118MB216MB244MB
Load3.9926.534.063.334.77
Process11888
Threads242242888
Bandwidth Required4.68Gbps4.68Gbps4.68Gbps4.68Gbps4.68Gbps
Bandwidth Actual4.14Gbps4.2Gbps4.5Gbps4.9Gbps4.9Gbps
Connections51685203520152045202
Client-Load5.6826.533.707.7410.94
FlashPlay(Win7) delay7s-s1.2s3s1s
Architecturejava,

single-process,

multiple-thread
java,

single-process,

multiple-thread
c++/st,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
比起Wowza2,后者的效率高20%,内存使用只有10%,延迟极佳。wowza3的CPU/Mem/Load就是一坨屎。


Test 8k Clients

8k连接的数据如下:

RTMP 900kbps 8k Clients

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU811.6%1472.3%813.7%488%575%
Mem5GB10GB188MB254MB307MB
Load5.5529.167.185.535.08
Process111288
Threads2422421288
Bandwidth Required7.2Gbps7.2Gbps7.2Gbps7.2Gbps7.2Gbps
Bandwidth Actual6.5Gbps3.6Gbps7.6Gbps7.6Gbps7.5Gbps
Connections80038003800180048002
Client-Load13.312.7312.0517.8117.94
FlashPlay(Win7) delay14s-s1s4s1.7s
Architecturejava,

single-process,

multiple-thread
java,

single-process,

multiple-thread
c++/st,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
比起Wowza2,后者的内存使用只有0.5%,延迟极佳。Wowza3跑不到8k。


Test 12k Clients

12k连接的数据如下,12k左右时带宽需要达到10Gbps:

RTMP 900kbps 12k Clients

Wowza2Wowza3SmartServerNginxRtmp(Origin)NginxRtmp(Edge)
CPU1743.1%不支持864.7%487%378%
Mem11GB不支持1.7GB342MB378MB
Load13不支持3.394.353.96
Process111788
Threads2422421788
Bandwidth Required10Gbps不支持9.9Gbps10Gbps10Gbps
Bandwidth Actual7.4Gbps不支持10.1Gbps8.5Gbps8.48Gbps
Connections12002不支持112451200411960
Client-Load3不支持29.9430.4730.29
FlashPlay(Win7) delayNaN

(客户端

直接卡死)
不支持1.7s3s1.3s
Architecturejava,

single-process,

multiple-thread
java,

single-process,

multiple-thread
c++/st,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
c,

multiple-process,

single-thread,

async-socket
可见,wowza2/3根本就无法达到10Gbps,尽管在80Gbps带宽中也达不到(http可是能到72Gbps)。而nginx同源架构的rtmp服务器,也能到10Gbps。

因为客户端负载过高(29.9),所以无法继续开更多客户端测试,服务器的负载还很低,还可以开启更多的客户端。


其他因素

除了性能之外,网络服务器需要考虑的因素包括:

其他对比

Wowza2SmartServerNginxRtmp
集群Origin+EdgeEdgeOrigin+Edge
主备不支持支持不支持
直播转码支持不支持支持
HLS支持不支持支持
可维护性容易容易很难
监控数据不支持支持不支持
HTTP接口不支持不支持支持
Reload不支持支持支持
带宽检测不支持支持不支持
极简配置不支持支持部分支持

(Edge回源时

必须指定app)
理论上,nginx或者st这种架构,为网络服务器的最优架构。

多进程+单线程+异步socket+HTTP===超级网络服务器(nginx)。

多进程+单线程+异步socket+Rtmp===超级RTMP服务器(nginx-rtmp/SmartServer)。

转载:http://gforce.blog.51cto.com/171824/1302378
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: