文獻標識碼:A
DOI: 10.19358/j.issn.2096-5133.2018.08.013
中文引用格式:馬艾田,耿立宏,王閏強,等.基于Nginx的科普云直播系統(tǒng)研究與實現(xiàn)[J].信息技術與網(wǎng)絡安全,2018,37(8):54-57,76.
0 引言
隨著4G技術的成熟推廣以及中國移動互聯(lián)網(wǎng)的發(fā)展,中國互聯(lián)網(wǎng)用戶尤其是手機用戶持續(xù)增長。根據(jù)中國互聯(lián)網(wǎng)絡信息中心(CNNIC)發(fā)布的第40次《中國互聯(lián)網(wǎng)絡發(fā)展狀況統(tǒng)計報告》,截至2017年6月,我國網(wǎng)民規(guī)模達到7.51 億,其中手機網(wǎng)民規(guī)模達到7.24億。各類手機應用的用戶規(guī)模不斷上升,場景更加豐富。網(wǎng)絡直播因其移動性、持續(xù)性、及時性和較強的互動性與參與感,在2016年后也進入高速發(fā)展期,數(shù)據(jù)顯示我國互聯(lián)網(wǎng)直播平臺為200家左右,用戶數(shù)量已經(jīng)達到2億[1]。
科普云直播系統(tǒng)是中國科普博覽提供的泛科學類直播服務平臺。科普云直播系統(tǒng)依托科普云資源管理平臺,基于Nginx開源系統(tǒng)、實時消息傳輸協(xié)議(Real Time Messaging Protocol,RTMP)、EasyDarwin開源系統(tǒng)、RTSP、HLS協(xié)議,采用混合的技術構架進行搭建。中國科學院科普云資源管理平臺是中國科學院網(wǎng)絡化傳播平臺——中國科普博覽提供的資源虛擬化管理平臺。平臺基于海云捷迅的云服務平臺AWCLOUD為中國科學院各個研究院所提供科普信息化服務。平臺對授權云資源用戶提供云資源的配置管理和調度服務。
1 系統(tǒng)架構
科普云直播系統(tǒng)采取了混合云的架構,架構分為3層:物理層、IAAS基礎設施服務層和應用層,如圖1所示。
圖 1 科普云直播系統(tǒng)架構
1.1 物理層
物理層分為3部分:計算服務器、存儲服務器和網(wǎng)絡服務器。其中,計算機服務器主要由DELL M610刀片服務器構建;存儲服務器采用的是中科藍鯨的Blue Whale BWstor BW3200DI集群NAS,它由高速存儲系統(tǒng)和內置的專有NAS系統(tǒng)組成,內置的專有NAS系統(tǒng)提供了BWFS、CIFS、NFS、FTP、HTTP等多種文件級訪問接口,同時還可以提供FC/IP SAN協(xié)議的塊級訪問接口[2];網(wǎng)絡服務器主要采用的是H3C的交換機及網(wǎng)絡安全設備。
1.2 IAAS基礎設施服務層
IAAS基礎設施服務層基于海云捷迅的云資源管理平臺AWCLOUD對基礎的物理資源進行了虛擬化,由管理節(jié)點、計算節(jié)點和存儲節(jié)點組成。其中分為5部分組件,分別是云控制器(Cloud Controller,CLC)、集群控制器(Cluster Controller,CC)、存儲控制器(Storage Controller,SC)、節(jié)點控制器(Node Controller,NC)和Walrus。其中,云控制器主要處理身份驗證,賬戶、報告、配額管理,從整體上進行資源的管理和調度。集群控制器一般會同時連接到云控制器和在同一個以太網(wǎng)廣播域的節(jié)點控制器。集群控制器一方面收集各個節(jié)點機的使用信息對虛擬機進行調度,另一方面集群控制器也管理虛擬網(wǎng)絡,在云控制器的引導下進行服務等級的實施。存儲控制器提供彈性的塊存儲,接入中科藍鯨的Blue Whale BWstor BW3200DI集群NAS,管理動態(tài)的塊、卷以及快照。節(jié)點控制器控制虛擬機的整個生命周期,包括虛擬機實例的運行、檢查、重啟、終止等。Walrus主要是用來存儲長久性的數(shù)據(jù),兼容Amazon的S3服務[4]。其既可以存儲鏡像卷快照,同時也可以HTTP方式進行put/get存儲即服務。此外,在中科藍鯨的集群NAS中對NAS的RAID5盤陣列進行了LUN(Logic Unit Number)的劃分,在通過光纖交換機相連的存儲節(jié)點上對各個邏輯存儲設備進行了Multi-path多路徑配置,以消除路徑單點,在盤陣之上又通過LVM(Logical Volume Manager)對多個邏輯存儲設備劃分了VG(Volume Group)、PV(Physical Volume)、LV(Logical Volume),為整個平臺提供可伸縮的公共存儲服務,實現(xiàn)存儲空間資源的動態(tài)管理。
1.3 應用層
應用層主要由RTMP(Real Time Messaging Protocol)流媒體服務器集群和RTSP(Real Time Streaming Protocol)流媒體服務器集群構成,分別支持通過RTMP和RTSP協(xié)議進行直播流的推送和拉取。為了保證流媒體服務器可以應對高并發(fā)的情況,面向用戶通過Nginx反向代理的方式來做負載均衡。其中流媒體服務主要是通過開源的Nginx Web服務器整合了RTMP擴展來進行媒體流的,而RTSP服務則是基于蘋果的開源流媒體服務Darwin以及Nginx Web服務器、Redis存儲服務構成。
2 關鍵技術
2.1 Nginx負載均衡技術
Nginx系統(tǒng)因為其輕量級模塊化設計、內存占用率低、并發(fā)高、開源且可以靈活擴展的特性,被廣泛地用于部署高性能高并發(fā)的服務器集群[3]??紤]到高并發(fā)的用戶場景,科普云直播系統(tǒng)采用Nginx反射代理的方式對流媒體用戶的請求進行負載均衡。
Nginx應用服務器采用Master-Worker的多進程、異步非阻塞的工作模式。Nginx啟動時會啟動一個Master進程和若干Worker進程,Master進程負責對Nginx本身和Worker進程進行管理調度,而Worker進程則負責對客戶端實際發(fā)來的請求進行響應。Worker中的ht_core模塊監(jiān)聽到互聯(lián)網(wǎng)上的用戶請求通過與backend的應用交互產生相關的響應內容,通常一個單獨的Worker進程使用一個處理器核,這樣能完全利用多核體系結構,并且避免線程抖動和鎖。在一個單線程的Worker進程內部不存在資源匱乏,并且資源控制機制是隔離的[5]。Nginx在文件系統(tǒng)上使用分層數(shù)據(jù)存儲實現(xiàn)緩存。緩存主鍵可配置,并且可使用不同特定請求參數(shù)來控制緩存內容。緩存主鍵和元數(shù)據(jù)存儲在共享內存段中,緩存加載進程、緩存管理進程和Worker進程都能訪問。其詳細的架構圖如圖2所示。
不同于作用于客戶端的正向代理,反向代理主要作用于服務器端。Nginx的反向代理機制則主要通過Ht_upstream和Ht_prpoxy來實現(xiàn)。反向代理機制對用戶透明,用戶請求發(fā)送給Nginx后,Ht_upstream重新組裝用戶請求并按照Ht_proxy指定的負載均衡策略發(fā)給Backend應用處理[6]。目前,Nginx支持兩種負載均衡策略,分別為加權輪詢(Weighted Round Robin)和IP Hash。
2.2 Nginx-rtmp-module
Nginx是一個功能豐富的應用服務器,通過第三方擴展Nginx-rtmp-module結合音視頻解決框架FFMP EG即可提供流媒體服務??破赵浦辈ハ到y(tǒng)采用Linux的Centos版本作為基礎應用平臺。
系統(tǒng)搭建部署過程中,需要在CentOS中首先編譯好Nginx-rtmp-module的模塊,然后在Nginx的編譯安裝過程中,指定編譯成功的Nginx-rtmp-module位置,加入RTMP協(xié)議擴展。然后在Nginx本身的配置文件中,加入RTMP相關配置指令。指定監(jiān)聽端口,默認指定RTMP默認端口1935,也可以根據(jù)自身系統(tǒng)構建需要指定其他可用端口,然后指定HLS(HTTP Live Stream)協(xié)議相關文件目錄即可。Nginx啟動過程可以從端口中看到監(jiān)聽RTMP流和提供Web服務的進程。
圖3為Nginx FFMPEG推流示意。Nginx推流端設備需要安裝FFMPEG,然后通過FFMPEG采集視頻音頻信號,使用RTMP協(xié)議推送給Nginx服務器。RTMP服務器一方面可以通過RTMP協(xié)議為用戶提供直播流,同時也會把直播媒體流信號切割分片,并以 m3u8分片文件的格式(分片文件會隨著直播流而不斷切割更新)存儲在Nginx指定的HLS目錄中,以HTTP流的方式推送給客戶端。
2.3 EasyDarwin
EasyDarwin是基于蘋果開源項目Darwin Streaming Server核心流媒體服務器開發(fā)擴展而來的。它支持跨平臺的PC端、移動端(iOS和Android)的RTSP直播(H264/MJPEG/MPEG4、AAC/PCMA/PCMU/G726)功能,底層(Select/Epoll網(wǎng)絡模型、無鎖隊列調度)和上層(RESTful接口、Web管理、多平臺編譯)、關鍵幀索引等[7]。
EasyDarwin架構如圖4所示。其中EasyPusher通過EasyNVR和EasyCamera采集到視頻信號,然后經(jīng)由EasyAACEncoder將音頻內容轉化成AAC格式,并通過RTP/RTSP協(xié)議進行傳輸,同時流媒體服務器可以通過EasyHLS和EasyRTSPClient將媒體流轉化為RTSP和HLS的直播流供EasyClient在HTML5或EasyPlayer中進行播放[8]。
3 系統(tǒng)性能測試
通過以上架構,科普云直播系統(tǒng)一定程序上解決了互聯(lián)網(wǎng)上海量直播觀看用戶壓力,在系統(tǒng)的并發(fā)性、可擴展性以及多直播流協(xié)議兼容性均有較好的表現(xiàn)。
3.1 系統(tǒng)擴展性及協(xié)議兼容性
系統(tǒng)通過AWCloud創(chuàng)建多個虛擬機模板,包括RMTP流媒體服務器和Darwin流媒體服務器模板。RMTP流媒體服務器模板中部署了Nginx和RTMP流媒體擴展服務以及FFMPEG轉碼服務;Darwin流媒體服務器模板中部署了Darwin流媒體以及轉碼服務。
當進行一次大規(guī)模直播時,直播流媒體用戶迅速增加,服務器以及帶寬出現(xiàn)壓力時,可以通過AWCloud平臺輕松快速擴展出多個RMTP流媒體服務器和Darwin流媒體服務器虛擬服務,通過負載均衡來均衡負載。同時,當直播結束,資源也可以迅速通過AWCLoud平臺收回,增加了資源的彈性,提升了資源的利用效率。
此外,這兩種模板也可以應對當前移動端不同客戶端設備不同格式的媒體流RTMP以及RTSP,從而讓直播系統(tǒng)在擴展性和協(xié)議兼容性上有較好的改善提升。
3.2 系統(tǒng)并發(fā)性測試
為驗證科普云直播系統(tǒng)的并發(fā)能力,通過使用Apache Jmeter工具來對服務器性能進行監(jiān)控的方式對科普云直播系統(tǒng)進行了并發(fā)性測試。
系統(tǒng)資源層面,系統(tǒng)通過AWCloud創(chuàng)建了一個Nginx負載均衡服務器、10個流媒體服務器。系統(tǒng)配置如表1所示。
通過分布式的方式,同時使用5臺Jmeter Slave對系統(tǒng)進行了1 000、5 000、10 000、50 000并發(fā)的壓力測試,10臺流媒體服務器單機100、500、1 000、5 000人并發(fā)。
科普云直播系統(tǒng)在總并發(fā)50 000、單機并發(fā)5 000時,響應錯誤率在0.2%,正確響應率可以達到99.8%,滿足需求;而在單機5 000以下,單機100、500、1 000并發(fā)時響應錯誤率為0%;單機并發(fā)超過5 000(總并發(fā)50 000)時,錯誤率上升較快,系統(tǒng)出現(xiàn)瓶頸,錯誤率達到了20%左右,可見系統(tǒng)在應對50 000(單機5 000)之內總并發(fā)時可以滿足用戶正常的使用,而在超出此并發(fā)時,系統(tǒng)在負載均衡及網(wǎng)絡層面開始出現(xiàn)瓶頸??梢酝ㄟ^增加流媒體服務器數(shù)量、換用硬件負載均衡、增加網(wǎng)絡帶寬的方式對系統(tǒng)并發(fā)性能進行擴展。
4 系統(tǒng)使用情況
科普云直播系統(tǒng)目前主要依托于中國科普博覽科普云在各個新媒體渠道及中國科普博覽求真云課堂面向中國科學院及社會公眾提供泛科學類直播服務,同時也為中國科學院繼續(xù)教育網(wǎng)面向中國科學院各研究所提供繼續(xù)教育培訓類的網(wǎng)絡直播服務。科普云直播系統(tǒng)在騰迅、百度、新浪及知乎平臺進行了“悟空衛(wèi)星的大發(fā)現(xiàn)與暗物質”的直播;在求真云課堂進行了“林群院士微積分課程”的直播;同時,本系統(tǒng)也為移動科學秀提供了直播服務。移動科學秀平臺是一個基于科普云平臺采用HTML5技術的跨終端數(shù)字內容管理與閱讀的應用服務系統(tǒng),平臺提供可視化的視頻編輯功能,可以為終端用戶通過豐富的科普博覽數(shù)字媒體資源庫快速生成H5、iOS/Andoid APP形式的數(shù)字化科學科普內容,截至目前,平臺入駐創(chuàng)作團隊447個,發(fā)布作品數(shù)量64期,總下載閱讀量達到101 024次。
科普云直播系統(tǒng)主要通過多機位采集多信號源,經(jīng)由導播臺進行信號切換,然后經(jīng)過網(wǎng)絡推流設備將信號通過RTMP或者RTSP協(xié)議推送至相應的流媒體服務器,然后由服務器進行直播信號的分發(fā),用戶則可通過計算機、智能手機、投影等多種設備進行直播的觀看。詳細的科普云直播系統(tǒng)直播示意見圖5。
5 結束語
科普云直播系統(tǒng)目前可以支持萬級用戶、數(shù)千并發(fā),但在應對十萬級、百萬級用戶和
一些強實時、強互動、用戶異地分布的場景時仍有待于一些新的解決方案,如CDN、云加速等技術,這需要在下一步工作中繼續(xù)研究并進行系統(tǒng)實現(xiàn)。
參考文獻
[1] 郭全中.我國互聯(lián)網(wǎng)直播業(yè)務發(fā)展綜述[N].傳媒,2017-02-30(15).
[2] 中科藍鯨.BWStor BW3200產品說明[EB/OL].[2018-03-02].http://www.bwstor.com.cn/templates/T_product/index.aspx?nodeid=3&page=ContentPage&contentid=489.
[3] 王利萍.基于Nginx服務器集群負載均衡技術的研究與改進[D].濟南:山東大學,2015.
[4] 西安電子科技大學.Eucalyptus架構案例[EB/OL].(2014-04-07)[2018-03-02].https://wenku.baidu.com/view/19af1793195f312b3169a5fc.html.
[5] Andrew Alexeev. Nginx Corp [EB/OL].[2018-03-02].http://www.aosabook.org/en/nginx.html.
[6] 張堯.基于Nginx高并發(fā)Web服務器的改進與實現(xiàn)[D].長春:吉林大學,2016.
[7] 高春雷.視頻直播系統(tǒng)設計與實現(xiàn)[J].科技風, 2016 (18):103.
[8] 文力. 基于Android和云平臺的幼教系統(tǒng)的設計與實現(xiàn)[D].武漢:華中師范大學,2016.
(收稿日期:2018-03-12)
作者簡介:
馬艾田(1988-),男,碩士研究生,工程師,主要研究方向:云計算、分步式系統(tǒng)、大數(shù)據(jù)、機器學習。
*基金項目:智慧中科院建設推進工程(一期)項目(XXH13504-04)