彭方翔 廣東南方新媒體股份有限公司
從2017年起,以抖音、快手作為領頭羊的短視頻社交類手機應用引領著網(wǎng)絡視頻行業(yè)的發(fā)展;進入2018年,在經(jīng)歷了20個版本迭代和半年近12倍的用戶增長之后,抖音的發(fā)展步入了一個新的階段,抖音實現(xiàn)了自增長[1];到了今年6月,抖音短視頻公布了今年上半年數(shù)據(jù)——日活超過1.5億,月活超過3億[2]。在網(wǎng)絡視頻業(yè)務快速發(fā)展的今天,在架構設計時就要充分考慮系統(tǒng)具有高模塊化、高可靠性和高可擴展性的能力。
非實時網(wǎng)絡視頻業(yè)務系統(tǒng)主要包括三個部分:流媒體服務系統(tǒng)、內(nèi)容分發(fā)網(wǎng)絡和客戶端軟件。流媒體服務系統(tǒng)收集原始音視頻數(shù)據(jù),對音視頻數(shù)據(jù)進行流化處理后輸出到內(nèi)容分發(fā)網(wǎng)絡,由內(nèi)容分發(fā)網(wǎng)絡完成對終端用戶的內(nèi)容分發(fā),讓用戶使用播放器觀看點播視頻。
1.常用的流媒體協(xié)議主要有基于HTTP 漸進下載的HLS流媒體協(xié)議和基于RTP實時流媒體的RTMP/RTSP協(xié)議。HLS是由蘋果公司開發(fā)的流媒體協(xié)議,與RTP不同,HLS不需要服務端來提供播放控制,目前在非實時網(wǎng)絡視頻業(yè)務中比較流行。
2.內(nèi)容分發(fā)網(wǎng)絡,也叫CDN,負責接收客戶端發(fā)送的請求,通過全局和本地負載均衡系統(tǒng)調度請求到最接近的網(wǎng)絡節(jié)點上,將封裝的流媒體分片文件連同索引文件一起發(fā)送給客戶端。目前互聯(lián)網(wǎng)CDN服務的技術成熟、適配簡單,主流技術架構是:自有流媒體服務系統(tǒng)+租用互聯(lián)網(wǎng)CDN服務。
3.客戶端軟件負責確定應該請求的具體媒體流,下載索引文件和流媒體分片文件,并在下載后通過拼接分片將流媒體重新展現(xiàn)給用戶。客戶端軟件通常是播放器或者帶有播放器插件的應用或瀏覽器。
流媒體服務系統(tǒng)作為支撐網(wǎng)絡視頻業(yè)務的核心系統(tǒng),其性能決定了網(wǎng)絡視頻業(yè)務服務質量。衡量流媒體服務系統(tǒng),最關鍵的指標是流輸出能力和支持并發(fā)請求的數(shù)量。下面我們以單臺HLS流媒體服務器為例,分析系統(tǒng)的工作流程。
1.媒體文件注入過程
(1)從硬盤中分段讀取流媒體文件,存儲到內(nèi)存中。
(2)CPU對內(nèi)存中的流媒體文件進行解碼、重新編碼、切片、封裝、存儲、索引等流化處理。
(3)處理完的播放列表數(shù)據(jù),放在內(nèi)存;處理完的切片數(shù)據(jù)經(jīng)過,從內(nèi)存寫入硬盤。
2.響應訪問請求過程
(1)網(wǎng)絡Web容器收到訪問請求解包后將播放列表和切片數(shù)據(jù)請求發(fā)到相應模塊進行索引定位。
(2)播放列表直接從內(nèi)存讀??;切片數(shù)據(jù)從硬盤讀取放入到內(nèi)存。
(3)在Web容器對內(nèi)存中的數(shù)據(jù)打包發(fā)送。
總結以上兩個過程,推流服務系統(tǒng)大量消耗的系統(tǒng)硬件資源主要是CPU、內(nèi)存、磁盤I/O和存儲容量。
分布式架構主要面對高并發(fā)、高性能和高可用的應用場景,通過系統(tǒng)拆分成不同的子系統(tǒng)模塊,具有以下優(yōu)點:(1)模塊間低耦合度,系統(tǒng)整體可靠性高;(2)各模塊利用率高、方便橫向擴展;(3)各模塊之間的邊界明確,有利于靈活部署和運維管理。
關于分布式系統(tǒng),不同的業(yè)務需求面對的應用場景不一樣,使用的架構設計也不一樣。因此,針對網(wǎng)絡視頻業(yè)務大并發(fā)量的應用場景,結合流媒體服務系統(tǒng)功能對CPU處理能力、內(nèi)存、磁盤I/O能力和磁盤容量的要求,選擇把系統(tǒng)分成三個服務節(jié)點:(1)負載均衡服務節(jié)點;(2)流媒體服務節(jié)點;(3)存儲節(jié)點。
平面4參數(shù)轉換屬于兩維坐標轉換,對于三維坐標,需將坐標通過高斯投影變換得到平面坐標再計算轉換參數(shù)[9]。
負載均衡節(jié)點主要解決大量用戶回源數(shù)據(jù)的請求分配到HLS服務節(jié)點的多臺服務器上。負載均衡分為四層和七層,四層負載均衡主要基于TCP協(xié)議,可以做任何基于TCP/IP協(xié)議的軟件的負載均衡;七層負載均衡,又叫反向代理,基于HTTP、RTMP協(xié)議實現(xiàn)web服務、圖片、視頻等靜態(tài)文件的訪問服務。從軟件層面實現(xiàn)負載均衡的主流工具 有Nginx(七 層)、Haproxy(四 層)和LVS(四層)等。
1. Nginx
Nginx作為一種高性能的Web和反向代理服務,Nginx以支持高并發(fā)連接、低資源消耗、部署運維簡單等優(yōu)點而聞名。對于請求視頻內(nèi)容這一類靜態(tài)服務,Nginx以多連接對應一個進程的異步非阻塞請求處理能夠支持更多的并發(fā)請求。Nginx還具有多種負載均衡算法實現(xiàn)不同的調度功能[3]。
2.虛擬路由冗余協(xié)議(VRRP)
負載均衡節(jié)點作為用戶訪問的第一節(jié)點,必須具備高可用性,這就需要在節(jié)點上部署多臺負載均衡服務器來集群。目前,較多使用VRRP來把幾臺路由設備聯(lián)合組成一臺虛擬的路由設備,保證當主機的下一跳設備出現(xiàn)故障時,可以及時再次選擇新路由器來接替業(yè)務,保持了內(nèi)部網(wǎng)絡和外部網(wǎng)絡通訊的連續(xù)性和可靠性。
因為有了負載均衡節(jié)點,HLS服務節(jié)點在響應請求過程變得簡單了許多,只需要由Nginx來分配訪問請求即可。HLS服務節(jié)點的大部分硬件資源可以用來承擔媒體文件注入的任務。
通常,HLS服務節(jié)點上游的媒資管理平臺通過接口方式以FTP注入點播媒資數(shù)據(jù)、以UDP注入直播媒資數(shù)據(jù)。根據(jù)機械磁盤小文件讀寫性能非常低,所以通常選擇把m3u8文件放入內(nèi)存,把TS文件放入磁盤。
流媒體服務系統(tǒng)中切片文件數(shù)據(jù)占了所有數(shù)據(jù)的95%以上。一套注入了10萬小時時長視頻的流媒體服務系統(tǒng),切片文件的數(shù)據(jù)量就有幾百T。因此采用由“緩存節(jié)點+共享式存儲節(jié)點”的兩級存儲架構,能夠提高推流服務系統(tǒng)的整體效率和穩(wěn)定性,便于節(jié)點擴容。
1.緩存節(jié)點
部署在負載均衡節(jié)點上的Nginx還有一個重要功能--緩存。Nginx能夠對客戶已經(jīng)訪問過的內(nèi)容在本地建立副本,這樣在一段時間內(nèi)(該時間長度可配置)再次訪問該數(shù)據(jù),就不用再次向HLS服務節(jié)點發(fā)出請求。同時,當后端服務器宕機時,Nginx服務器上的副本資源還能夠回應相關的用戶請求,在一定程度上提高了系統(tǒng)整體的魯棒性。
2.網(wǎng)絡附屬存儲(NAS)
NAS作為一種特殊的專用數(shù)據(jù)存儲服務器,包括可熱插拔存儲器件和內(nèi)嵌文件讀取系統(tǒng),能夠支持多種訪問協(xié)議,目前廣泛應用于各種信息系統(tǒng)中。通過把NAS掛載在HLS服務節(jié)點的服務器下,存儲所有注入媒資文件的切片文件,既滿足了大量數(shù)據(jù)的存儲要求,又具有良好的系統(tǒng)擴展能力。
本文從當前網(wǎng)絡視頻快速變化的業(yè)務場景出發(fā),提出“負載均衡節(jié)點+HLS服務節(jié)點+存儲節(jié)點”的架構以建設高模塊化、高可靠性和高可擴展性的流媒體服務系統(tǒng)。圍繞該架構的實現(xiàn),本文進行了解決方案的分析和選擇,討論了利用Ningx軟件同時實現(xiàn)把負載均衡節(jié)點和緩存節(jié)點、利用VRRP實現(xiàn)負載均衡主備、利用NAS提供大容量存儲等實現(xiàn)方法,提供了技術上的探索,具有重要意義。