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