虎牙數萬主播同時線上直播的祕密,CDN推流日誌上行實時監控

又拍雲發表於2018-07-04
6 月 10 日,又拍雲 Open Talk | 2018 音視訊技術沙龍·深圳站 順利落幕,來自虎牙的直播運維研發架構師張波在沙龍上做了《基於CDN推流日誌的主播上行實時監控及其自動化解密》的分享。虎牙直播是中國領先的互動直播平臺,作為“遊戲直播第一股”,是音視訊技術的典型應用企業。

張波目前主要負責虎牙直播運維體系的建設,針對 Web 和後臺類程式的釋出、監控、運維自動化相關的運維繫統進行設計和開發。本次分享中,張波結合在一線工作中的實踐,介紹虎牙直播針對主播推流在 CDN 環境下的優化技巧,以及實踐過程中碰到的各種坑。

以下是分享內容:

 

虎牙直播作為遊戲直播平臺,擁有數百個產品線,同時線上主播數高達數萬,因此虎牙接入了多家 CDN 廠商。

體量這麼大的主播上行量通過 CDN 端推流日誌如何做到自動監控,異常及時發現,業務如何通過系統準確定位?

使用者側、網路側、CDN 運營商側等引起的故障,如何做到故障分鐘定位?

先與使用者發現定位系統問題瓶頸,如何用資料指引 CDN 提升服務質量呢?

這次分享,我們就來聊聊如何解決這些問題。

 

首先是主播監控手段,最直接、最低延時的監控手段是觀察使用者彈幕喊卡。

當彈幕開始喊卡時,開發會上系統檢視端上上報的監控資料來定位問題。但是僅僅依靠服務端資料,是很難確定問題是發生在哪裡的,線路、客戶端、CDN、IDC 都有可能出現問題。

直播出現問題的原因有很多,我們要如何準確定位業務問題呢?

一般情況下,當虎牙主播直播出現問題後,開發會讓運維提供 CDN 伺服器端資料,來定位問題,再由運維聯絡 CDN 運營商排查問題,最後由 CDN 廠商解決問題。

除此之外,虎牙還有其他的監控方案:

  1. 第三方撥測監控;
  2. 端上報資料監控(主播端上報,使用者端上報);
  3. 彈幕喊卡監控
  4. 服務端資料監控;
  5. 機房網路監控。

 

CDN 側健康管理

面向使用者體驗端到端的健康管理,範圍比較大。本次分享主要講一下 CDN 側的健康管理,比如判斷 CDN 是否存在問題?

 

上圖系統的核心功能主要有:

  1. 建立應用服務監控檢視;
  2. 關注應用效能;
  3. 多段、多層資料關聯分析;
  4. 瞭解使用者感知;
  5. 瞭解應用最終交付狀態;
  6. 瞭解應用對業務的影響;
  7. 端到端覆蓋應用路徑;
  8. 追蹤應用服務質量;
  9. 快速診斷和定位故障。

△ 虎牙部分監測系統2

圖中也顯示了各個線路的質量情況,虎牙每 20 秒檢測一個節點情況,而 CDN 的線路圖,監控時效性是一分鐘延遲,因此全網 CDN 上行質量出現問題的話,會在一分鐘內發出告警。同時全網的出現卡頓的主播在卡頓監控中可以試試看到,並實現定位上行卡頓原因,迅速排出是否是廠商線路問題或運營商線路問題。

 

CDN 端到端的應用效能管理

 

上圖是監測系統的核心功能——端到端的應用效能管理,圖中描述了主播上行鏈路,上行方式分為 CDN 上行和虎牙上行,CDN 上行是指通過 CDN 上行服務進行上行傳輸。

當 CDN 端接收到上行視訊後,會進行轉碼和轉推,轉推就是指將虎牙主播的上行流視訊轉推給其他廠商,讓使用者在各個廠商和線路上觀看到直播。

所以直播上行可能會出現的故障,要麼是主播端裝置問題,要麼是主播端到上行節點網路問題,或者是 CDN 上行伺服器節點自身問題,再或者是上行視訊轉推給其他 CDN 廠商轉推問題。

 

效能資料要覆蓋哪些專案

 

上面這個表格是虎牙實時監控平臺的部分核心功能以及效能指標的覆蓋項。

主播端主要根據這些引數進行監控,比如 Block 阻塞次數、CPU、解碼 CPU、模板 CPU、記憶體以及斷開原因等監控指標。

IDC 層與 CDN 層監控指標相對較少,只有卡頓率和效能指數,這次分享也主要講解效能指數。

在使用者端虎牙設定了感官卡比監控指標,感官卡比就是使用者真實感受卡頓的比例,除了感官卡比之外,還有解碼方式、主動丟幀等監控項。

 

實時監控需要注意的技術點

在實時監控這方面,我們使用的相關技術點,主要有:

  1. 流計算:sprak
  2. 實時日誌儲存:內部日誌索引服務
  3. 資料儲存:Hbase、Opentsdb

主播上行部分資料處理量並不大,即使是虎牙這個體量的直播平臺,原始日誌一秒一條日誌5秒合併輸出一條。

aac:0  bigint 接收或者傳送aac的次數
abytes:4017#5733#7186#5642#4179  string  接收或者傳送的音訊位元組數
adrop:0#0#0#0#0  string 音訊傳送丟幀數
afcnt:30#43#53#42#31 string 音訊幀數
afts:468664897#468665895#468667126#468668101#468668821 string 音訊時間戳
agap:0#0#0#0#0 string 音訊幀最大接收間隔(ms)
app:hunantv  string  rtmp協議中的app
appbuf:0#0#0#0#0  string 應用層傳送佇列長蘇
avc:0  bigint 接收或者傳送的avc的次數
block:0  bigint 卡頓次數
bwin:0.0000  double 入頻寬
bwout:76382.0000  double 出頻寬
gop:180871  bigint 關鍵幀序號
mss:1460#1460#1460#1460#1460  string  mss大小
netqlen:96617#70188#57206#74576#106873  string tcp傳送大小
retrans:0#0#0#0#0 string 重傳包數
rtt:1#1#1#1#1 string  tcp層的rtt (ms)
rwd:0 string tcp的接收視窗大小.目前為空
sndbuf:0 string tcp的傳送大小
tcpbuf:715#2841#1808#19705#724 string tcp的buffer大小 位元組數
vbytes:64523#51103#64525#103969#68513 string 接收傳送的音訊位元組數
vdrop:0#0#0#0#0  string 視訊丟幀數
vfcnt:17#25#31#25#17 string 視訊幀率
vfts:468664864#468665864#468667104#468668104#468668784 string 視訊時間戳
vgap:0#0#0#0#0 string 視訊幀之間最大間隔 (ms)
vhost:xx.mgtv.com string  域名
vname:xx.mgtv.com_HNGGMPP360 string 流名

 

上面這個表格是 CDN 上行日誌,可以看到其中的描述項非常多,能夠直接反應主播上行質量的指標並不多。

我們要如何從日誌中挑選出需要的資料進行監控呢?

its 採集時間戳(毫秒)
uip 主播IP,點分十進位制
inip 節點IP,點分十進位制
inarea 節點省份
inisp 節點ISP資訊
streamhost 流域名,如:tx.direct.huya.com
streamname 流名稱
vfps 視訊幀率 (5秒一條資料,1秒一個值,每個值用#分隔)
vts 視訊時間戳(毫秒) (5秒一條資料,1秒一個值,每個值用#分隔)
afps 音訊幀率
ats 音訊時間戳(毫秒)
[{"afps":30,"ats":9689432,"inarea":"河北","inip":"124.239.xxx.xx","inisp":"電信","its":1521530182,"streamhost":"ws.xxx.huya.com","streamname":"/huya/xxx-xx-xx-xxx-xx-A-xxx-1","uip":"123.182.xx.xxx","vfps":30,"vts":9689399}]
its 採集時間戳(毫秒) uip 主播IP,

 

△ 虎牙統一上行標準日誌

上面表格是日誌監控解決方案,虎牙定義了用於監控的標準日誌。統一標準後的日誌對比之前的日誌減少很多內容。

重點提取了採集時間戳、主播 IP、節點 IP、節點省份、推流域名、視訊幀率、視訊時間戳、音訊時間戳、音訊幀率等監控項資料,有利於對資料進行分析。

 

如何設計統一上行質量度量方式

在度量上行質量方面,虎牙使用的是一個國際通用標準,Apdex 是使用者對應用效能滿意度的量化值。它提供了一個統一的測量和報告使用者體驗的方法,把終端使用者的體驗和應用效能作為一個完整的指標進行統一度量。

Apdex 會定義應用響應時間的最優門檻為 T,另外根據應用響應時間結合 T 定義了三種不同的效能表現:

  1. Satisfied(優質):應用響應時間低於或等於 T(T 由效能評估人員根據預期效能要求確定),比如 T 為 1.5s,則一個耗時 1s 的響應結果則可以認為是 satisfied 的;
  2. Tolerating(可容忍):應用響應時間大於 T,但同時小於或等於 4T。假設應用設定的 T 值為 1s,則 4 * 1 = 4 秒極為應用響應時間的容忍上限;
  3. Frustrated(劣質):應用響應時間大於 4T。

 

這個方案描述了服務質量如何度量,它將服務質量分為三部分:優質樣本

可容忍樣本、劣質樣本。

這樣操作就把複雜的操作變簡單,三級度量,每一級度量都會有對應的分值,優質樣本1分,可容忍樣本0.5分,劣質樣本0分,複雜問題通過計算公式簡單化。

再者,上行質量要怎麼去度量呢?

我們可以這樣來看,在幀率沒有出現明顯抖動時,使用者感覺不到卡頓,我們就沒有必要把這個上行定義為問題。

樣本:當前平均幀率與前兩秒抖動最大差值
優質樣品: 0% <= 評分 < 5%
可容忍樣品: 5% <= 評分 < 10%
劣質樣品: 10% <= 評分

虎牙通過測量當前平均幀率與前兩秒抖動最大差值,來度量優質樣本。

優質樣本要求評分在 0% 到 5%,可容忍樣品在 5% 到 10%,劣質樣本小於等於10%。

一般來說,如果主播視訊的平均上行幀率是 30 幀,5%是指抖動 1 秒產生的抖動幀是 1.5 幀。

1.5 抖動幀,大部分人感覺不到畫面抖動,但是達到 3 幀時,使用者就能感受到畫面的抖動。

通過實時/離線計算結合,提升資料準確性

虎牙的計算方式是實時和離線結合的,實時計算由於資料延遲,或者實時計算問題,導致資料不太精準。

如果要實時計算的資料作為排程或者廠商質量評判標準的話,就需要輔以離線計算,讓資料更準確,才能指導廠商優化節點以及排程服務優化線路。

 

主播上行質量實時監控系統應用的典型場景

主播上行實時監控的應用場景有四個方面:

1. CDN 入圍測試:制定入圍標準,上行接入質量達到,縮短測試周期

2. CDN 執行監控:實時獲取CDN端執行資料,對可能的主播執行風險進行及時預警,實現主播級的故障自愈和問題定位

3. 節點質量管理:實時評價CDN上行節點健康度,主動發現影響客戶體驗因素,遮蔽質量較差的節點和線路

4. 主播上行,運營分析:利用全方位的主播上行效能資料,出具主播質量和線路質量效能報告,從業務角度為主播上行質量運營提供分析資料。

 

檢視講師分享 PPT 和分享視訊,請進入下方傳送門:

基於CDN推流日誌的主播上行實時監控及其自動化解密

相關文章