发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。
分类: 服务器与存储
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的配置:
也就是说,源站的播放地址是:rtmp://192.168.1.50:2935/live/livestream,而边缘的播放地址是:rtmp://192.168.1.50:1935/edge/livestream
Wowza2的配置如下:
5.5k的数据如下:
RTMP 900kbps 5k ClientsWowza2 | 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就是一坨屎。
8k连接的数据如下:
RTMP 900kbps 8k ClientsWowza2 | 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 |
12k连接的数据如下,12k左右时带宽需要达到10Gbps:
RTMP 900kbps 12k ClientsWowza2 | 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)。