【網易易盾】網易易盾效能測試自動化建設

網易智企發表於2023-03-15

效能測試簡介

什麼是效能測試

考慮到有些同學沒有接觸過效能測試,這裡還是簡單介紹下。效能測試是透過特定的方式對被測系統按照一定策略施加壓力,獲取該系統的響應時間、吞吐量等效能指標,來檢測系統上線後能否滿足使用者需求的過程。透過效能測試的定義不難看出效能的核心指標就是我們經常掛在嘴邊的 QPS 和 RT。

為什麼要做效能測試

簡單瞭解效能測試之後,有些小夥伴肯定會問為什麼要做效能測試。對於這個問題,我打算舉兩個生活中的例子來說明下。

12306——每年春運都是一次大考
臨近春節,打工人都要搶回鄉的火車票,2019 年 12 月 23 日,有大量網友反映,12306 網站突然崩了,在購買車票的時候出現無法登入、無法購票、車次載入失敗、頁面卡住等情況,疑似因訪問流量過大而出現伺服器崩潰。

微博——頂流明星的瓜不好吃
2021 年 4 月 23 日,知名演員趙麗穎與馮紹峰離婚的訊息突然公佈,這一訊息迅速登上微博熱搜。該訊息公佈後,有網友反映微部落格戶端出現了短暫當機、網路出錯的現象。

易盾效能測試痛點

壓測執行過程繁瑣

壓測執行在易盾效能測試的整個流程中比重最大,易盾線上壓測一般採用梯度壓測。什麼是梯度壓測,簡單的說就是把壓測的大目標拆分成多個小目標,從小的目標做起,直到最後完成最終目標。假設易盾文字檢測壓測的目標值是 QPS 達到 200,那我們通常從壓力值 20 開始,然後 40、60 逐漸加大壓力,直到最後完成 200 的目標值。

具體的執行步驟是怎麼樣的呢,我們先用壓力值 20,在 NPT 壓測平臺建立一個壓測任務並執行,一般一輪壓測執行 10 分鐘。如果達不到 20 的目標值,壓測中止定位效能問題;如果達到 20 的目標值,建立下一個目標值 40 的壓測任務,繼續執行。重複之前的判斷邏輯,直到壓測中止或者完成壓測目標。

可能有人會問,你這不是自找麻煩,直接用 200 去壓測看看行不行不就完事了。線上壓測,保證線上安全始終是第一位的,需要慎之又慎,如果因為壓測把線上壓掛了會嚴重影響客戶體驗,甚至產生資損。

監控依賴人

在效能測試過程中,監控&分析屬於一個難點,到底難在哪裡?這裡需要人的經驗,需要對被測系統比較熟悉。只有在熟悉的前提下,你才知道需要看哪些監控指標,這些指標是不是正常,進而給出判斷的結論。

目前線上壓測會安排值班同學觀察監控,這種依賴人的監控很難做到實時,因為人的精力有限,根本沒法兼顧所有監控。還有就是很少有同學從頭到尾盯著監控的,大家都是有報警的時候去關注下。這樣存在一些風險,可能有些報警沒有配置、或者配置修改了沒有及時還原,導致線上有問題了,沒有報警發出來。

在壓測過程中,我們經常會遇到加大併發 QPS 上不去的情況,這時候一般就出現效能瓶頸了,但是這個瓶頸在哪裡就需要根據監控資料去定位和分析了。我們在定位的時候無非也是使用經驗的三板斧,CPU/記憶體/磁碟/網路卡等系統資源是否正常,請求量和 RT 是否合理,有沒有出現超時等異常錯誤。

壓測資料未隔離

圖片

由於壓測流量和真實流量沒有做資料隔離,導致線上無法進行全鏈路壓測,有些業務場景覆蓋不到。比如易盾儲存場景,一旦資料落庫存在效能問題,kafka 的資料就會積壓。此時 kafka 的 topic 中既有真實流量又有壓測流量的資料,就算立馬停止壓測,也會影響線上真實流量資料的消費速度,影響使用者體驗。因此,平常線上壓測都會關閉資料儲存。

壓測資損

易盾有一些外部供應商,之前壓測過程中,由於方案評估不到位遺漏了供應商這個環節,導致線上壓測產生了一些額外的費用,這種壓測資損也是不能容忍的。

易盾效能測試自動化實踐

壓測一鍵執行

建立壓測任務的時候,自動建立多個梯度壓測子任務。還是用易盾文字檢測來舉例,我們建立一個 QPS 目標值 200 的壓測任務,這個壓測任務被拆分成了5個梯度,每個梯度的壓測目標值從小到大分別是 40,80,120,160 和 200。這 5 個梯度對應 NPT 平臺上 5 個壓測目標值分別是 40,80,120,160 和 200 壓測子任務。

點選啟動壓測任務後,系統會順序執行 NPT 平臺上 QPS 目標值 40,80,120,160 和 200 的壓測子任務。壓測子任務達到目標值,會自動執行下一個子任務,如果達不到目標值,就會自動中止壓測任務。

對於監控&分析我們的思路很明確就是量化。
首先是監控,我們事先定義好哪些應用需要納入監控,這些應用各自需要監控哪些指標。這個兩個要素搞清楚了,剩下的就是透過哨兵提供的API獲取監控資料,寫入我們自己的資料庫。

對於外部供應商這種特殊業務場景的監控,我們在易盾監控大盤納入供應商請求量的指標。當供應商請求量同比或者環比出現異常時,需要及時停止壓測。

全鏈路壓測元件接入

儲存場景壓測覆蓋不到的問題如何解決,首先我們的被測系統接入了全鏈路壓測元件,實現了真實流量和壓測流量的資料隔離。

其次,影子佇列消費提供開關,kafka 資料積壓時,關閉開關,保證只有真實流量資料的消費。

易盾效能測試自動化平臺

對於上述效能測試中的改進點,我們構建了自己的效能測試自動化平臺來承載。

整體架構

落地情況

易盾文字檢測壓測目前已經完成小流量的試跑,和之前的常規壓測比,具有明顯的優勢。

未來規劃和展望

視覺化

壓測過程中提供資料和監控大盤,有助於全域性瞭解被測系統當前的狀態。

智慧化

監控資料目前比較粗暴,P0 的應用全部落庫。後續可以根據壓測場景-鏈路拓撲,只收集壓測流量經過的應用。
監控資料合理性的判斷目前都是一些固定閾值,後續可以把歷史資料納入比較,形成置信區間的演算法。

相關文章