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

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

交互 多核 進入 訪問 產品 需求 之前 pro 鏈接

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、創建項目及測試用例

1)QQ登錄http://wetest.qq.com, 選擇產品-性能測試-服務器性能;

技術分享圖片

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:超時時間設置很重要!!!超時時間決定了測試報告對結果的判定,如果服務器的響應時間超過了設置的超時時間,就會視作超時,因此超時時間一開始可以稍微設置的長一些,避免很多正常的收發包被視作了超時。

發包模式選擇為“長連接”:“長連接”是相對於“短連接”而言,建鏈之後不會馬上斷開,繼續保持數據傳輸的關系,用戶可以根據實際的連接需求進行選擇。

技術分享圖片

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壓測大師對外開放中,點擊鏈接:http://wetest.qq.com/gaps/”即可使用。

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

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