視頻雲面向海量用戶的分佈式視頻處理技術

視頻雲面向海量用戶的分佈式視頻處理技術

 

系統介紹 
  網易視頻雲支持面向海量用戶的分佈式視頻處理,包含錄製、轉碼、視頻合成、截圖等常用的視頻處理任務。一方面視頻雲承載了衆多網易內部視頻應用的後臺視頻處理,一方面也漸漸以公有云的身份走入大家視野。 
  視頻雲的視頻處理子系統需求模型如下所示: 
  圖片描述
  視頻雲上層服務根據業務模型,向視頻處理子系統發起視頻處理任務,處理子系統根據任務類型調度到合適的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空閒出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章