高性能流媒體服務器nginx-http-live-module

        nginx-rtmp-module實現了開創性的工作,但是,實際上它的完成度並不高,缺少的功能和缺陷在前面的文章中已有提及。如果要在實際生產環境中使用,必須進行大量的修改。

        nginx-http-flv-module部分解決了一些問題,也由於我本身有些知識和測試環境所限,有些問題的解決週期很長甚至無法解決。不管怎樣,nginx-http-flv-module能成長成今天這個樣子,離不開contributors(github裏的統計不全,其實加我自己一共有6人)的貢獻和網友們的測試和反饋。

        nginx-http-flv-module的vhost功能一直不能完美在多進程模式下運行,這個問題從有網友反饋到現在已經有快一年的時間了,期間我在CSDN,OSChina,segmentfault,Google Group,知乎甚至脈脈(還被懟了,說我發廣告)都求助過,一直沒有反饋,直到最近才徹底解決了這個問題。

        另外,前面的文章分析過nginx-rtmp-module在多進程模式下auto push功能有效率低下的問題,不過考慮到一般情況下publishers要比subscribers少很多,在一般場景下,nginx-rtmp-module可以勝任了。服務器壓力測試表明,推流2000基本上是極限,下文會給出壓力測試錄屏的截圖(推流還沒完全穩定時,有一小段時間各個CPU的使用率都是100%)。

        nginx-http-flv-module這個名稱當初沒如何考慮就起了,後來發現跟Nginx本身的ngx_http_flv_module的有點混淆,還有幾個網友問過它們有什麼區別。上述的一些問題在新的項目nginx-http-live-module中已經解決,這個項目不再開源,有需要的可以通過我的github主頁的郵箱跟我聯繫。nginx-http-flv-module我會繼續維護,nginx-http-live-module的有些功能,過一段時間後我會考慮移到nginx-http-flv-module。

        nginx-http-live-module除了nginx-http-flv-module已有的功能以外,還增加了一些功能,解決了一些問題:

1.vhost功能不能完美在多進程模式下運行。

2.auto push功能在多進程模式下效率低下。

3.多進程模式下pull同源合併。

4.支持rtmps,作爲服務器已經沒有問題了,作爲下游服務器時還有些問題沒有解決。

        Nginx絕大多數情況下是以多進程方式運行的,得益於Nginx良好的基礎設施,nginx-http-live-module纔可能解決auto push功能在多進程模式下效率低下的問題,併發量提高了至少4倍。

        好像各大網站都不太支持上傳視頻,下面給出nginx-http-live-module在多進程模式下使用原生的auto push和cond pull(我自己起的名)的壓力測試對比錄屏截圖。

服務器配置:20個CPU(Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz),64G內存(16G x 4,DDR4,2400MT/s),操作系統CentOS 7.6。

壓力測試工具:srs-bench

壓力測試視頻:srs-bench自帶的視頻,視頻編碼H.264,音頻編碼AAC,碼率240kbps左右。

Nginx配置:20個worker進程,開啓CPU綁定,支持SO_REUSEPORT選項,無驚羣效應。

1.首先是開啓原生的auto push後的壓力測試錄屏截圖:

軟硬件基本信息
剛啓動後的Nginx信息
推流2000路
推流2000路穩定後的Nginx信息
拉流1000路mystream_999
拉流1000路mystream_999後的Nginx信息
拉流1000路mystream_1999
拉流1000路mystream_1999後的Nginx信息
拉流1000路mystream_999的統計信息
拉流1000路mystream_1999的統計信息
推流2000路和拉流2000路穩定後的Nginx信息

 

2.然後是開啓cond pull後的壓力測試錄屏截圖:

軟硬件基本信息
剛啓動後的Nginx信息
推流8000路
推流8000路穩定後的Nginx信息
rtmp方式拉流1000路mystream_999
拉流1000路mystream_999後的Nginx信息
rtmp方式拉流1000路mystream_1999
拉流1000路mystream_1999後的Nginx信息
rtmp方式拉流1000路mystream_2999
拉流1000路mystream_2999後的Nginx信息
rtmp方式拉流1000路mystream_3999
拉流1000路mystream_3999後的Nginx信息
http-flv方式拉流1000路mystream_4999
拉流1000路mystream_4999後的Nginx信息
http-flv方式拉流1000路mystream_5999
拉流1000路mystream_5999後的Nginx信息
http-flv方式拉流1000路mystream_6999
拉流1000路mystream_6999後的Nginx信息
http-flv方式拉流1000路mystream_7999
拉流1000路mystream_7999後的Nginx信息
推流8000路的統計信息
rtmp方式拉流1000路mystream_999的統計信息
rtmp方式拉流1000路mystream_1999的統計信息
rtmp方式拉流1000路mystream_2999的統計信息
rtmp方式拉流1000路mystream_3999的統計信息
http-flv方式拉流1000路mystream_4999的統計信息
http-flv方式拉流1000路mystream_5999的統計信息
http-flv方式拉流1000路mystream_6999的統計信息
http-flv方式拉流1000路mystream_7999的統計信息
推流8000路和拉流8000路穩定後的Nginx信息(1)
推流8000路和拉流8000路穩定後的Nginx信息(2)
推流8000路和拉流8000路穩定後的Nginx信息(3)

 

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