周林
【摘 要】為了解決云存儲性能測試中由于產(chǎn)品種類多、部署時間長、硬件依賴差異大等導(dǎo)致的測試重復(fù)動作多、測試項多、調(diào)優(yōu)參數(shù)多、消耗時間長等問題,通過采用開源、跨平臺的編程語言、框架和測試工具,分析了業(yè)界認可的測試工具、性能數(shù)據(jù)和處理算法,并提出了包含部署、調(diào)優(yōu)、測試、數(shù)據(jù)分析和可視化等流程的自動化測試平臺方案。經(jīng)過實驗驗證了自動化測試平臺的有效性,并發(fā)現(xiàn)了不同云存儲產(chǎn)品的優(yōu)缺點、調(diào)優(yōu)參數(shù)的實際作用,為云存儲的技術(shù)選型提供了有力技術(shù)支撐。
【關(guān)鍵詞】云存儲 自動化測試平臺 跨平臺
1 引言
云存儲作為云計算中的一種基礎(chǔ)設(shè)施,是云計算不斷向前發(fā)展的基石,也是一種能夠與云計算所需要的PB甚至ZB級別存儲相匹配的現(xiàn)代存儲[1]。它是一種新的網(wǎng)絡(luò)存儲技術(shù),通過結(jié)合集群技術(shù)、網(wǎng)絡(luò)技術(shù)、分布式文件系統(tǒng)、特定的軟件技術(shù)將大量存儲設(shè)備構(gòu)建為一個統(tǒng)一的存儲資源池,提供統(tǒng)一的命名空間,作為一個整體對外提供數(shù)據(jù)存儲和訪問服務(wù)[2-3]。
云存儲是未來存儲的主要發(fā)展方向,市面上已經(jīng)有很多家相關(guān)廠商,技術(shù)側(cè)重點各有不同,同時由于底層硬件組合對于云存儲的性能也有很大影響,因此在技術(shù)選型時對各家云存儲進行廣泛、有效、跨硬件平臺的性能測試就顯得尤為重要。云存儲的測試通常具有測試消耗時間長、測試項多、調(diào)優(yōu)參數(shù)多、部署時間長、硬件依賴差異大等特點?;诖耍疚奶岢鲈O(shè)計一種通用的自動化測試平臺,它能夠一次實施部署后重復(fù)使用;批量設(shè)置測試任務(wù)集,更換硬件平臺后復(fù)制測試任務(wù)集即可實現(xiàn)自動順序執(zhí)行;測試任務(wù)前支持執(zhí)行自定義的參數(shù)調(diào)整腳本;能夠跨平臺;使用通用開源工具,認可度高且方便復(fù)現(xiàn);能夠進行分布式性能監(jiān)控數(shù)據(jù)收集[4];能夠自動生成圖表直觀展示性能。
2 常用工具和方法介紹
Python是一種面向?qū)ο?、解釋型的計算機程序語言,可以跨平臺運行,具有豐富、強大的標準庫和第三方擴展庫,功能覆蓋科學(xué)計算、Web開發(fā)、數(shù)據(jù)庫接口、圖形系統(tǒng)多個領(lǐng)域,并且大多成熟而穩(wěn)定;Python在設(shè)計上堅持了清晰統(tǒng)一的風格,這使得Python成為一門易讀、易維護且被大量用戶所歡迎的用途廣泛的語言[5]。
Psutil[6](Python的系統(tǒng)和進程工具)是一個跨平臺的Python庫,目前支持Linux、Windows、OSX等平臺,主要用于檢索正在運行的進程、限制進程占用的資源和對運行的進程進行管理;同時還能夠?qū)ο到y(tǒng)實施監(jiān)控和分析,如能夠獲取CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)和傳感器的信息[7]。
Matplotlib[8]是一個Python的2D繪圖庫,能夠生成出版物質(zhì)量級別的圖形,并輸出多種圖形格式,也是跨平臺的。它可以生成圖、直方圖、功率譜圖、條形圖、誤差圖以及散點圖等,都只需要使用幾行代碼。
FIO是一個非常強大的I/O性能測試工具,是業(yè)界認可的一種I/O基準測試工具,也是跨平臺的。它支持13種不同類型的I/O引擎以及設(shè)置I/O優(yōu)先級、I/O速率等,可以工作在塊設(shè)備以及文件兩種存儲模式下,通過一個簡單的配置文件來詳細控制測試的所有細節(jié);除了最終結(jié)果外,它還支持將測試過程中的性能數(shù)據(jù)輸出到文件,方便查看整個過程中的變化曲線[9]。
3 系統(tǒng)設(shè)計和實現(xiàn)
3.1 系統(tǒng)總體設(shè)計
本文構(gòu)建的自動化測試平臺主要包含以下三類節(jié)點:
(1)控制節(jié)點:用來控制整個測試流程,收集、處理、展示測試數(shù)據(jù);
(2)負載節(jié)點:用來生成負載,直接通過存儲網(wǎng)絡(luò)與云存儲連接;
(3)云存儲節(jié)點:用來構(gòu)建云存儲集群的節(jié)點。
云存儲自動化測試平臺架構(gòu)如圖1所示:
3.2 系統(tǒng)組件設(shè)計
本文構(gòu)建的自動化測試平臺包含的組件主要如下:
(1)部署:該組件的任務(wù)是在特定平臺上生成測試所用的虛擬機,檢查并驗證測試所需軟件是否安裝完備;
(2)調(diào)優(yōu):該組件的任務(wù)是針對某類測試對云存儲進行參數(shù)調(diào)整,這也是本平臺的特色之一,可以在測試前指定本輪測試需要驗證云存儲的哪些調(diào)整參數(shù);
(3)測試:該組件是測試平臺的核心組件,即在所有測試虛擬機加載測試云存儲、運行相關(guān)性能監(jiān)控程序(Psutil)、運行測試程序、監(jiān)控測試程序運行情況等;
(4)分析:該組件的任務(wù)是將測試數(shù)據(jù)、測試期間的性能數(shù)據(jù)進行處理和分析,形成指定格式的數(shù)據(jù);
(5)可視化:該組件的任務(wù)是將前面經(jīng)過處理和分析的數(shù)據(jù)畫圖,主要就是使用Matplotlib。
3.3 系統(tǒng)流程設(shè)計
本文所構(gòu)建的自動化測試平臺測試流程如圖2所示。
下面將從以下三個維度來描述測試平臺的測試流:
(1)測試任務(wù)集
測試任務(wù)集就是所有測試任務(wù)的一個集合,通過配置文件指定,這樣可實現(xiàn)測試任務(wù)的批量執(zhí)行,全程無需人工干預(yù),自動完成所有既定的測試任務(wù),并將所有任務(wù)的結(jié)果整合到一個頁面展示,方便用戶對比分析。
(2)針對每個測試任務(wù)的工作流
一個具體任務(wù)的工作流基本跟上文提到的平臺組件一致,具體如下:
部署階段會再次清理前一次測試的所有臨時數(shù)據(jù),準備好測試用的虛擬機,驗證所有需要用到的軟件是否完備;
調(diào)優(yōu)階段則是根據(jù)本次測試任務(wù)自定義的配置文件對云存儲的相關(guān)參數(shù)進行調(diào)整,并確保云存儲在參數(shù)調(diào)整之后集群狀態(tài)恢復(fù)正常才進入下一個階段,當前調(diào)優(yōu)的支持方式是用戶根據(jù)云存儲的特性自定義調(diào)優(yōu)腳本,支持的腳本類型是PowerShell、Bash和Python;
準備階段主要是為虛擬機分配云存儲,驗證云存儲的可用性;
測試階段會先運行所有的性能監(jiān)控程序,包括控制節(jié)點、負載節(jié)點、虛擬機、云存儲節(jié)點等,然后再根據(jù)選定的測試類型執(zhí)行測試;
分析階段會收集所有的測試數(shù)據(jù)和性能數(shù)據(jù),依靠Python強大的數(shù)據(jù)處理能力,挑選所有輸出數(shù)據(jù)中需要的信息組成特定的格式交給下一步使用;
可視化階段就是利用Matplotlib將生成的數(shù)據(jù)圖表化,并分門別類地組織在一起;
清理回收階段則是釋放所有云存儲、清空數(shù)據(jù)目錄、所有虛擬機關(guān)機。
(3)數(shù)據(jù)流
在整個測試流中,數(shù)據(jù)分為以下兩種:
測試數(shù)據(jù)流:是控制器發(fā)起,負載節(jié)點上的虛擬機生成,通過存儲網(wǎng)絡(luò)到達云存儲集群;
控制數(shù)據(jù)流:是控制器同時向負載節(jié)點和存儲節(jié)點發(fā)起,在測試完成后再分別將數(shù)據(jù)傳給控制器。
4 自動化測試平臺
本文實現(xiàn)的自動化測試平臺基于B/S架構(gòu),用戶通過瀏覽器配置所有測試任務(wù),在瀏覽器查看所有測試結(jié)果,雙擊任意測試任務(wù)即可查看該任務(wù)的詳細報告。測試任務(wù)集示例如圖3所示。
上述任務(wù)集中前兩個是默認配置,中間兩個是經(jīng)過調(diào)優(yōu)的,最后兩個是使用了PCI-E SSD后的結(jié)果。在三大類中選取其中一次測試的IOPS數(shù)據(jù)分別如圖4至圖6所示。
通過圖4和圖5對比可知,調(diào)優(yōu)后雖然IOPS有小幅度降低,但是整體更加趨于平緩,波動很小,這說明存儲性能的穩(wěn)定性更好。
通過圖5和圖6對比可知,PCI-E SSD對于云存儲的加速效果很顯著,有了PCI-E SSD,云存儲的冷熱數(shù)據(jù)分離優(yōu)勢才能得以體現(xiàn)。
5 結(jié)束語
本文通過使用業(yè)界認可的通用、開源、跨平臺的工具和方法,構(gòu)建了一個包含部署、調(diào)優(yōu)、測試、數(shù)據(jù)分析和可視化等全流程的云存儲自動化測試平臺。測試平臺通過設(shè)置任務(wù)集、自定義調(diào)優(yōu)腳本、自動化性能數(shù)據(jù)收集處理和自動輸出性能圖表等特色功能,為用戶判斷云存儲性能提供了強有力的數(shù)據(jù)支撐。實驗數(shù)據(jù)表明,本文構(gòu)建的云存儲自動化測試平臺能夠方便快捷地對比不同云存儲產(chǎn)品的性能,并采用簡單自定義調(diào)優(yōu)參數(shù)來驗證該參數(shù)在實際應(yīng)用中的效果,這樣既為云存儲技術(shù)選型提供了依據(jù),又為后期使用的優(yōu)化提供了參考。
參考文獻:
[1] 陳杰. 大數(shù)據(jù)場景下的云存儲技術(shù)與應(yīng)用[J]. 中興通訊技術(shù), 2012(6): 47-51.
[2] 劉貝,湯斌. 云存儲原理及發(fā)展趨勢[J]. 科技信息, 2011(5): 50-51.
[3] 周可,王樺,李春花. 云存儲技術(shù)及其應(yīng)用[J]. 中興通訊技術(shù), 2010(4): 24-27.
[4] 邱全偉,朱立谷,陽小珊,等. 海量存儲測試平臺監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J]. 計算機研究與發(fā)展, 2011(S1): 68-73.
[5] 劉麗媛. 基于Python的半導(dǎo)體測試軟件系統(tǒng)的設(shè)計與實現(xiàn)[D]. 北京: 北京交通大學(xué), 2013.
[6] GitHub. giampaolo/psutil[EB/OL]. [2017-05-14]. https://github.com/giampaolo/psutil.
[7] 曹東航. 基于Ganglia的云平臺監(jiān)控的研究與實現(xiàn)[D]. 成都: 電子科技大學(xué), 2016.
[8] GitHub. matplotlib/matplotlib[EB/OL]. [2017-05-14]. https://github.com/matplotlib/matplotlib.
[9] 趙夢茹. 移動終端Linux存儲IO性能分析與優(yōu)化[D]. 西安: 西安電子科技大學(xué), 2014.
[10] 鄭慶. 海量規(guī)模下高性能對象存儲服務(wù)技術(shù)的研究[D]. 上海: 上海交通大學(xué), 2013.