天天看點

建構Facebook Live直播流中的挑戰

facebook live直播項目啟動于兩年前的一次黑客馬拉松(hackathon),八個月後就匆匆上線。在近期的qcon倫敦大會上,facebook視訊架構主管sachin kulkarni做了演講并指出,如何處理同一直播流中數量變化無法預測的觀看者是facebook live的一個挑戰。在報告中,kulkarni還介紹了建構facebook live直播流時所面對的架構上和設計上的挑戰。

從較高層次上看facebook live架構,一旦一個觀看者連接配接到最近的“接入點”(pop,point of presence),就會啟動一個live直播流。pop連接配接會被依次送出給資料中心,在資料中心中完成直播流的編碼。之後,資料中心會将直播流發送給多個不同的pop和回放用戶端。據kulkarni介紹,pop負責視訊的緩存、終止觀看直播的客戶連接配接,并通過facebook自建網絡将直播流傳遞給資料中心。自建網絡傳輸更為可靠,并降低了往返時間。

針對在擴充性上的挑戰,kulkarni指出,并發直播流的數量和全部直播流的總計觀看者數量都是可預測的,是以并不存在多少挑戰性問題。真正的問題在于,單一直播流上的觀看者數量不定,從寥寥數人到門庭若市。因為觀看者是不可預測的,也就無法對其做出規劃。為解決該問題,facebook采用了緩存和直播流配置設定這兩種方法。

kulkarni指出了相比于正常視訊而言,live直播流中存在的其它一些挑戰:

因為直播内容是實時建立的,是以不可能預先建立緩存,任何形式的預緩存都是不可行的。 對直播事件做預先規劃并擴充資源,這一做法是存在問題的。 難以預測由全球熱點事件所導緻的并發流和觀看者的激增問題。

網絡問題是直播流可靠性的主要挑戰。為解決這些問題,kulkarni提出了三個建議:

通過使用自适應碼率進行調整,降低視訊品質以适應較低的帶寬,雖然這項技術常用于回放端,但他們也正在将其用于采集端了。 使用用戶端的臨時緩存處理暫時性連接配接丢失。 最壞的情況是帶寬不夠,這時需要将廣播和回放轉換成隻提供音頻。facebook live認為,能聽到要比能看到更重要。

kulkarni還給出了一些從項目中得到的經驗教訓:

不積跬步,無以至千裡。任何大型服務都是從細微之處開始的。動手去編寫代碼遠勝于無休止地紙上談兵。 可靠性和可擴充性是設計中必須要考慮的問題。無論運作故障是否有規劃,都應做出相應的設計。 為傳遞大型項目,需要做出妥協。 考慮未來的特性,應保持架構的靈活性,使得團隊的演進可以超越架構的變更。

本文轉自d1net(轉載)

繼續閱讀