作者介紹:Oliver,騰訊伺服器性能測試團隊産品經理。
直播的火爆帶來了海量的使用者,也帶來了海量的伺服器并發。本文分析了目前直播行業存在的難點,從騰訊目前的新直播産品——NOW直播出發, 了解直播應用背後的那些事。
直播,突然成為了中國網際網路的一個最流行的詞彙。在《2016-2020年中國網絡直播行業深度調研及投資前景預測報告》中的資料表示,2015年,全國線上直播平台數量接近200家,其中網絡直播的市場規模約為90億,網絡直播平台使用者數量已經達到2億,大型直播平台每日高峰時段同時線上人數接近400萬,同時直播的房間數量超過3000個,更可怕的是,這一資料還在以極快的速度向上攀升。
直播平台使用者數量2億是什麼概念?2016版的《微信資料化報告》中提到,目前微信使用者達到了6.97億人,也就是說,在你身邊同齡的3-4個朋友之中,很有可能有一個人是網絡直播的使用者。
直播火沒火,看使用者就知道,但是直播有沒有前景,就要看科技巨頭們對它的态度了。
國外的Facebook推出的Facebook live給其使用者帶來的全新的體驗,不僅增加了使用者粘性,還給Facebook帶來了新的收入來源。而YouTube live與電視點播相結合的經營模式也給使用者帶來了新的視訊體驗。
國内方面,鬥魚、虎牙、熊貓、龍珠、奇秀、花椒等專業的直播平台如雨後春筍般出現。阿裡、百度、騰訊等巨頭也不甘人後,紛紛推出了自己的直播平台。而直播所涉及的行業領域也從電競、社交、電商等各個行業間開始廣泛出現。
如此大的使用者體量下,直播類的應用對于伺服器的要求要高過一般的應用,我們來看看直播類的應用對伺服器有哪些更多的挑戰?
視訊資料和文本資料完全是兩個量級的概念,假設一個直播房間有5000人,視訊1s的資料60K,那麼就需要<code>5000*60=300000KB=292.97MB</code>,基本已經達到了2-3三個手遊的大小了,而這隻是一個房間産生的流量。今年4月劉濤入駐直播領域,創造了同時線上人數17萬,總收看人數71萬的資料,如果按照這個數量,伺服器就會産生9.73Gbps的帶寬,而目前某著名網絡直播APP日活躍使用者超過了800W,伺服器将承受458Gbps的帶寬壓力。

不同于普通應用和遊戲,直播類應用的使用時間段非常的集中,一般來說,社交類的直播app時間集中在晚飯後時間至睡前20點~23點,遊戲類App活躍時間集中在下班後18~20點間,秀場類App集中在13點和18(午休及下班時間),是以在這短短幾小時之間,會湧入大量的使用者,一次大V的直播通常就會造成百萬級的使用者登入,APP需要有詳盡的限流、分流和負載均衡政策,保證伺服器不會被沖垮。
(資料來源:大資料解析網絡直播市場到底有多火)
直播應用與普通應用相比,互動的功能異常多,除了直播視訊流的伺服器壓力之外,還要包括使用者消息推送、聊天、禮物、支付以及統計系統帶來的資料互動壓力,伺服器進行需要識别不同的業務字段,才能精确判定使用者的行為是否成功完成,從互動頻率的角度上來說,直播類的應用,與其說更像應用,不如說更像遊戲。
直播需要一個很強的即時性,如果主播的行為和使用者的評論無法同步的時候,會給使用者非常不好的體驗,如果一個使用者發現其他使用者在歡呼鼓掌,但是螢幕中的主播什麼動靜都沒有的時候,這個直播應用基本可以不要再用了,是以直播類應用不僅需要面對更大的資料量和更高的并發,還要保證更低的延遲。通常可以要保證伺服器的處理資料速度要快,要有足夠強大的帶寬;另外則是通過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伺服器性能測試的的進階模式進行,本文不做展開,盡請期待後續幹貨。)
一般來說,對于活動中的功能節點,測試過程中通常關注兩點:
單接口壓測,提前暴露核心子產品的問題
多接口架構問題,場景壓測盡量模拟真實使用者行為,使得壓測結果更有說服力
對于這次活動,NOW直播的思路也同樣是通過簡單的HTTP單接口和複雜的多接口場景壓測,通過壓測工具給背景和用戶端APP增加壓力源,幫助發現問題。
單接口壓測——步步為營,逐漸疊代 單接口壓測的原理很簡單,就是不斷的對某個功能接口不斷加壓,直到發現出現問題的那個極限就可以,在騰訊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直播的并發需求。
多接口壓測——真實模拟,定位問題
多接口壓測的主要邏輯,就是通過建構不同的功能接口,模拟使用者的真實行為,進而幫助開發者定位接口問題。
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運用了沉澱十多年的内部實踐經驗總結,通過基于真實業務場景和使用者行為進行壓力測試,幫助遊戲開發者發現伺服器端的性能瓶頸,進行針對性的性能調優,降低伺服器采購和維護成本,提高使用者留存和轉化率。
目前騰訊WeTest伺服器性能測試已經正式對外開放:
體驗位址:http://wetest.qq.com/gaps/
如何使用簡單模式:http://wetest.qq.com/help/documentation/10094.html
如何分析報告:http://wetest.qq.com/help/documentation/10099.html
常用測試名額:http://wetest.qq.com/help/documentation/10098.html
商業轉載請聯系騰訊WeTest獲得授權,非商業轉載請注明出處。