1. 程式人生 > >騰訊自己的直播答題,如何實現穩定的效能輸出

騰訊自己的直播答題,如何實現穩定的效能輸出

作者:oliver, 騰訊壓測大師團隊產品經理
商業轉載請聯絡騰訊WeTest獲得授權,非商業轉載請註明出處。

WeTest 導讀

對症活動上線伺服器崩潰,有療效。

專案背景

2017年下旬開始,“直播答題”活動突然在各大直播,短視訊應用集中的開展了起來,動輒上百萬的獎金吸引了大量使用者的參與。主要的玩法是,主持人出選擇題,然後使用者會收到題目,然後選擇答案。大家都選擇完後,主持人公佈答案。12道題一場,答對題目才能進入下一題作答。12題結束後公佈結果全部答對的人數,發放獎金。一場直播每人可以分到幾十元甚至百萬元,越來越多的人希望用自己的智商賺點零花錢。

直播答題有多火?多個直播平臺伺服器多次遭到宕機。就傳統視訊直播而言,直播間通常線上使用者人數是少幾萬人,通常情況下超過五萬的不多。而對直播答題來說,直播間線上使用者人數超過百萬那是很平常的事情,某一線直播平臺旗下的直播答題直播間線上人數更是突破了五百萬人。而且所有使用者都是在活躍答題的,這是傳統視訊直播不曾面對過的壓力。

實際上,許多APP在上線之初,完全不瞭解自己可能承受多大的併發,他們或許還沒有想到自己會火得這麼快。很多APP也就因此出現了線上使用者無法進入遊戲、技術故障導致遊戲被迫臨時取消等情況。

騰訊NOW直播也在自己的平臺上開發了答題玩法——”全民闖關”,為了能夠避免出現各大直播答題平臺出現的效能問題,讓答題活動能夠順利的趕上風口,實現優質的產品服務,NOW直播的測試團隊與騰訊WeTest壓測大師進行了合作,對“全民闖關”活動進行了系統的壓測,騰訊WeTest壓測大師也將其整理成了“線上知識競技壓測解決方案”。

一、業務流程

直播答題活動在業務流程中,主要體現為以下幾個重要節點:

1.使用者進入直播間

2.主持人發出派題指令;

3.題目資訊通過網路送達給使用者;

4.使用者通過網路拉取題目資訊;

5.如題目資訊包含完整內容,則下一步,如果只有題目 ID,則到業務伺服器查詢題目內容;

6.使用者把題目答案提交給答題統計分析伺服器,同時得到標準答案反饋;答題統計分析伺服器是分散式的叢集,統計答題結果,反饋給主持人;

7.答錯的使用者進入復活卡使用的選擇,伺服器判定是否可以進入下一題

8.答題結束,進入結算頁面,伺服器反饋結算結果

這裡寫圖片描述

           NOW直播“全民闖關”活動業務邏輯

測試需求的產生——尋找高併發節點

NOW直播所測試場景的流量主要來自於手機QQ,跳轉到H5形式的活動頁面。

在活動發起的一開始,NOW直播方面發現整個功能在三個節點的伺服器壓力特別大,很容易出現伺服器不穩定的問題,分別是“準點進入直播間”、“公佈問題答案”以及“啟用復活卡”。

這裡寫圖片描述

           準點進入直播間

這裡寫圖片描述

                 公佈問題答案時間

這裡寫圖片描述

             啟用復活卡時間

二、技術挑戰點——初步排查問題

除了顯而易見的幾個高併發節點,NOW直播團隊發現DAU的上升不僅會給產品活動頁面產生“直接壓力”,也會對產品的其他節點也帶來“間接壓力”,為了能夠找到這幾個高併發節點產生問題的原因並進行優化,NOW直播方面初步排查到以下幾點:

1、 直接壓力:

答題類CGI可能同時觸發,帶來壓力;DAU的上升會給原有房間CGI帶來壓力;

2、 間接壓力:

DAU的上升會給“附近”、“發現”CGI帶來壓力。

實現方案

為了能夠通過系統的壓測排查產品CGI中存在的問題,NOW直播團隊制定了詳細的壓測計劃,包括測試前的準備工作,測試目標的制定、測試分析、測試用例配置以及問題的優化。

一、測試前準備

1、收集CGI及配置

收集本次測試需要覆蓋的CGI以及相關的配置,包括Header的引數、cookie是否帶登陸態,CGI之間是否有前後順序或依賴關係,需要與開發對齊每條CGI的配置。

2、獲取白名單的登陸態

對於需要含登陸態的CGI,需要有一批測試號,通過這些號的登陸態去訪問CGI。

3、分析業務場景

1)與產品確定本次預計的最高線上人數;

2)判斷是否業務併發場景,如同時拉活動主頁等併發場景,需要以最大線上人數去測試,如果非併發場景,可以與開發產品一起評估按一定的量去壓測。

二、制定測試目標

根據與產品的溝通,確認此次壓測的實際目標,NOW直播測試團隊與產品方面確認的壓測目標如下:

預估灰度量級:PCU:15W左右

壓測標準:併發人數:10W

通過標準:

● 成功率>95%;

● 平均TPS 大於10W;

● 90%響應時間<1000ms.

三、測試前分析——挖掘直播答題壓測主要痛點

根據之前初步問題的排查,NOW直播測試團隊首先需要整理進行系統壓測的所有介面,具體介面情況如下圖:
這裡寫圖片描述

    NOW直播為“全民闖關”活動準備實施壓測的所有介面

為了能夠幫助“全民闖關”在壓測後迅速定位到伺服器存在的問題,實現快速的效能優化。

“線上知識競技壓測解決方案”所需要解決的主要痛點在於以下四點

痛點一:根據業務需求確認需要壓測的CGI

測試團隊在測試前要確認需要進行壓測的關鍵CGI,監控其資料表現;

痛點二:模擬使用者真實登入狀態

“全民闖關”需要使用者有真實的登入狀態,壓測的請求可以真實模擬使用者的訪問狀態;

痛點三:滿足TPS梯級增長的增長模型

“全民闖關”需要模擬使用者的增長模型,實現使用者不斷增長的場景,瞭解伺服器能夠承受服務的量級;

痛點四:幫助開發迅速定位前後端問題

在獲取了壓測後的詳細結果後,測試團隊要通過這個結果幫助開發團隊迅速定位問題,迅速進行效能優化。

四、選擇測試工具——壓測大師

根據“全民闖關”壓測的功能需求,壓測大師提供了針對性的功能服務,內容包括:

1、支援壓力梯級配置,一分鐘發起十萬級併發壓力

2、支援上下文變數,實現真實模擬使用者登入狀態

3、實時檢視測試報告,多維度報告對比,迅速定位效能瓶頸

壓測大師也通過這些能力,驅動騰訊雲壓力機集中訪問NOW直播服務節點,長連線建立完成高併發使用者傳送登入驗證資訊到後端伺服器,後端服務回送驗證資訊,真實模擬“全民闖關”活動“登入”、“進房”、“拉取房間資訊”、“拉取活動首頁”、“拉取成員列表”等場景,實現系統性的壓測。

五、測試流程與方法

為了保證答題的每個CGI都能夠滿足足夠的承載能力,NOW直播測試團隊選擇的測試方式是通過對單CGI進行壓測,每個CGI實現10W的併發。

而在壓測大師進行用例配置時,NOW直播測試團隊的操作如下:

1、建立專案及測試用例

這裡寫圖片描述

2)可以選擇建立新專案,或者可以讓已有專案負責人幫新增許可權,然後點選進入專案。

這裡寫圖片描述

3)點選建立測試用例;

這裡寫圖片描述

或者點選測試用例,複製已有的一條進行編輯;

這裡寫圖片描述

4)編輯完成(詳細的編輯見下文),在最下面點選除錯,這時會先發一條,然後檢視結果;

這裡寫圖片描述

看響應互動狀態及響應body是否正常。

這裡寫圖片描述

如果是“飄心”或者“發言”,可以在對應的房間看是否有出現效果。

(5)然後可以選擇小數量執行看一下結果,在執行大數量之前,需要通知對應的後臺一起關注,以防止壓垮伺服器後能及時發現,並停掉壓測及緊急修復。

這裡可以選擇立即執行及定時測試。(注意錯開高峰時間段壓測,以避免影響到現網業務)。

這裡寫圖片描述

2、測試用例編輯

1)發包設定——梯次配置,注意設定合理的超時時間

起始人數設定為10000人:NOW直播方面瞭解伺服器方面至少可以滿足10000人的併發,直接從10000開始驗證伺服器的容量,因此將起始人數設定為10000人。

每階段增加人數10000人,每階段持續時間30s,最大人數10W人:NOW直播測試團隊希望在5分鐘內把壓力提升到10W,選擇每30s提升10000人;這類緩慢加壓的方式,可以逐漸發現壓力在某個量級出現問題,可以迅速瞭解伺服器承載能力的瓶頸所在。

發包間隔時間為100ms:發包間隔主要決定了壓力機方面多久發出一個包,一般預設為0ms,即不斷的發包,考慮到伺服器的回包能力,可以適當的增加發包的間隔,NOW直播測試團隊方面把發包間隔設為了100ms。

超時時間設定為3000ms:超時時間設定很重要!!!超時時間決定了測試報告對結果的判定,如果伺服器的響應時間超過了設定的超時時間,就會視作超時,因此超時時間一開始可以稍微設定的長一些,避免很多正常的收發包被視作了超時。

發包模式選擇為“長連線”:“長連線”是相對於“短連線”而言,建鏈之後不會馬上斷開,繼續保持資料傳輸的關係,使用者可以根據實際的連線需求進行選擇。
這裡寫圖片描述

       NOW直播測試用例的配置

2)客戶端請求——巧用“上下文變數”,真實模擬使用者登陸態

NOW直播測試專案中,根據實際需求主要分成兩類,一類不需要實現登陸態,一類需要實現頁面的登陸態以真實模擬使用者訪問介面。

a)不需要登陸態,以獲取答題資訊CGI為例,新增header:
這裡寫圖片描述

b) 需要登陸態,需要通過壓測大師的“上下文變數”進行引數傳遞。需要先發一條CGI申請一個帶登陸態的號碼,再去做下一步操作,以“進房”為例。

通過在“客戶端請求”選擇“上下文變數”,在其的response body裡提取uin及skey;再將uin及skey放置在下一步CGI header的cookie裡。

這裡寫圖片描述

通過“上下文變數”功能,將上文body資訊傳輸到下文header的cookie中。

3)測試模型——配置各CGI壓力部署

a) 不需登陸態的CGI,一般選擇“單場景”,如果是想看單條CGI的效能,就配置單條,如果想看多條併發效能,配置多個場景與壓力百分比。
這裡寫圖片描述

b) 需登陸態的CGI,需選擇“上下文”;

這裡寫圖片描述

點選上面的壓測場景下的CGI,可配置多條CGI的配置順序;

這裡寫圖片描述

4)報告標準閾值——直觀瞭解測試結果是否通過

設定閾值後,測試報告會直觀體現測試是否通過。

這裡寫圖片描述

六、測試結果分析

1、如何檢視報告

1)檢視問題及建議:

這裡寫圖片描述

可針對對應的問題,與開發溝通是否伺服器存在瓶頸。

2)檢視概況中的線上人數,看是否與設定的符合。如果線上人數低於預設的人數,即伺服器可能無法承受那麼大的併發數。

這裡寫圖片描述

3)檢視事務資料中的TPS及響應時間。

這裡寫圖片描述

這裡寫圖片描述

最終效果

通過對NOW直播“全民闖關”活動的主要介面進行壓測之後,得到了初步的資料,NOW直播方面發現後臺伺服器沒有利用到多核機器,Spp的proxy只利用到了單程序單執行緒,因此通過對單臺八核機器部署了6個程序,從而實現了各介面TPS提升了100%左右。

這裡寫圖片描述

     NOW直播“全民闖關”活動主要介面壓測資料

            (具體資料隱去)

從資料上看,風險可控。

NOW直播測試團隊通過對“全民闖關”完成了壓測之後,通過提升後臺伺服器的利用率,將TPS提升了一倍多,並根據在測試環境的壓測情況,對線上環境進行了針對性的擴容,在實際上線後,也承載住了線上的壓力。

關於壓測大師

WeTest壓測大師服務了包括王者榮耀、QQ飛車手遊、QQ炫舞手遊等多款高星級手遊, 也服務了QQ、NOW直播、摩拜單車、企鵝FM等明星產品。

此次推出”線上知識競技壓測解決方案“,實現使用者瞬時進入房間,拉取題目資訊等場景,並真實模擬使用者登入狀態,幫助開發者真實模擬直播答題使用者使用場景,幫助開發者發現伺服器端的效能瓶頸,進行鍼對性的效能調優。在保證使用者流暢體驗的同時,也能降低伺服器採購和維護成本,實現使用者與開發者的技術共贏!

如果對使用當中有任何疑問,歡迎聯絡騰訊WeTest企業QQ:800024531