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