壓測難,難於上青天,80%的直播應用都敗在了這裡
作者:Oliver,騰訊伺服器效能測試團隊產品經理。
商業轉載請聯絡騰訊WeTest獲得授權,非商業轉載請註明出處。
WeTest導讀
直播的火爆帶來了海量的使用者,也帶來了海量的伺服器併發。本文分析了目前直播行業存在的難點,從騰訊目前的新直播產品——NOW直播出發, 瞭解直播應用背後的那些事。
直播,突然成為了中國網際網路的一個最流行的詞彙。在《2016-2020年中國網路直播行業深度調研及投資前景預測報告》中的資料表示,2015年,全國線上直播平臺數量接近200家,其中網路直播的市場規模約為90億,網路直播平臺使用者數量已經達到2億,大型直播平臺每日高峰時段同時線上人數接近400萬,同時直播的房間數量超過3000個,更可怕的是,這一資料還在以極快的速度向上攀升。
直播平臺使用者數量2億是什麼概念?2016版的《微信資料化報告》中提到,目前微信使用者達到了6.97億人,也就是說,在你身邊同齡的3-4個朋友之中,很有可能有一個人是網路直播的使用者。
直播火沒火,看使用者就知道,但是直播有沒有前景,就要看科技巨頭們對它的態度了。
國外的Facebook推出的Facebook live給其使用者帶來的全新的體驗,不僅增加了使用者粘性,還給Facebook帶來了新的收入來源。而YouTube live與電視點播相結合的經營模式也給使用者帶來了新的視訊體驗。
國內方面,鬥魚、虎牙、熊貓、龍珠、奇秀、花椒等專業的直播平臺如雨後春筍般出現。阿里、百度、騰訊等巨頭也不甘人後,紛紛推出了自己的直播平臺。而直播所涉及的行業領域也從電競、社交、電商等各個行業間開始廣泛出現。
直播下的伺服器壓力
如此大的使用者體量下,直播類的應用對於伺服器的要求要高過一般的應用,我們來看看直播類的應用對伺服器有哪些更多的挑戰?
1、更大的資料量
視訊資料和文字資料完全是兩個量級的概念,假設一個直播房間有5000人,視訊1s的資料60K,那麼就需要5000*60=300000KB=292.97MB,基本已經達到了2-3三個手遊的大小了,而這只是一個房間產生的流量。今年4月劉濤入駐直播領域,創造了同時線上人數17萬,總收看人數71萬的資料,如果按照這個數量,伺服器就會產生9.73Gbps的頻寬,而當前某著名網路直播APP日活躍使用者超過了800W,伺服器將承受458Gbps的頻寬壓力。
2、更高的併發量
不同於普通應用和遊戲,直播類應用的使用時間段非常的集中,一般來說,社交類的直播app時間集中在晚飯後時間至睡前20點~23點,遊戲類App活躍時間集中在下班後18~20點間,秀場類App集中在13點和18(午休及下班時間),因此在這短短几小時之間,會湧入大量的使用者,一次大V的直播通常就會造成百萬級的使用者登入,APP需要有詳盡的限流、分流和負載均衡策略,保證伺服器不會被沖垮。
(資料來源:大資料解析網路直播市場到底有多火,
http://mt.sohu.com/20160716/n459532686.shtml)
3、更真實的使用者登入場景
直播應用與普通應用相比,互動的功能異常多,除了直播視訊流的伺服器壓力之外,還要包括使用者訊息推送、聊天、禮物、支付以及統計系統帶來的資料互動壓力,伺服器進行需要識別不同的業務欄位,才能精確判定使用者的行為是否成功完成,從互動頻率的角度上來說,直播類的應用,與其說更像應用,不如說更像遊戲。
4、更低的延遲
直播需要一個很強的即時性,如果主播的行為和使用者的評論無法同步的時候,會給使用者非常不好的體驗,如果一個使用者發現其他使用者在歡呼鼓掌,但是螢幕中的主播什麼動靜都沒有的時候,這個直播應用基本可以不要再用了,因此直播類應用不僅需要面對更大的資料量和更高的併發,還要保證更低的延遲。通常可以要保證伺服器的處理資料速度要快,要有足夠強大的頻寬;另外則是通過P2P演算法保證資料分享的合理性,保證伺服器的資料和P2P的資料可以達到平衡。
直播前的伺服器準備
直播應用下的伺服器成本,與將要承受的流量情況息息相關,不同的直播應用,互動的頻度、深度不同,就會產生不同的頻寬壓力。我們一起來算一筆帳,為直播應用準備伺服器,大概需要多少錢?
首先,我們要買一個伺服器。買多大的伺服器呢?伺服器的頻寬要滿足直播應用的頻寬需求,在這裡,科普一下頻寬是怎麼看的:
頻寬通常使用的單位是bps(bits per second),8 bits通常等於1Byte,100Mbps在換算成我們熟悉的檔案大小的時候,要除以8,也就是在100Mbps的頻寬下,每秒鐘可以下載12.5MB的檔案,那麼一般來說,直播應用需要多少頻寬呢?見下圖:
直播應用一般使用的解析度是360p,720p以及1080p三種,為了看得清晰一些,一般人們都會選擇720p,那麼在720p的清晰度下,直播應用需要1024kbps的頻寬,也就是每秒傳遞的資料大小為1024/8=128KB。簡單來說,如果在APP中開啟直播,使用了720p的解析度,一個使用者每秒鐘需要傳輸128KB的資料(當然實際情況中直播應用還有訊息推送,送禮,支付等行為,直播畫面解析度、壓縮比等區別,實際會消耗更多的資料)。
那麼,直播類應用現在需要承載多少使用者呢?
以目前最紅火的幾大直播平臺為例,鬥魚 TV 的線上人數可以超過1000 萬,戰旗 TV 在線上人數約500 萬左右,龍珠線上人數約 400 萬左右,虎牙線上人數約100萬,直播平臺的頻寬成本通常是頻寬峰值月結的形式,如果當月最高同時線上人數是200W,也就是每秒要傳輸的資料量高達244GB,那麼理論上消耗的頻寬就是2T左右,一個月的開銷就在4000W人民幣左右。
對於直播應用來說,伺服器最難處理的環節就是視訊流量和使用者互動等高頻率高頻寬的場景,使用者的行為是難以預測的,經常會出現突發性的暴漲,一般在進行活動的時候,流量可能是平時的幾十倍。2016年7月11日,PAPI醬的一次直播帶來了超過2000W使用者的訪問,這對於大多數的直播應用來說,伺服器的成本都是難以承擔的。這也是為什麼越來越多的直播應用開始尋求雲伺服器的支援,目前的雲服務商有騰訊雲,阿里雲,百度雲,金山雲等,彼此之間在硬體上的型別差別越來越小。
因此直播應用在上線前需要對多樣化的使用者操作進行鍼對性的測試,註冊,聊天,禮物,支付等行為都需要進行不同介面的測試,NOW直播就是其中之一。
直播伺服器的測試
測試需求的產生
騰訊NOW直播是騰訊目前發展非常迅速的直播應用,獲得了通過QQ直接登入直播介面的入口,可見其受重視程度,而NOW直播在一場線上活動中,需要對活動的所有介面進行壓力測試,提前暴露問題並解決,確保活動的順利實施。為此,NOW直播與騰訊WeTest伺服器效能測試進行了合作,對應用的業務後臺進行了系統性的測試,對活動進行了一整套場景測試。(對於視訊流量、使用者互動等高頻率高頻寬的場景,也同樣可以使用WeTest伺服器效能測試的的高階模式進行,本文不做展開,盡請期待後續乾貨。)
測試前的思路梳理
一般來說,對於活動中的功能節點,測試過程中通常關注兩點:
1、 單介面壓測,提前暴露核心模組的問題
2、 多介面架構問題,場景壓測儘量模擬真實使用者行為,使得壓測結果更有說服力
對於這次活動,NOW直播的思路也同樣是通過簡單的HTTP單介面和複雜的多介面場景壓測,通過壓測工具給後臺和客戶端APP增加壓力源,幫助發現問題。
測試的執行
1、單介面壓測——步步為營,逐漸迭代
單介面壓測的原理很簡單,就是不斷的對某個功能介面不斷加壓,直到發現出現問題的那個極限就可以,在騰訊WeTest伺服器效能測試上,操作如下:
1)點選壓測產品首頁中的快捷入口:HTTP直壓。模式選擇簡單模式,名稱和描述可以自己填寫。(圖中示例起始人數50人,每隔60秒增加50人,加到200人為上限)
2)新建一個客戶端請求,介面壓測包括讀寫介面,讀介面基本是GET請求,寫介面基本是POST請求。GET請求使用url請求引數,POST請求使用x-www-form-urlencoded方式傳遞引數,在這裡NOW直播方法選擇GET,填寫想要測試的URL。
3)編輯一下測試模型,增加一個場景名,單介面測試只測試一個功能介面,因此模式選擇“單場景”,壓力百分比設定為100%。
通過這樣的壓測方式,不斷增加伺服器壓力,直到找到瓶頸位置,騰訊WeTest為NOW直播實現了2W/s的併發量,滿足了NOW直播的併發需求。
2、多介面壓測——真實模擬,定位問題
多介面壓測的主要邏輯,就是通過構建不同的功能介面,模擬使用者的真實行為,從而幫助開發者定位介面問題。
NOW直播的測試方式是通過GET請求呼叫一個功能介面,通過這個功能介面隨機產生不同行為邏輯的機器人,模擬真實的QQ使用者,然後通過POST請求執行具體的業務行為,從而發現功能之間會產生的邏輯問題。
NOW直播測試團隊讀介面基本是GET請求,寫介面基本是POST請求。GET請求使用url請求引數,POST請求使用x-www-form-urlencoded方式傳遞引數。
(在騰訊WeTest 伺服器效能測試上,我們可以進行如下操作:)
1)首先,通過GET請求,讀取一個使用者的“登陸態”,通過這個功能介面隨機產生不同行為邏輯的機器人,模擬真實的QQ使用者;然後通過POST請求依次執行具體的業務行為,從而發現功能之間產生的邏輯問題。
2)在測試場景中輸入場景名,NOW直播測試的是“登入-進入房間-點贊”這樣三個操作,然後“模式”選擇“上下文”,點選“壓測場景”,選擇呼叫不同的功能介面。
目前騰訊WeTest伺服器效能測試支援同時接入8個場景,更多的場景可以更真實的模擬使用者的行為。
總結
通過NOW直播與騰訊WeTest在伺服器效能測試方面的合作可以看出,目前的直播應用非常注重兩塊的內容:一個是單介面的承載能力,一個是多介面的架構情況,對於開發人員來說,前者的問題是好解決的,通過平行擴容的方式就可以做到優化,但是後者的問題則需要在多個功能介面之間不斷定位問題,不斷嘗試新的壓力測試,才能找到那個存在的隱患。
基於NOW直播的需求,騰訊WeTest也提升了可同時呼叫的場景介面,從原來的4個增加到了8個,之後也會不斷的增加;並且也不斷的增加可以實現的併發數,為使用者提供更大的併發壓力和更真實的行為場景,節省了更多的測試成本。
做好這些,才能做出更好的直播應用。
騰訊WeTest運用了沉澱十多年的內部實踐經驗總結,通過基於真實業務場景和使用者行為進行壓力測試,幫助遊戲開發者發現伺服器端的效能瓶頸,進行鍼對性的效能調優,降低伺服器採購和維護成本,提高使用者留存和轉化率。