日活上百萬時,騰訊產品如何提早規避服務器宕機風險?

原文連接:http://wetest.qq.com/lab/view/310.html
商業轉載請聯繫騰訊WeTest得到受權,非商業轉載請註明出處。html


衆所周知,優異的應用性能是良好用戶體驗的堅實基礎,而服務器響應緩慢、卡頓、崩潰的產品,即使設計再精美也沒法留住用戶的心。性能優化

2017年2月28日,百度就和用戶們開了一個不大不小的玩笑,從當天的20點54分到21點24分左右,百度搜索整整宕機了30分鐘,衆多網友戲言那30分鐘成爲了百度最有存在感的30分鐘,可是從後來百度的公關文章中,能夠看到其提到了「錯過了你們上億次的搜索請求」,從這個體量來看,這不管如何都是一次很大的影響了。
圖片描述服務器

無獨有偶,今日頭條也在今年的1月出現了宕機現象,系統超過30分鐘未響應,頭條號的編輯後臺也沒法進入,這些現象,均給用戶帶來了很大的困擾,並且用戶體量越大,影響的波及面就越廣,不只影響用戶口碑,也影響產品收入。併發

若是把產品的月收入平攤到每一分鐘的話,你們能夠經過30分鐘,60分鐘,乃至12小時,24小時的停服時間計算具體的損失金額,還要加上所以產生的用戶流失以及品牌口碑影響。框架

某國外知名遊戲在上線之初衝擊到iOS免費榜第二名的時候,由於沒有作好應對大量玩家涌入的準備,服務器卡死、宕機,閃退讓玩家失望選擇離開,下載排名一度降低到475,經過兩個月的服務器優化才挽回局面。分佈式

這樣的例子有不少,隨着重度遊戲,重度產品愈來愈多,產品愈來愈重視服務器性能的優化。本文將結合騰訊WeTest團隊爲騰訊遊戲及產品進行服務器壓測的經驗,分享一些方法和思路。高併發


1、服務器性能核心指標有哪些

關於服務器壓測,有不少指標。爲了讓你們更容易理解,舉個生活中的例子:工具

你中午去「海底撈」吃飯。性能

咱們能夠把「海底撈」這個飯店當作一個被測系統測試

你去吃飯,就是對這個被測系統發起請求,對這個系統形成了必定的負載。你帶去的人越多,那麼這個餐館就越繁忙,能夠說餐館承受的負載就越大。

你開始點菜。這個時候你隔壁桌的人也開始點菜。那麼大家兩個對這個系統產生了併發的請求。同時,其餘桌有的在吃菜,有的在等菜,這些都是併發進行的事務。一個完整的吃飯事務能夠定義成包括:點菜,下單,上菜,買單四個步驟。對於一個C/S的系統來講,能夠對應於:創建鏈接,發送請求,接受應答,斷開鏈接。

影響一個餐館生意好壞的一個重要緣由是上菜速度。上菜速度體如今兩個方面:

1.一個顧客請求的處理耗時,從下單到上菜中間等待的時間,咱們稱之爲響應時間

2.這個餐館同時爲多名顧客上菜的頻率,咱們稱之爲吞吐量

來多少顧客,這是飯店本身沒法控制的,可是飯店的上菜速度、餐位多少都會制約客流量。必定有一個峯值客流量,當來的客人超過了這個峯值,那麼這些客人就會等位,或者是上菜速度超慢讓客人沒法容忍。容量測試就是經過工具模擬足夠多的顧客來吃飯的事務,但願找到這樣一個客流量對飯店產生必定的負載,這個時候飯店既能接待最多的客戶同時也能保證最短的等待時間。更多的,還能夠對這個酒樓人員配置和餐位設置等進行調優,以期達到一個最理想的資源利用率和效率。

客流量跟進來的客人多少有關,也跟餐館的接待能力有關。單方面增長來就餐的顧客,遭到投訴的可能性就越大,上錯菜的可能性也越大。

性能指標有不少,不可能全都看,那麼有哪些核心的指標呢?

一、90%響應時間

是指全部用戶的響應時間由小到大進行排序,第90%的響應時間,是用來評估系統容量的重要指標之一。

二、TPS性能,關注服務器的服務能力。

每秒系統處理事務(經過、失敗以及中止)的數量。經過它能夠肯定系統在任何給定時刻的時間事務負載。

三、支持的最大在線人數。

指同時登陸站點的最大人數或者服務器同時接收下載的最大數量。

四、服務器自身壓測過程總CPU、內存等的變化狀況。

CPU利用率是指:CPU執行非系統空閒進程的時間/CPU總的執行時間;內存佔用率指的是此進程所開銷的內存。

五、事務成功率

事務成功率=成功處理的事務/全部事務*100%,是檢測服務器處理事務成功概率的重要指標。

2、市面上有哪些服務器壓測方法

爲了可以幫助用戶更快捷的得到服務器的核心數據,市場產生了諸多各式各樣的壓測方法,但也存在各式各樣的問題:

一、現網數據預估

根據壓力測試過程當中的部分數據,對將來大量用戶訪問的狀況機型預估。

存在問題:只適合簡單的服務器擬合,複雜服務器數據就不太準確。

二、真人壓測

經過邀請必定數量的真實用戶來玩遊戲,從而對服務器達到一個測試效果。

存在問題:暴露出的性能問題有限,封測人數一般仍是太少,雖然有幾百或者幾千用戶在玩,可是併發並不夠,不足以暴露服務端性能問題;另外不適合調優,真人沒法徹底重複相同行爲,服務器就難以進行迴歸調優。

三、接口測試

選擇一些具備表明性的功能,經過以小見大的方式,來評估整套服務器性能。

存在問題:沒法遍歷整個服務器的接口,難以免一些微小的問題。

四、錄製回放

經過抓取數據包的方式,來獲取遊戲時的協議,再把這些捕獲的協議從新發送給服務端,經過工具放大協議量級達到性能測試的目的。

存在問題:面對複雜的協議交互,單純的放大數據包,沒法產生足夠壓力。

五、機器人模擬

經過高還原真實玩家的用戶行爲,模擬高併發場景,從而獲得相似不少人同時遊戲的測試效果。

這些方法各有優劣,騰訊內部廣泛使用「機器人模擬」的方法進行壓測,而「機器人模擬」的壓測方法須要充足的測試時間和很大的人力投入,爲此騰訊制定了一個較爲通用的測試流程,用以提高壓測效率。

3、騰訊內部服務器性能的測試流程介紹

根據騰訊內部遊戲和產品的使用需求,騰訊WeTest團隊首先針對http與https協議的頁面,梳理了一個通用的壓測流程。

一、 肯定壓測場景,好比登陸,獲取信息列表等

測試人員第一步要作的就是測試方案的確認,主要就是提早模擬實際業務中涉及的場景以及場景中用戶的使用行爲,一般須要確認這樣幾點:

1) 確認用戶的登陸狀態,用戶的登陸態是否會不斷變化

2) 用戶登陸後的訪問路徑之間的上下文關係

3) 訪問路徑之間的參數傳遞關係

二、 測試人員編寫測試用例

編寫測試用例就是將上述模擬場景具體化的過程,包括確認壓測的人數,人數遞增邏輯,具體須要壓的接口,接口之間的參數傳遞等。

三、 啓動機器人進行測試,漸進增長機器人數量

在確認了測試方案後,這一步就是執行的過程,根據測試方案中預估的壓力人數,漸進的增長壓力的人數。

四、 記錄分析數據及事務處理狀況,查看服務器負載的變化以及服務器的當前承載能力。

上一步提到了要漸進增長機器人,那麼爲何要漸進增長機器人?由於在服務器併發增長的過程當中須要不斷監控上文服務器的核心數據,不斷挑戰服務器處理能力的極限,避免上來就使用一個太高的併發數直接超過了服務器處理能力的極限,從而沒法起到性能優化的目的。通常來講,在機器人增長的過程當中,CPU的忽然跑滿以及響應時間瞬間變長,均可能是服務器產生了瓶頸。所以壓測人員須要實時監控壓測上升過程當中的服務器狀況變化,從而定位問題所在。

五、 調整配置,迭代測試,預估服務器的承載能力以及可能存在的性能瓶頸

在發現基本的測試問題後,測試人員須要經過不斷的調試來定位問題,而後從新發起壓測,知道實現最終的測試目的。

根據這個測試流程,騰訊內部也總結了一些壓測產品所須要具有的特色。

1) 簡單易上手

產品的業務場景是多變的,可是好的壓測產品應該讓這個場景配置過程變得簡單易用,用戶在簡單輸入須要壓測的URL便可進行各個接口的測試,大部分測試配置建議提供一個默認值,用戶對功能更加了解以後能夠自由配置這些參數。

2) 進階功能完善

除了簡單易用以外,也要給用戶提供一些進階的功能,在簡單輸入URL的基礎上,能夠支持用戶自定義變量,從文件讀取變量,甚至從其餘URL的返回值獲取變量的值,能夠比較真實模擬真實場景,避免請求變量單一。

3) 提供分佈式壓力機進行壓測

因爲單機的侷限性,壓測產品可使用分佈式壓測的框架,根據用戶配置的機器人數量動態分配多個壓測機,極大提高壓力上限。

4) 詳細的測試數據統計

壓測大師會記錄測試過程當中的多項數據,包括在線人數變化、TPS變化、響應時間、收發包流量、服務器CPU內存狀態、壓力機硬件負載、測試結果統計等,能夠快速定位服務器的容量以及瓶頸。

基於這些需求,騰訊WeTest團隊開發了專一服務器壓測的產品「壓測大師」,簡化了壓測配置過程,用戶能夠在線上部署,線上調試,線上查看報告,幫助用戶成爲最高效的「壓測大師」。

4、測試案例:真實模擬《NOW直播》活動場景

騰訊NOW直播是騰訊目前發展很是迅速的直播應用,在其一場線上活動中,須要對活動的全部接口進行壓力測試,提早暴露問題並解決,確保活動的順利實施。爲此,NOW直播團隊選擇使用「壓測大師」,對活動進行了一整套場景測試。

「壓測大師」包含「頁面測試」,「URL測試」和「高級模式」三塊功能。

「頁面測試」適用於HTTP、HTTPS協議,可對Web,H5等頁面進行壓力測試,主要測試頁面靜態資源的壓力數據,幫助提高官網推廣大型運營活動時網站的穩定性;

在「URL測試」中,用戶能夠設置用戶併發增加形式,不一樣URL的上下文參數配置以及服務器監控,實現最多同時16個用戶場景,實現更多的場景配置;

而「高級模式」適用於HTTPS及其餘協議,包括自定義協議等。支持對遊戲,產品協議進行壓力測試,用戶經過代碼配置,能夠根據自身需求開啓協議壓測。

在測試過程當中,NOW直播團隊首先梳理了測試思路,一方面經過單接口壓測,提早暴露核心模塊的問題;另外一方面經過多接口的場景設置,儘可能模擬真實用戶行爲,使得壓測結果更有說服力。

在測試過程當中,《NOW直播》利用」壓測大師「的URL測試功能,針對「發消息」「點贊」「拉取公告」「註冊」「讀取房間信息」「進入房間」等各個獨立行爲進行單接口壓測,經過設置壓測起始人數,每階段增加人數以及最大人數(見下圖),設計接口的壓力狀況。
圖片描述

「壓測大師」URL測試中的「人數設置」

另外對於用戶不一樣的訪問行爲,《NOW直播》對「註冊-房間信息-進房」進行了多場景的壓測(見下圖),經過GET請求,讀取一個用戶的「登陸態」,經過功能接口隨機產生不一樣行爲邏輯的機器人,模擬真實的QQ用戶;而後經過POST請求依次執行具體的業務行爲,最後經過URL測試中的「上下文配置」,選擇調用不一樣的功能接口,從而發現功能之間產生的邏輯問題。
圖片描述

「壓測大師」URL測試中的「上下文設置」

通過幾天緊張的測試,NOW直播活動的各個場景數據都獲得了大大的提高,其中「用戶進入房間」場景的響應時間減小了近一半;「用戶發送消息」與「點贊」場景的TPS提高四倍,爲活動的穩定開展提供了堅實的保障。


不管是遊戲仍是產品,騰訊經歷過無數次服務器的考驗,面對這些考驗,騰訊也漸漸總結出了一套通用的應用性能管理解決方案,讓用戶可以在遊戲上線以前基於真實業務場景和用戶行爲進行壓力測試,發現服務器端的性能瓶頸,並進行鍼對性的性能調優。以上內容也是根據騰訊產品無數次的壓測總結下來的一些經驗,騰訊WeTest團隊也但願經過「壓測大師「這類產品,不斷簡化服務器壓測的過程,提高壓測人員的工做效率。

功能目前免費對外開放中,歡迎你們的體驗!
體驗地址:http://wetest.qq.com/gaps/

若是對使用當中有任何疑問,歡迎聯繫騰訊WeTest企業qq:800024531

相關文章
相關標籤/搜索