騰訊優測優分享 | 分佈式系統測試的應用方法——場景注入測試

騰訊優測是專業的移動雲測試平臺,提供自動化測試-全面兼容性測試,雲真機-遠程真機租用,漏洞分析等多維度的測試服務!linux

在大數據浪潮下,海量數據處理能力的提高是推進大數據不斷前行的基礎。俗話說,工欲善其事,必先利其器,因爲處理能力亟需提高,所以海量數據處理的分佈式系統應運而生,例如hdfs、hadoop、spark、storm、MQ等等。
分佈式系統運行的核心是集羣化部署,分散化管理,任務均攤,平衡化運行。節點異常、機器異常、運營操做、策略變動都會打破原有的平衡狀態進入一種不平衡狀態,平臺經過狀態管理和協議交互逐步演進到另外一種平衡狀態,同時要保證這種演進過程當中系統計算正確性。打破原有的平衡狀態的場景很是多,複雜的平衡演進過程當中又有不少的場景可能出現,這種交織的變化對分佈式系統測試,特別是穩定性測試帶來很是大的挑戰。
本文將從分佈式系統出發,重點介紹分佈式系統穩定性測試中的一種應用方法——場景注入測試。服務器

分佈式系統測試:

測試執行過程能夠概括爲構建輸入(包括數據和系統場景)、驅動輸入、收集結果進行校驗(包括系統狀態、計算結果),以下圖。
除海量數據的涌入對系統的穩定性形成不少衝擊外,複雜的場景變化也時刻敲打着系統的穩定性。下面我將重點分享場景注入測試在分佈式系統穩定性測試中的應用。
經過數據驅動分發到兩套環境(一套穩定版本環境,一套被測系統環境),對被測系統測試版本環境注入各類場景,經過對比兩套環境下的計算結果,挖掘測試版本的系統bug。
網絡

場景注入測試思考

對於節點多、角色多、交互複雜的分佈式系統來講,節點異常、機器異常、網絡異常、運營操做、擴縮容等等場景不可避免,集羣規模越大,場景的交叉出現機率倍數增長,時刻對平臺的穩定性進行衝擊。既然這些場景不可避免,經過人爲地觸發這些場景,能提早暴露系統的問題,是一種很是有效的預防措施。
分佈式系統的特性是高可用、高容災能力。那麼,節點異常、機器異常、網絡異常、運營操做、擴縮容等等場景的出現,都不能影響系統的穩定性運行和任務的正常處理。所以,把系統可能發生的場景進行分類並構建出來,注入到被測系統,並與其餘測試手段結合使用,便可以提早暴露系統的問題。
基於以上思路,在數據平臺部的不少系統上進行了應用,都取得了很好的效果。
架構

場景注入測試平臺架構

鑑於場景注入測試在分佈式系統上應用的效果,以及具有場景可重複使用、公共場景可在不一樣系統上通用、與其餘測試方法可相互獨立無耦合等特性,着手建設了場景注入測試平臺,在簡單的後臺系統、大規模的分佈式系統上都能進行應用。資源異常、網絡異常這樣的功能異常都已經構建,能夠應用到各類被測系統;測試同窗可自行豐富被測系統的特性節點異常和運營操做等場景。
場景注入流程:原子操做與集羣中的節點相結合組成一個場景;此場景被某個場景注入任務選取並被TriggerServer掃描獲得,TriggerServer把此場景的原子操做ID發送給部署在各個節點上的場景執行CaseAgent,CaseAgent接收此消息後從原子操做服務器上把原子操做拉取到本地進行執行,實現場景的觸發。
在分佈式系統中,集羣規模大,節點多,多個場景可能同時發生,例如,一個節點宕,同時網絡異常,致使集羣沒法快速感知此節點狀態;一個不平衡狀態演進過程當中發生其餘場景等等,此類多場景同時觸發的場景對系統的穩定性考驗更大。在平臺中經過構建一種多步驟場景來實現多場景同時觸發的場景。
框架

原子操做管理

原子操做分爲公共原子操做和系統原子操做。公共原子操做由資源異常和網絡異常組成,能夠被全部系統所用;系統原子操做由節點異常和運營操做組成,能夠被此係統所用測試環境中應用(功能測試環境、穩定性環境、準現網環境)。
一個原子操做由兩部分組成,操做的發起action和操做的恢復recover。操做的發起action在某個節點上執行就產生某個場景,操做的恢復recover在此節點上執行則此場景恢復取消。
原子操做由單獨的服務器管理,經過原子操做名進行區分,CaseAgent從服務器上拉起原子操做到執行節點上執行。
要求執行某個原子操做action,未被recover前,再此執行此原子操做action將失敗。例如,原子操做action是讓節點cpu消耗到90%的高負載下,若是再此執行action已無心義了。所以設計原子操做action時必須注意此要求。
要求可重複執行recover操做,但效果要相同。例如recover是啓動某節點的進程,重複執行屢次,節點的進程只能啓動一次。要避免重複執行後,致使多個進程被重啓。(固然不排除要啓動多個進程的場景,但願經過其餘方式實現。)分佈式

場景操做管理

場景:由原子操做與集羣節點組成,相互獨立管理。原子操做一旦建設,能夠重複利用個,與被測集羣節點組合成場景。
單步驟場景操做(單時間內單場景):僅由單個原子操做與某個節點組合而成,執行過程爲先執行action,再執行recover。
多步驟場景操做(單時間內多場景):由多個場景組合而成,執行過程爲先執行全部步驟的action,再執行全部的recover。先執行全部步驟的action是保障多個場景能同時觸發。工具

TriggerServer的任務調度

選取要執行的場景操做,提交一個場景注入任務,還包含場景執行的用戶、任務執行重複次數、場景觸發方式等信息。
場景執行的用戶:場景在某個節點上觸發時是以什麼用戶執行。除網絡異常由root來執行tc netem和iptables命令外,其餘場景均可以有用戶本身指定要執行的用戶。
任務執行重複次數:用戶能夠指定此任務的全部場景的執行重複次數,對於分佈式系統來講,不少異常是偶現的,須要屢次執行某些場景下才可能偶然出現一次。
場景觸發方式:支持兩種方式,時間間隔觸發和定時觸發。時間間隔觸發,指定場景之間的執行時間間隔。定時觸發,指定場景是按某種定時規則觸發,與crontab配置方式一致(當前僅支持分鐘和小時),幫助系統某種整點時刻下特性與場景的組合觸發。
Action和recover間隔:可配置action與recover的執行時間間隔,適應action與recover快速執行、action執行後一段時間再執行recover等場景。oop

原子操做實例

因爲系統原子操做與具體的系統耦合性過高,如下僅以公共原子操做爲例進行實例說明。
當前機器資源異常,CPU消耗高負載經過無限循環的加乘進程實現;內存不足經過申請指定內存大小,循環執行memset保障其在物理內存中實現;文件/目錄不可讀經過修改其讀寫權限實現。網絡異常,經過tc netem(tlinux2.0已開啓)和iptables兩種命令實現。測試

以CPU消耗高負載爲例說明原子操做構建方式:

Cpu_load_make是此原子操做名,對應原子操做目錄,包含action.sh和recover.sh,其餘幾個腳本爲action.sh和recover.sh執行服務。
大數據

action.sh中要記錄action.sh執行的狀態(寫入runFlag.txt),若是已經執行過,就不能再次執行。
recover.sh執行後把執行狀態修改掉,以便下次action.sh能順利執行。

場景自動生成

除手工構建場景外,平臺還提供了自動生成場景的功能,解決大集羣狀況下重複的配置場景,同時經過自動生成場景提高場景的覆蓋度。
場景分爲單步驟場景和多步驟場景,場景的自動生成也分單步驟場景的自動生成和多步驟場景的自動生成。

單步驟場景的自動生成:

選取要生成場景的操做原子和操做節點,生成一個自動生成任務。由TriggerServer根據任務的操做原子和操做節點進行差乘生成場景。

多步驟場景的自動生成:

選取已有的場景,生成一個自動生成任務。由TriggerServer根據任務的場景和場景進行差乘生成新的場景。
選取的場景還能夠是多步驟場景與多步驟場景進行自動生成場景。隨着節點數、原子場景的增長,多步驟場景生成的場景數很是龐大,執行週期很是長;隨着步驟的增長,對應場景在現實狀況下被觸發的可能性也大大下降;建議測試過程當中可逐級生成場景進行測試,掃清一級,再生成另一級的場景。

場景注入實例(tube測試)

在數據平臺部,有個分佈式tube系統,是個生產消費模式的MQ系統,提供存儲外部生產的數據,可被消費者進行消費這些數據,生產和消費的數據在系統穩定狀況下保持一致,在異常場景下不保證高一致性,容許少許數據丟失。
這個項目質量保障的重點是無異常狀況下生產和消費高一致,有異常狀況下數據只容許少許丟失,場景注入是很是有效的測試手段。
對於此係統的重要觀察點就是生成數據的一致性,校驗分做兩種類型,有損校驗(異常場景)和無損校驗(無異常場景)。爲了方便生產和消費數據校驗,把系統運行狀態分紅穩定運行常態和異常觸發狀態;場景的觸發爲定時觸發方式,每10分鐘觸發一次,action與recover時間間隔2分鐘,所以穩定運行常態和異常觸發狀態按5分鐘單位交替出現; 5分鐘時間內生產的數據打上此5分鐘時間戳印記,消費端就能夠經過時間戳統計此5分鐘消費多少條進行校驗了。
在此版本測試中,僅場景注入測試發現bug 19個(嚴重10個)。

結語

大數據分佈式系統的存儲與計算集羣規模和複雜度在不斷增長,帶來的穩定性風險也在快速增長,場景注入測試框架能夠說是隨着互聯網的發展應運而生的。在數據爲王的將來,系統的可用性須要達到一個更高的層次,場景注入測試將成爲了系統測試中不可或缺的一環。數據平臺部場景注入測試平臺場景能夠不斷完善支持更多的場景,與其餘測試方法獨立,又能夠相互結合,具備良好的可拓展性和易用性,可以知足的各種軟件的測試需求。但願大數據的浪潮下,測試也能一塊兒弄潮前行。
加入騰訊優測官方羣 214483489 與大咖們分享技術與時訊!
騰訊 王德寶
_騰訊優測是專業的移動雲測試平臺,爲應用、遊戲、H5混合應用的研發團隊提供產品質量檢測與問題解決服務。不只在線上平臺提供自動化兼容性測試、雲手機遠程租用與調試、漏洞分析、自動化測試工具Xtest等多種質量檢測工具,更爲VIP客戶配備了專家團隊提供定製化綜合測試解決方案。

相關文章
相關標籤/搜索