樂(lè)視云計(jì)算有限公司(以下簡(jiǎn)稱樂(lè)視云)是新樂(lè)視上市體系中核心業(yè)務(wù)版塊之一,負(fù)責(zé)新樂(lè)視體系所有基礎(chǔ)設(shè)施服務(wù)和云計(jì)算服務(wù)。樂(lè)視云圍繞視頻云和物聯(lián)云兩大方向開(kāi)展業(yè)務(wù),致力成為領(lǐng)先的家庭互聯(lián)智能娛樂(lè)云技術(shù)提供者,以物聯(lián)云為核心創(chuàng)造更智能的家居社區(qū)解決方案。
樂(lè)視云在視頻行業(yè)有強(qiáng)大的技術(shù)儲(chǔ)備,在視頻領(lǐng)域中的點(diǎn)播、直播、分發(fā)、媒體技術(shù)、視頻內(nèi)容理解等方面處于行業(yè)領(lǐng)先地位;而物聯(lián)云將圍繞家居安全、智能互聯(lián)、環(huán)境健康等方面提供全部解決方案。
2015年到2017年的2年間,樂(lè)視云曾成功服務(wù)于除新樂(lè)視外上萬(wàn)家企業(yè)客戶,如熊貓TV、戰(zhàn)旗TV、快手、人人網(wǎng)、鳳凰網(wǎng)、百度視頻、OPPO等大型企業(yè);在廣電領(lǐng)域,樂(lè)視云先后與中國(guó)藍(lán)TV、天府TV、四川網(wǎng)絡(luò)廣播電視臺(tái)等廣電企業(yè)建立開(kāi)放型戰(zhàn)略合作,促進(jìn)新型全媒體產(chǎn)業(yè)融合。2016年曾融資10億人民幣,是樂(lè)視生態(tài)第四個(gè)獨(dú)角獸。
項(xiàng)目背景
在觀看視頻直播中,難免會(huì)發(fā)生因?yàn)楦鞣N打斷而錯(cuò)過(guò)一些精彩片刻的情況,這個(gè)時(shí)候,如果我們能
快速穿越回去,會(huì)是怎樣一種體驗(yàn)?樂(lè)視云“月光寶盒”可以完美彌補(bǔ)遺憾,讓精彩不再錯(cuò)過(guò)。
項(xiàng)目挑戰(zhàn)
“月光寶盒”是樂(lè)視云直播 PaaS 平臺(tái)的一個(gè)重要服務(wù),可以完美解決直播過(guò)程中任意時(shí)間段的時(shí)移回看,也可以在直播結(jié)束后,提供瞬時(shí)秒回功能,快速將直播信號(hào)轉(zhuǎn)為點(diǎn)播信號(hào)進(jìn)行分發(fā),大幅提升了直播觀看體驗(yàn),也同時(shí)給直播運(yùn)營(yíng)提供了更多的可能。月光寶盒歷經(jīng)三次產(chǎn)研迭代,見(jiàn)證了直播流由萬(wàn)增至百萬(wàn)的快速增長(zhǎng),一路上我們遇到了哪些挑戰(zhàn)?直播流的分配策略是如何進(jìn)化的?源站的切片、索引存儲(chǔ)需要做出哪些升級(jí)?以及在持續(xù)迭代過(guò)程中如何確保平滑升級(jí)等等問(wèn)題,接下來(lái)我們將從“月光寶盒”三次大的版本迭代中做出解答。
月光寶盒 V1.0
直播 PaaS 平臺(tái)由原支撐樂(lè)視集團(tuán)業(yè)務(wù)的直播后臺(tái)技術(shù)部蛻變而成,已經(jīng)持續(xù)服務(wù)于樂(lè)視網(wǎng)、樂(lè)視電視、機(jī)頂盒、樂(lè)視體育、樂(lè)視音樂(lè)等超過(guò) 5 年時(shí)間, 早期的直播流量在萬(wàn)級(jí)別(注:直播流 ID 個(gè)數(shù),可以理解為一個(gè)直播流就是一路信號(hào)),直播信號(hào)通常以 7*24 小時(shí)長(zhǎng)直播為主,發(fā)布會(huì)、演唱會(huì)等短直播為輔(注:這類短直播無(wú)直播內(nèi)容時(shí),通常會(huì)配置一個(gè)指定的備片來(lái)持續(xù)代替直播信號(hào)源,以提升斷流時(shí)用戶播放體驗(yàn)),因此在 V1.0 架構(gòu)中,這階段的直播生產(chǎn)調(diào)度分配算法采用簡(jiǎn)單的配置策略,將直播流與設(shè)備組進(jìn)行關(guān)聯(lián)綁定,直播流對(duì)應(yīng)的切片與索引采用簡(jiǎn)單的本地存儲(chǔ)。直播、時(shí)移回看、打點(diǎn)錄制均在該組設(shè)備中并行提供服務(wù)。
V1.0 架構(gòu)圖
注:
綠色表示直播流長(zhǎng)期處于使用狀態(tài)。
紫色表示直播信號(hào)暫時(shí)中斷,但源站配置了播放備片功能,會(huì)播放備片信號(hào),提高直播斷流體驗(yàn)。
附:左圖為正常直播信號(hào),右圖為直播信號(hào)中斷時(shí)播放的備片。
隨著直播 PaaS 平臺(tái)的開(kāi)放,海量直播流的接入,而商業(yè)直播的需求主要以秀場(chǎng)、發(fā)布會(huì)等間隔較短的直播為主,此時(shí)如果仍按照原有均衡分配直播流策略,每個(gè)直播都分配單獨(dú)服務(wù)器,會(huì)導(dǎo)致服務(wù)器數(shù)量成倍增加,資源成本陡增,為解決這個(gè)問(wèn)題,月光寶盒架構(gòu)也升級(jí)至 V1.1。
月光寶盒 V1.1
在 V1.1 版本中,直播流均按需生產(chǎn),為了確保客戶所接入的流量安全,調(diào)度會(huì)同時(shí)分配給主備兩臺(tái)設(shè)備來(lái)生產(chǎn)該流,在主節(jié)點(diǎn)故障時(shí)自動(dòng)執(zhí)行主備切換,確保對(duì)用戶播放無(wú)感知。
隨著業(yè)務(wù)的快速增長(zhǎng),日活直播快速上升,平臺(tái)對(duì)直播源站集群進(jìn)行了擴(kuò)容,但由于直播流分配策略會(huì)優(yōu)先與時(shí)移數(shù)據(jù)綁定(注:該策略為確保全程回看數(shù)據(jù)在同臺(tái)設(shè)備連續(xù)),因此在實(shí)際運(yùn)行的過(guò)程中可能會(huì)出現(xiàn)比較嚴(yán)重的偏壓?jiǎn)栴},會(huì)導(dǎo)致比較明顯的熱點(diǎn)問(wèn)題,需要通過(guò)集群上報(bào)流監(jiān)控狀態(tài)判斷是否需要對(duì)備流進(jìn)行遷移,以實(shí)現(xiàn)集群的再均衡。
V1.1架構(gòu)圖
注:
虛線箭頭表示發(fā)生偏壓時(shí),部分直播流發(fā)生遷移。
綠色表示正在播放的直播流。
紅色表示直播流即將被遷移。
黃色表示直播流被遷移后。
通過(guò)流遷移的方式我們緩解了熱點(diǎn)問(wèn)題,但這種方式有一定的滯后性,我們需要新的架構(gòu)來(lái)解決這個(gè)問(wèn)題,在介紹新架構(gòu)方案前,首先快速介紹下直播業(yè)務(wù)里面用到一些協(xié)議和文件,HLS(Http Live Streaming)是由 Apple 公司定義的用于實(shí)時(shí)流傳輸?shù)膮f(xié)議,HLS 基于 HTTP 協(xié)議實(shí)現(xiàn),傳輸內(nèi)容包括兩部分,一是 M3U8 描述文件,二是 TS 媒體文件。M3U8 文件是用文本方式對(duì)媒體文件進(jìn)行描述,由一系列標(biāo)簽組成。
隨著業(yè)務(wù)持續(xù)增長(zhǎng),整個(gè)直播集群的存儲(chǔ)壓力會(huì)變得比較突出,因此需要盡快消除 IO 瓶頸。在此背景下,我們首先將 TS 切片遷移到了 LeS3(樂(lè)視云對(duì)象存儲(chǔ)系統(tǒng)), 但對(duì)于視頻索引的存儲(chǔ)仍然按照主備方式管理,所以下一步重點(diǎn)就變成了尋找存儲(chǔ) M3U8 的索引集群存儲(chǔ)解決方案,由于不同直播流對(duì)切片設(shè)置大小不一(通常設(shè)置在 2~10s),譬如北京其中一個(gè)集群最大峰值寫入約在 3w 左右,業(yè)務(wù)屬于寫多讀少,對(duì)于傳統(tǒng)主從 RDS 來(lái)說(shuō),單機(jī)無(wú)法承受,需要做分庫(kù)分表,而分庫(kù)分表有很多弊端,比如對(duì)業(yè)務(wù)侵入太多、應(yīng)用不友好,普遍的采用 Proxy 方案不但對(duì)技術(shù)有要求,而且還有非常多的局限性,視頻直播需要靈活的擴(kuò)展性,而分庫(kù)分表對(duì)再擴(kuò)容的成本非常高,會(huì)為業(yè)務(wù)埋下隱患。這期間我們接觸到了 TiDB,其支持多活、無(wú)單點(diǎn)、支持橫向擴(kuò)容特性且兼容 MySQL 等特性與我們的業(yè)務(wù)需求非常吻合,加之 TiDB 安裝部署、監(jiān)控等細(xì)節(jié)做得非常到位,我們決定測(cè)試看看效果。
月光寶盒 V1.2
經(jīng)過(guò)一周左右對(duì)TiDB的常用場(chǎng)景測(cè)試、壓測(cè),測(cè)試結(jié)果比較符合預(yù)期,從存儲(chǔ)容量、QPS、響應(yīng)時(shí)間來(lái)看,均可支持我們“快速穿越執(zhí)行時(shí)移回看”的需求。測(cè)試期間也跟官方的同學(xué)進(jìn)行技術(shù)交流,確定了后續(xù)生產(chǎn)環(huán)境中如:部署架構(gòu)、設(shè)備選型、表結(jié)構(gòu)及索引優(yōu)化。在生產(chǎn)環(huán)境的 TiDB 生產(chǎn)集群上線后,我們將線上原有直播流的 HLS 回看的索引在原 V1.1 架構(gòu)進(jìn)行本地存儲(chǔ)外,同步復(fù)制至 TiDB 中,以便于真實(shí)生產(chǎn)環(huán)境中來(lái)驗(yàn)證TiDB的穩(wěn)定性。觀察一月多,運(yùn)行平穩(wěn),期間我們做部分故障演練,如將PD、TiKV、TiDB中某一臺(tái)重啟,并未出現(xiàn)服務(wù)不可用或丟數(shù)據(jù)的情況!接下來(lái)對(duì)北京一個(gè)直播集群月光寶盒服務(wù)進(jìn)行了試點(diǎn)改造,采用灰度切流方式逐步將直播流的時(shí)移、回看、秒回請(qǐng)求切至TiDB ,運(yùn)行穩(wěn)定。目前全國(guó)各地直播集群的月光寶盒服務(wù)跑在TiDB服務(wù)之上。
v1.2 架構(gòu)圖
附一張 TiDB 在月光寶盒 V1.2 中的架構(gòu)圖:
總結(jié)回顧
前面已將“月光寶盒“歷經(jīng)3個(gè)階段詳述,最后我們?cè)儆靡粡埍碜鱿潞?jiǎn)單的回顧。
上線效果數(shù)據(jù)說(shuō)明
通過(guò)將 M3U8 數(shù)據(jù)統(tǒng)一存儲(chǔ)到一套 TiDB 集群,大幅度簡(jiǎn)化直播源站的結(jié)構(gòu),從源頭解決負(fù)載偏壓、擴(kuò)展的問(wèn)題,同時(shí) TiDB 很好的解決了這類寫多讀少的業(yè)務(wù)場(chǎng)景,具體體現(xiàn)如下:
● 單機(jī) HLS 設(shè)備生產(chǎn)性能提升 200%。
● 簡(jiǎn)化直播流分配調(diào)度策略,消除集群內(nèi)偏壓?jiǎn)栴}。
● 簡(jiǎn)化直播源站結(jié)構(gòu),消除上下游關(guān)聯(lián)系統(tǒng)耦合。
● TiDB 天然的高可用提升了系統(tǒng)的可用性。
● 依賴 TiDB 的負(fù)載均衡,優(yōu)雅的解決了直播流量彈性擴(kuò)展的問(wèn)題。
現(xiàn)狀及計(jì)劃
目前月光寶盒 v1.2 已持續(xù)穩(wěn)定的服務(wù)于標(biāo)準(zhǔn)直播、移動(dòng)直播、直播CDN等三大業(yè)務(wù)線,其中北京一個(gè)核心直播集群的 TiDB 峰值 寫入 QPS 達(dá)到 2.5W 左右,經(jīng)過(guò) CDN 及 HLS_Consumer 的雙重緩存后讀請(qǐng)求峰值約在 5k 左右,下一步我們會(huì)將直播內(nèi)部的一套數(shù)據(jù)分析系統(tǒng)也遷移到 TiDB中。
大家對(duì)“月光寶盒”研發(fā)技術(shù)感興趣,也可以關(guān)注樂(lè)視云公眾賬號(hào),感興趣同學(xué)達(dá)到一定數(shù)量后,我們會(huì)舉辦一些線下活動(dòng)進(jìn)行技術(shù)分享。
單個(gè)直播集群對(duì)應(yīng)的 TiDB 集群總體配置如下:
作者簡(jiǎn)介:劉斌,樂(lè)視云工程師,主要參與樂(lè)視直輪播、商業(yè)直播 PaaS 架構(gòu)設(shè)計(jì)迭代。
招聘
視頻云基礎(chǔ)平臺(tái)正在招聘“流媒體研發(fā)/圖像視頻算法/深度學(xué)習(xí)/JAVA開(kāi)發(fā)工程師” 感興趣的同學(xué)可將簡(jiǎn)歷發(fā)送至“wangxiaoyu1@le.com”