<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    本文由網(wǎng)易云信技術團隊分享,原題“如何保障一場千萬級大型直播?”,有修訂和改動。

    1、引言

    本文以TFBOYS“日光旅行”七周年這場直播演唱會為案例,為你分享大型直播系統(tǒng)后端架構設計的方方面面,包括:基本架構、穩(wěn)定性保障、安全性障、監(jiān)控報警、應急預案等技術范疇。

    案例中的這次演唱會采用了在線實時互動及演唱會現(xiàn)場的多場景導播切換,提供了主機位和三個藝人專屬機位流,同時每個機位流實時轉(zhuǎn)碼四個清晰度檔位,用戶可以根據(jù)喜好選擇自己想看的內(nèi)容。這場演唱會最高同時在線人數(shù)達78.6萬,打破線上付費演唱會世界記錄。

    學習交流:

    - 移動端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動端IM

    - 開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK 

    本文同步發(fā)布于:http://www.52im.net/thread-3875-1-1.html

    2、本文作者

    費曼:網(wǎng)易智企服務端開發(fā)工程師。碩士畢業(yè)于華中科技大學電信系,2016年加入網(wǎng)易云信,熱衷于大規(guī)模分布式系統(tǒng)和音視頻相關技術,愛好文學、體育和電影。

    3、架構方面

    3.1 基本

     

    上圖是該次TFBOYS在線演唱會的直播媒體架構簡圖。

    可以看出一場大型活動直播涵蓋的技術方案點非常龐雜,本節(jié)接下來的內(nèi)容我們將以推拉流鏈路、全局智能調(diào)度、流量精準調(diào)度以及單元化部署,對這套直播方案做一個展開介紹。

    3.2 推拉流鏈路

     

    如上圖所示,直播技術架構,分為幾大部分:

    • 1)視頻直播中心(LMS——Live Manage Service):負責直播流的邏輯管理和操作控制,包括存儲和下發(fā)實時轉(zhuǎn)碼、加密等媒體處理的配置信息;
    • 2)實時互動直播服:由連麥互動和直播兩部分組成,主播和連麥者的音視頻數(shù)據(jù)在互動直播高性能服務器合成為一道流后推流到直播流媒體服務器;
    • 3)直播源站服務(LSS——Live Source Service):網(wǎng)易云信自建的直播流媒體服務器節(jié)點,結合全局智能調(diào)度系統(tǒng),提供第一公里的最佳鏈路選擇,同時融合支持接入多家CDN廠商;
    • 4)媒體處理服務(MPS——Media Processing Service):提供實時水印、實時轉(zhuǎn)碼、媒體數(shù)據(jù)加密等強大的流媒體處理能力;
    • 5)融合CDN與全局智能調(diào)度(GSLB——Golabal Server Load Balancing):提供敏捷智能的CDN調(diào)度策略和分配算法,結合全鏈路、端到端的流媒體控制,來達到最終端側優(yōu)良的用戶體驗;
    • 6)客戶端SDK:提供推流、拉流以及上下行的調(diào)度能力,便于用戶快速接入使用網(wǎng)易云信平臺一站式的音視頻解決方案。

    3.3 融合CDN與智能調(diào)度

    這是一個端到端的服務,通過平臺的SDK執(zhí)行一個類似HTTPDNS的調(diào)度,來做到真正根據(jù)用戶IP做就近的接入。

    針對國內(nèi)相對復雜的運營商網(wǎng)絡環(huán)境,在直播上行方面通過BGP網(wǎng)絡以及與相關運營商在網(wǎng)絡接入方面的合作,能夠更加精準地控制網(wǎng)絡鏈路的選擇。

    而對于下行,也提供了播放端的SDK接入,通過端到端的調(diào)度策略就近選擇合適的下行鏈路。

    調(diào)度的準確性以及最終效果,依賴及時準確的數(shù)據(jù)支撐。

    我們有一個全鏈路、立體的數(shù)據(jù)監(jiān)控體系,一方面利用CDN上的一些實時日志,另一方面結合自建節(jié)點、客戶端側上報收集鏈路上探測的數(shù)據(jù),然后整合做一個實時計算來支撐整個調(diào)度的策略。

    融合CDN方案,通過調(diào)度、監(jiān)控、高可用等技術和手段來解決CDN網(wǎng)絡方面的問題。但是對于技術人員來說,就和在使用一個傳統(tǒng)的CDN網(wǎng)絡一樣沒有大的差異,這些技術細節(jié)對技術人員透明無感知。

    3.4 流量精準調(diào)度

    大型演唱會直播活動,尤其是正式開播時的進場階段,突發(fā)流量峰值會非常高,這就需要實時精準的智能調(diào)度策略。

    融合CDN的智能調(diào)度包含兩大部分:CDN分配調(diào)度和節(jié)點調(diào)度。

    節(jié)點調(diào)度:比較常見的是DNS協(xié)議解析調(diào)度和IP調(diào)度(302/HTTPDNS)。前者由于DNS協(xié)議原因,調(diào)度生效時間較慢,而后者則可以做到請求級別的調(diào)度,也就是支持任意比例的負載均衡,更加及時精準。在我們的智能調(diào)度的場景里,正常情況下會遵循IP調(diào)度,在IP調(diào)度解析失敗時,客戶端上會啟動loacl DNS解析邏輯,兩者的結合確保了調(diào)度的精準和穩(wěn)定可靠。

    Don't put all your eggs in one basket.

    “永遠不要將雞蛋放在同一個籃子里”。

    從風險管控的角度來說:大型活動保障的CDN廠商資源,通常沒法通過一家CDN資源進行滿足。融合CDN方案則是將多家CDN廠商進行整合與流量分配調(diào)度。

    通常在一次大型直播中,多家CDN廠商提供的容量(區(qū)域帶寬、最高帶寬)、質(zhì)量會各不相同。我們則是通過動態(tài)調(diào)整調(diào)度比例,在確保不超過最大帶寬的前提下,精確化按比例分配流量,以及盡可能地確保體驗。

    我們設計了一套針對CDN廠商的打分算法:影響因子包含當前帶寬、保底帶寬、最大帶寬、帶寬預測、帶寬質(zhì)量。

    算法遵循以下原則:

    • 1)沒超保底的帶寬,比超過保底的帶寬,得分更高;
    • 2)沒超保底的時候,剩余保底和剩余總帶寬越大,得分更高;
    • 3)超過保底的時候,剩余總帶寬越大、質(zhì)量越好,得分更高。

    各CDN的分數(shù)之比決定了調(diào)度比例,CDN打分算法是在持續(xù)地迭代更新計算,最大化分配使用各家CDN的帶寬,然后再分配各家CDN廠商的保障之外的資源。同時優(yōu)先選擇質(zhì)量較好的廠家,避免單價CDN廠商超分配。

    3.5 單元化部署

    上面所說,在大型直播活動中,短時間大量涌入的用戶請求,對以全局智能調(diào)度服務為主的相關非媒體流鏈路應用,也提出了更高的并發(fā)處理挑戰(zhàn)。

    除了上行的推流鏈路我們做了主備兩個單元的部署,非媒體數(shù)據(jù)鏈路上的服務也采用了單元化的部署方案。

    在此部署方案下,可用性做到任意單元機房故障,不影響整體可用性,即異地多活。

    單元化部署遵循以下原則:

    • 1)單元化的依賴也必須單元化(核心業(yè)務);
    • 2)單元化粒度為應用,非api;
    • 3)單元化技術棧對應用盡量避免產(chǎn)生侵入性。

     

    如上圖所示:非單元化的業(yè)務部署在主機房,單元化的業(yè)務則部署在主機房和單元機房。

    4、穩(wěn)定性保障

    4.1 上行鏈路穩(wěn)定

    超大型直播方案最核心的訴求就是直播穩(wěn)定性,下面我們將以該次在線演唱會為案例,重點闡述一下直播的全鏈路穩(wěn)定性架構。

    上圖是我們直播的媒體流鏈路示意簡圖:整體方案可以承受任何單節(jié)點、單線路、單機房網(wǎng)絡出口的故障。

    如直播源站部分:采用了多線策略收流,包含機房專線和4G背包方案,一主一備兩個線路。同時每個單元的源站集群都有4層負載均衡,一臺機器宕機不會影響整體可用性。LMS、LSS、MPS都是跨機房部署,所有服務模塊都可配置專有資源池供使用,保證不會受其他租戶影響。

    整個推流鏈路:采用雙路熱流、互為主備,且部署上是互相獨立的兩個單元,能做到支持Rack級別的故障災備。雙路熱流實現(xiàn)了自動主備切換,端上無需專門添加應用層的線路切換邏輯。當任何一個鏈路出現(xiàn)問題的時候,觀眾的直播流不會受到影響,端上平均卡頓感知時間在1s以內(nèi)。

    除了推流鏈路的整體主備單元容災,每個單元的服務本身也會有容災手段。比如UPS接入,可以接受30min的供電故障,比如當實時互動流出現(xiàn)問題時,導播臺會推墊片流以保證鏈路數(shù)據(jù)不中斷。

    4.2 下行鏈路穩(wěn)定

    在訪次直播活動中,全局智能調(diào)度服務會承受較大的峰值壓力,在單元化部署的基礎上,我們經(jīng)過多輪壓測和性能調(diào)優(yōu),模型上可支撐千萬級用戶在半分鐘內(nèi)全部進入直播間。

    除了上述關于推流鏈路的高可用,下行鏈路也有相關的容災策略。當GSLB智能調(diào)度服務整體不可用,在客戶端SDK預埋了融合CDN的local DNS災備邏輯與比例配置,將云端的全局智能調(diào)度fail-over到客戶端的本地兜底調(diào)度,并保持大數(shù)據(jù)統(tǒng)計層面的各CDN廠商的流量分配均衡。

    同時:客戶端也會有播放體驗方面的容災策略,諸如清晰度降級、線路調(diào)整等。

    5、安全性保障

    除了直播全鏈路的穩(wěn)定之外,直播安全也很重要。

    該次直播活動中,為TFBOYS活動鏈路多環(huán)節(jié)都提供了安全保障機制(如防盜鏈鑒權、IP黑白名單、HTTPS等能力),以及地區(qū)、運營商等下行調(diào)度的動態(tài)限制,實現(xiàn)全鏈路安全保障。

    在此基礎上:此次活動采用了端到端的視頻流數(shù)據(jù)加密。

    直播場景的加密有幾點基本要求:壓縮比不變、實時性和低計算復雜度。

    除此之外:在融合多cdn的方案背景下,視頻流的加密必須考慮到CDN廠商的兼容性。

    比如須滿足以下要求:

    • 1)不破壞流媒體協(xié)議格式、視頻容器格式;
    • 2)metadata/video/audio tag的header部分不加密;
    • 3)對于avcSequenceHeader和aacSequenceHeader tag整體不加密。

    具體加密算法,可以采用一些流式加密算法,這里我們不再贅述。

     

    6、監(jiān)控與報警

    6.1 概述

    一場大型直播將會有大量的計算節(jié)點參與,除了媒體數(shù)據(jù)處理與分發(fā)的各個服務器節(jié)點,還有分布在國內(nèi)外的海量客戶端。

    我們對網(wǎng)絡鏈路、服務節(jié)點、設備端的健康與質(zhì)量感知,都離不開數(shù)據(jù)監(jiān)控系統(tǒng)。

    同時:我們在現(xiàn)有系統(tǒng)無法自動fail-over的故障場景下,需要人工預案介入,而后者的決策判斷,也強依賴于完善的全鏈路數(shù)據(jù)質(zhì)量監(jiān)控與報警系統(tǒng)。

    6.2 全鏈路監(jiān)控

    整個直播鏈路的監(jiān)控包含了:

    • 1)上行推流鏈路的流質(zhì)量;
    • 2)媒體流實時轉(zhuǎn)碼處理;
    • 3)端上播放質(zhì)量;
    • 4)智能調(diào)度系統(tǒng)的可用性;
    • 5)業(yè)務量水位等相關監(jiān)控數(shù)據(jù)。

    上行鏈路常見的QoS指標有:幀率、碼率、RTT等,其維度包含主備線路、出口運營商、CDN廠商節(jié)點等。

    端上的QoS指標則包含了:拉流成功率、首幀時長、卡頓率、httpdns緩存命中率,維度則覆蓋包含CDN廠商、國家、省份、運營商、直播流、清晰度檔位、客戶端等。

    此次直播中:內(nèi)容上支持了多種機位流以及多個清晰度的轉(zhuǎn)碼輸出流,同時通過多個CDN廠商進行分發(fā),我們把上行鏈路中節(jié)點的碼率、幀率,直觀地通過N個指標卡集中展示在單個大盤頁面上,并且通過增加預警值進行異常顯示和彈窗消息告警。活動作戰(zhàn)室現(xiàn)場,我們采用了多個大屏展示,非常直觀地展現(xiàn)當前主備雙推流鏈路的實時幀率、碼率等情況,為現(xiàn)場地指揮保障提供了強大的數(shù)據(jù)決策支撐。

    以下圖為例:藍色表示上行幀率,綠色表示正常的上行碼率,紅色表示碼率值過低,N/A表示當前沒有上行推流數(shù)據(jù)。

    而在下行播放鏈路中,比較常用的指標就是卡頓率。

    下面是我們對卡頓相關的描述:

    • 1)一次卡頓:播放器持續(xù)2s發(fā)生緩沖區(qū)空,即播放器2s沒有拉到流;
    • 2)一分鐘用戶卡頓:1分鐘窗口內(nèi),用戶只要卡頓一次,則該用戶計作卡頓用戶;
    • 3)一分鐘用戶卡頓率:1分鐘窗口內(nèi),卡頓用戶數(shù)/總的用戶數(shù);
    • 4)一分鐘用戶零卡頓率:1分鐘窗口內(nèi),(總的用戶數(shù) - 卡頓用戶數(shù))/總的用戶數(shù)。

    為什么會選擇用戶卡頓率這個指標,而不是使用整體的卡頓采樣點/總采樣數(shù)呢?

    是因為:我們更想看到有多少用戶沒有出現(xiàn)過卡頓現(xiàn)象,這更能直觀體現(xiàn)優(yōu)質(zhì)網(wǎng)絡的整體占比。通過對各省份用戶零卡頓率、用戶數(shù)排行,以及各省用戶卡頓率的觀察,我們可以非常直觀地找到卡頓嚴重的地區(qū),以便重點關注,進行資源調(diào)度優(yōu)化。

    7、應急預案

    任何一個系統(tǒng),無論你號稱它被設計得多么健壯,它仍然會有故障時間的存在。

    硬件故障、軟件bug、人為操作失誤等等,這些都無可避免地存在著。他們未必是一個必須多少時間內(nèi)將其徹底解決的問題,他們是我們必須認清并接受共存的一個事實。

    所以:預案管理是大型直播活動保障中不可缺少的一環(huán)。

    我們遵循以下的預案原則:

    • 1)預案信息明確:大盤自動監(jiān)控不具備二義性,確保預案信息來源正確,觸發(fā)執(zhí)行預案的條件明確且有數(shù)值化約束;
    • 2)預案操作簡潔:所有的預案操作都有有簡潔明確(開關型)的操作輸入;
    • 3)預案操作安全:所有預案要經(jīng)過充分預演,同時預演操作本身需要有明確的確認機制,以確保在正常情況下不會被誤觸發(fā);
    • 4)預案影響驗證:明確理清預案操作的影響,QA在預演階段需要對相關影響進行充分驗證。

    此次活動的前期籌備中,我們總計進行了3次直播全鏈路的擬真演練,以及2次聯(lián)合互動現(xiàn)場、導播臺現(xiàn)場的活動全流程級別的彩排,另外進行了大大小小總計數(shù)十次的各類風險預案演練。所有演練過程中發(fā)現(xiàn)的問題,都會進行專項解決。

    風險預案這塊,包含了各類資源故障、上下行鏈路質(zhì)量、地區(qū)性網(wǎng)絡故障、CDN異常流量水位等在內(nèi)的場景應對。其中資源故障包含了機器宕機、機架整體斷電、堆疊交換機宕機、機房外網(wǎng)出口不可用,我們均進行了風險預案演練覆蓋。

    下面列舉幾點直播解決方案中的部分預案機制:

    • 1)如果因為誤操作等導致非正常解密等,可在推流不中斷的情況下,動態(tài)中止流加密,客戶端無任何感知影響;
    • 2)某家cdn在某地區(qū)運營商出現(xiàn)大面積故障癱瘓,該地區(qū)相應運營商線路的QoS指標會大幅度下降并觸發(fā)報警,將故障cdn在該地區(qū)運營商進行黑名單處理,動態(tài)停止對其的調(diào)度,將流量調(diào)度至正常提供服務的cdn廠商;
    • 3)在兩路熱流均正常的情況下,但是正在分發(fā)的一路出現(xiàn)質(zhì)量問題,方案可支持手動觸發(fā)主備切換,讓監(jiān)控數(shù)據(jù)質(zhì)量更好的另一路流參與分發(fā),客戶端感知時間在1s以內(nèi);
    • 4)因為一些不可抗因素,某機房出現(xiàn)大面積故障整體不可用,觸發(fā)鏈路報警,此時我們會緊急將流切至另一機房,故障感知與恢復的時間在一分鐘內(nèi)。

    8、相關文章

    [1] 移動端實時音視頻直播技術詳解(一):開篇

    [2] 移動端實時音視頻直播技術詳解(二):采集

    [3] 移動端實時音視頻直播技術詳解(三):處理

    [4] 移動端實時音視頻直播技術詳解(四):編碼和封裝

    [5] 移動端實時音視頻直播技術詳解(五):推流和傳輸

    [6] 移動端實時音視頻直播技術詳解(六):延遲優(yōu)化

    [7] 淘寶直播技術干貨:高清、低延時的實時視頻直播技術解密

    [8] 愛奇藝技術分享:輕松詼諧,講解視頻編解碼技術的過去、現(xiàn)在和將來

    [9] 零基礎入門:實時音視頻技術基礎知識全面盤點

    [10] 實時音視頻面視必備:快速掌握11個視頻技術相關的基礎概念

    [11] 網(wǎng)易云信實時視頻直播在TCP數(shù)據(jù)傳輸層的一些優(yōu)化思路

    [12] 淺談實時音視頻直播中直接影響用戶體驗的幾項關鍵技術指標

    [13] 首次披露:快手是如何做到百萬觀眾同場看直播仍能秒開且不卡頓的?

    [14] 直播系統(tǒng)聊天技術(一):百萬在線的美拍直播彈幕系統(tǒng)的實時推送技術實踐之路

    [15] 直播系統(tǒng)聊天技術(二)阿里電商IM消息平臺,在群聊、直播場景下的技術實踐

    [16] 直播系統(tǒng)聊天技術(三):微信直播聊天室單房間1500萬在線的消息架構演進之路

    [17] 直播系統(tǒng)聊天技術(四):百度直播的海量用戶實時消息系統(tǒng)架構演進實踐

    [18] 直播系統(tǒng)聊天技術(五):微信小游戲直播在Android端的跨進程渲染推流實踐

    [19] 直播系統(tǒng)聊天技術(六):百萬人在線的直播間實時聊天消息分發(fā)技術實踐

    [20] 直播系統(tǒng)聊天技術(七):直播間海量聊天消息的架構設計難點實踐

    本文同步發(fā)布于:http://www.52im.net/thread-3875-1-1.html



    作者:Jack Jiang (點擊作者姓名進入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時通訊開發(fā)交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時是【原創(chuàng)Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處(也可前往 我的52im.net 找到我)。


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 国产在线观看免费不卡| 久久久久久A亚洲欧洲AV冫| 一级毛片在线播放免费| 亚洲国产中文在线二区三区免| 亚洲AV无码一区二区乱子伦| 日韩亚洲一区二区三区| 亚洲成人在线网站| 国产亚洲成人久久| 国产成人亚洲精品狼色在线| 亚洲日韩精品射精日| 免费在线观看你懂的| 无码国产精品一区二区免费| 亚洲免费二区三区| 国产99视频精品免费观看7| a级毛片在线免费| 嫩草成人永久免费观看| 99久久国产免费-99久久国产免费| 一级成人a毛片免费播放| 日本最新免费网站| 成人奭片免费观看| 国产伦精品一区二区三区免费迷| 亚洲成片观看四虎永久| 午夜视频在线观看免费完整版| 99久久人妻精品免费一区| 亚洲人成免费网站| 色视频色露露永久免费观看| 国产又黄又爽又刺激的免费网址| 亚洲国产香蕉人人爽成AV片久久 | 丝袜足液精子免费视频| 国产午夜亚洲精品不卡免下载| 久久国产亚洲精品| 亚洲av无码不卡久久| 欧洲亚洲国产精华液| 国产精品免费大片一区二区| 成年大片免费高清在线看黄| 中文字幕一区二区免费| 一色屋成人免费精品网站| 免费午夜爽爽爽WWW视频十八禁| 亚洲一区爱区精品无码| 亚洲伊人久久精品| 亚洲a无码综合a国产av中文|