Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1426214
  • 博文数量: 188
  • 博客积分: 1784
  • 博客等级: 上尉
  • 技术积分: 2772
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 22:20
个人简介

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。

文章分类

全部博文(188)

文章存档

2020年(12)

2019年(11)

2018年(4)

2017年(3)

2016年(11)

2015年(22)

2014年(19)

2013年(25)

2012年(32)

2011年(49)

分类: 服务器与存储

2014-01-03 15:40:58

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


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

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

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

nginx-rtmp做edge的配置:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. rtmp {  
  2.     server {  
  3.         listen 1935;  
  4.         application edge{  
  5.             live on;  
  6.             pull rtmp://127.0.0.1:2935/live;  
  7.         }  
  8.     }  
  9. }  

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

Wowza2的配置如下:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 修改:/usr/local/WowzaMediaServer/bin/startup.sh  
  2. 多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m  
  3. 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  
  4.   
  5. 修改Ping超时设置:  
  6. /usr/local/WowzaMediaServer/conf/live/Application.xml  
  7. 60000000  
  8. 12000000  
Wowza3的配置更改如下:
[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 修改:/usr/local/WowzaMediaServer/bin/startup.sh  
  2. 多分配内存,否则无法支持8k连接:-Xms2024m -Xmx6048m  
  3. $_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  
  4.   
  5. 修改Ping超时设置:    
  6. /usr/local/WowzaMediaServer/conf/live/Application.xml  
  7. 60000000  
  8. 12000000  

测试数据如下。

Test 5k Clients

5.5k的数据如下:

RTMP 900kbps 5k Clients
  Wowza2 Wowza3 SmartServer NginxRtmp(Origin) NginxRtmp(Edge)
CPU 663.9% 1247.5% 494% 310% 425%
Mem 1GB 6.7GB 118MB 216MB 244MB
Load 3.99 26.53 4.06 3.33 4.77
Process 1 1 8 8 8
Threads 242 242 8 8 8
Bandwidth Required 4.68Gbps 4.68Gbps 4.68Gbps 4.68Gbps 4.68Gbps
Bandwidth Actual 4.14Gbps 4.2Gbps 4.5Gbps 4.9Gbps 4.9Gbps
Connections 5168 5203 5201 5204 5202
Client-Load 5.68 26.53 3.70 7.74 10.94
FlashPlay(Win7) delay 7s -s 1.2s 3s 1s
Architecture java, 
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
  Wowza2 Wowza3 SmartServer NginxRtmp(Origin) NginxRtmp(Edge)
CPU 811.6% 1472.3% 813.7% 488% 575%
Mem 5GB 10GB 188MB 254MB 307MB
Load 5.55 29.16 7.18 5.53 5.08
Process 1 1 12 8 8
Threads 242 242 12 8 8
Bandwidth Required 7.2Gbps 7.2Gbps 7.2Gbps 7.2Gbps 7.2Gbps
Bandwidth Actual 6.5Gbps 3.6Gbps 7.6Gbps 7.6Gbps 7.5Gbps
Connections 8003 8003 8001 8004 8002
Client-Load 13.31 2.73 12.05 17.81 17.94
FlashPlay(Win7) delay 14s -s 1s 4s 1.7s
Architecture java, 
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
  Wowza2 Wowza3 SmartServer NginxRtmp(Origin) NginxRtmp(Edge)
CPU 1743.1% 不支持 864.7% 487% 378%
Mem 11GB 不支持 1.7GB 342MB 378MB
Load 13 不支持 3.39 4.35 3.96
Process 1 1 17 8 8
Threads 242 242 17 8 8
Bandwidth Required 10Gbps 不支持 9.9Gbps 10Gbps 10Gbps
Bandwidth Actual 7.4Gbps 不支持 10.1Gbps 8.5Gbps 8.48Gbps
Connections 12002 不支持 11245 12004 11960
Client-Load 3 不支持 29.94 30.47 30.29
FlashPlay(Win7) delay NaN
(客户端
直接卡死)
不支持 1.7s 3s 1.3s
Architecture java, 
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),所以无法继续开更多客户端测试,服务器的负载还很低,还可以开启更多的客户端。

其他因素

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

其他对比
  Wowza2 SmartServer NginxRtmp
集群 Origin+Edge Edge Origin+Edge
主备 不支持 支持 不支持
直播转码 支持 不支持 支持
HLS 支持 不支持 支持
可维护性 容易 容易 很难
监控数据 不支持 支持 不支持
HTTP接口 不支持 不支持 支持
Reload 不支持 支持 支持
Reload 不支持 支持 支持
Vhost 支持 支持 不支持
极简配置 不支持 支持 部分支持
(Edge回源时
必须指定app)

理论上,nginx或者st这种架构,为网络服务器的最优架构。

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

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

阅读(2308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~