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