1. 程式人生 > >視訊雲面向海量使用者的分散式視訊處理技術

視訊雲面向海量使用者的分散式視訊處理技術

視訊雲面向海量使用者的分散式視訊處理技術

 

系統介紹 
  網易視訊雲支援面向海量使用者的分散式視訊處理,包含錄製、轉碼、視訊合成、截圖等常用的視訊處理任務。一方面視訊雲承載了眾多網易內部視訊應用的後臺視訊處理,一方面也漸漸以公有云的身份走入大家視野。 
  視訊雲的視訊處理子系統需求模型如下所示: 
  圖片描述
  視訊雲上層服務根據業務模型,向視訊處理子系統發起視訊處理任務,處理子系統根據任務型別排程到合適的worker節點做處理。在任務產生事件時,處理子系統會將事件回撥通知給上層服務,如錄製切片事件、視訊轉碼完成事件。 
  在過去幾年,視訊云為網易內部視訊應用提供了穩定可靠的大規模音視訊處理服務,如青果、雲音樂、教育產品。近兩年,隨著公有云服務模式趨於成熟,網易視訊雲漸漸以公有云的身份被大家所瞭解,與私有云相比,公有云的視訊雲要面臨以下兩個挑戰: 
1.  海量使用者 
2.  資源超售 
  在內部服務時代,視訊雲需要服務的應用數量有限,排程系統和回撥系統壓力較小,而且可以為一些應用定製特殊功能。而在公有云服務中,面向海量企業使用者,排程系統承擔的壓力更重,在保障公平排程的基礎上,需要實現排程能力的水平擴充套件。 
  在為內部應用提供服務時,為了保障各個應用的服務質量,一般不做處理資源超售,但是在公有云中,由於使用者太多,資源閒置是一種常態,不超售會造成極度的資源浪費。因此,在保障公有云的服務質量前提下,最大限度的節約成本是視訊雲在公有云場景下需要攻克的重要課題之一。為了做好這一點,公有云提供了比以前更加細緻的任務統計,資源監控,便於公有云的容量規劃。 
  系統架構 
  視訊雲的視訊處理系統架構如下圖所示: 
  圖片描述


  sdk:介面層,上層服務通過SDK向視訊處理系統發起任務和事件回撥 
  scheduler:排程子系統,又分為線上排程器和離線排程器 
  worker:任務執行器,一般包含10-1000個slot,每個slot對應一個處理任務 
 notifier:事件回撥子系統,收集各個worker中的任務事件,並通知SDK 
  configserver:叢集管理,元資料同步,任務統計和資源監控等 
  dashboard:視覺化運維的WEB工具 
  以上模組和子系統的實現,滿足了視訊雲對使用者管理、任務排程、任務追蹤、事件回撥和檔案儲存等核心功能需求。在非功能性方面,視訊雲實現了排程子系統的高可用和水平擴充套件,worker宕機重試。configserver在架構中屬於單點,通過主從架構實現高可用。 
  核心技術 
  FlickRpc框架 
  FlickRpc是視訊雲團隊自主研發的一個通用rpc框架,是各個元件模組互相呼叫和通訊的基礎。FlickRpc採用了netty長連線和json通訊格式,使用google的gson庫實現json格式的序列化和反序列化,與grpc,avro一類的開源RPC框架相比,FlickRpc無需定義訊息格式,可像使用本地方法一樣呼叫RPC,並且 FlickRpc中不存在json反序列化與JAVA繼承的衝突,更加簡單易用;FlickRpc提供了同步呼叫和非同步呼叫兩種模式,可以通過靜態上下文獲取RPC遠端資訊;雖然FlickRpc是為視訊雲開發,但其本身是一個通用RPC框架,可以在任何系統中使用。 
  FlickRpc的使用極大簡化了視訊雲在通訊層的開發量,未來FlickRpc會獨立開源。 
  靈活的排程模式 
  視訊雲視訊處理系統有線上和離線排程器兩種不同調度子系統,線上排程器適用於錄製、截圖以及線上視訊合併等線上視訊處理。這種任務的特點是具有很強的時效性,需要實時排程。例如錄製任務,如果排程產生較大延遲,會導致錄製內容丟失。 
  離線排程器適用於各種型別的轉碼業務,特點是任務可以積壓,可以慢慢非同步消費。如點播系統的視訊轉碼,一個使用者可以一次性提交很多待轉碼視訊,只要在一個籠統的時間範圍內完成即可,無需所有任務實時排程。 
  離線排程器是視訊雲超售的基礎,因為只有允許一定的任務積壓,才能在保證服務可靠的前提下節約資源成本。 
  租約與高可用 
  configserver和其他元件通過租約的方式實現元資料同步和高可用,以離線排程器高可用為例,如下圖所示: 
  圖片描述

  排程器A和排程器B負責排程不同使用者的離線任務,A和B在啟動時會向configserver註冊,並獲取元資料和租約資訊,以及他們各自需要排程哪些使用者。A和B每隔一段時間(5s-60s)會向configserver續租,如果A在某個時間宕機,一段時間後configserver會發現A持續多個週期沒有續租,為了保障使用者排程的高可用,configserver需要將A負責的排程任務交由相鄰節點B繼續執行,為此configserver會更新B的租約,在下次B續租時可以更新到新的租約和元資料,並觸發reload。 
  通過租約機制,可以實現不同元件的元資料同步,排程器的水平擴充套件和主從模式等。 
  負載均衡 
  一個視訊處理叢集中,可以部署多個worker group,任務引數中可以指定在哪個worker group中執行,worker group的劃分使視訊雲可以在容量規劃中因地制宜,例如錄製任務需要大量的IO操作,因此錄製任務的worker group需要配備SSD和千兆網路,而錄製過程幾乎不會耗CPU資源,可以在CPU配備上節約成本,而轉碼任務反之。 
  在一個worker group內,任務排程在沒有超過worker slot上限的前提下,採用取模雜湊的方式滿足負載均衡,當worker排程到的任務數到達slot上限,會從排程器中剔除,直到新的slot空閒出來。