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