超級rtmp服務器和屌絲wowza



寫在前面:最近公司有個相關的項目要用到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的配置:

<span style="font-family:KaiTi_GB2312;font-size:18px;">rtmp {
    server {
        listen 1935;
        application edge{
            live on;
            pull rtmp://127.0.0.1:2935/live;
        }
    }
}</span>

也就是說,源站的播放地址是:rtmp://192.168.1.50:2935/live/livestream,而邊緣的播放地址是:rtmp://192.168.1.50:1935/edge/livestream

Wowza2的配置如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">修改:/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> </span>

Wowza3的配置如下:

修改:/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

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)。


光纖連着兩臺服務器:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章