通用工具构建云存储自动化测试平台的方案
2017-07-06周林
周林
【摘 要】为了解决云存储性能测试中由于产品种类多、部署时间长、硬件依赖差异大等导致的测试重复动作多、测试项多、调优参数多、消耗时间长等问题,通过采用开源、跨平台的编程语言、框架和测试工具,分析了业界认可的测试工具、性能数据和处理算法,并提出了包含部署、调优、测试、数据分析和可视化等流程的自动化测试平台方案。经过实验验证了自动化测试平台的有效性,并发现了不同云存储产品的优缺点、调优参数的实际作用,为云存储的技术选型提供了有力技术支撑。
【关键词】云存储 自动化测试平台 跨平台
1 引言
云存储作为云计算中的一种基础设施,是云计算不断向前发展的基石,也是一种能够与云计算所需要的PB甚至ZB级别存储相匹配的现代存储[1]。它是一种新的网络存储技术,通过结合集群技术、网络技术、分布式文件系统、特定的軟件技术将大量存储设备构建为一个统一的存储资源池,提供统一的命名空间,作为一个整体对外提供数据存储和访问服务[2-3]。
云存储是未来存储的主要发展方向,市面上已经有很多家相关厂商,技术侧重点各有不同,同时由于底层硬件组合对于云存储的性能也有很大影响,因此在技术选型时对各家云存储进行广泛、有效、跨硬件平台的性能测试就显得尤为重要。云存储的测试通常具有测试消耗时间长、测试项多、调优参数多、部署时间长、硬件依赖差异大等特点。基于此,本文提出设计一种通用的自动化测试平台,它能够一次实施部署后重复使用;批量设置测试任务集,更换硬件平台后复制测试任务集即可实现自动顺序执行;测试任务前支持执行自定义的参数调整脚本;能够跨平台;使用通用开源工具,认可度高且方便复现;能够进行分布式性能监控数据收集[4];能够自动生成图表直观展示性能。
2 常用工具和方法介绍
Python是一种面向对象、解释型的计算机程序语言,可以跨平台运行,具有丰富、强大的标准库和第三方扩展库,功能覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而稳定;Python在设计上坚持了清晰统一的风格,这使得Python成为一门易读、易维护且被大量用户所欢迎的用途广泛的语言[5]。
Psutil[6](Python的系统和进程工具)是一个跨平台的Python库,目前支持Linux、Windows、OSX等平台,主要用于检索正在运行的进程、限制进程占用的资源和对运行的进程进行管理;同时还能够对系统实施监控和分析,如能够获取CPU、内存、磁盘、网络和传感器的信息[7]。
Matplotlib[8]是一个Python的2D绘图库,能够生成出版物质量级别的图形,并输出多种图形格式,也是跨平台的。它可以生成图、直方图、功率谱图、条形图、误差图以及散点图等,都只需要使用几行代码。
FIO是一个非常强大的I/O性能测试工具,是业界认可的一种I/O基准测试工具,也是跨平台的。它支持13种不同类型的I/O引擎以及设置I/O优先级、I/O速率等,可以工作在块设备以及文件两种存储模式下,通过一个简单的配置文件来详细控制测试的所有细节;除了最终结果外,它还支持将测试过程中的性能数据输出到文件,方便查看整个过程中的变化曲线[9]。
3 系统设计和实现
3.1 系统总体设计
本文构建的自动化测试平台主要包含以下三类节点:
(1)控制节点:用来控制整个测试流程,收集、处理、展示测试数据;
(2)负载节点:用来生成负载,直接通过存储网络与云存储连接;
(3)云存储节点:用来构建云存储集群的节点。
云存储自动化测试平台架构如图1所示:
3.2 系统组件设计
本文构建的自动化测试平台包含的组件主要如下:
(1)部署:该组件的任务是在特定平台上生成测试所用的虚拟机,检查并验证测试所需软件是否安装完备;
(2)调优:该组件的任务是针对某类测试对云存储进行参数调整,这也是本平台的特色之一,可以在测试前指定本轮测试需要验证云存储的哪些调整参数;
(3)测试:该组件是测试平台的核心组件,即在所有测试虚拟机加载测试云存储、运行相关性能监控程序(Psutil)、运行测试程序、监控测试程序运行情况等;
(4)分析:该组件的任务是将测试数据、测试期间的性能数据进行处理和分析,形成指定格式的数据;
(5)可视化:该组件的任务是将前面经过处理和分析的数据画图,主要就是使用Matplotlib。
3.3 系统流程设计
本文所构建的自动化测试平台测试流程如图2所示。
下面将从以下三个维度来描述测试平台的测试流:
(1)测试任务集
测试任务集就是所有测试任务的一个集合,通过配置文件指定,这样可实现测试任务的批量执行,全程无需人工干预,自动完成所有既定的测试任务,并将所有任务的结果整合到一个页面展示,方便用户对比分析。
(2)针对每个测试任务的工作流
一个具体任务的工作流基本跟上文提到的平台组件一致,具体如下:
部署阶段会再次清理前一次测试的所有临时数据,准备好测试用的虚拟机,验证所有需要用到的软件是否完备;
调优阶段则是根据本次测试任务自定义的配置文件对云存储的相关参数进行调整,并确保云存储在参数调整之后集群状态恢复正常才进入下一个阶段,当前调优的支持方式是用户根据云存储的特性自定义调优脚本,支持的脚本类型是PowerShell、Bash和Python;
准备阶段主要是为虚拟机分配云存储,验证云存储的可用性;
测试阶段会先运行所有的性能监控程序,包括控制节点、负载节点、虚拟机、云存储节点等,然后再根据选定的测试类型执行测试;
分析阶段会收集所有的测试数据和性能数据,依靠Python强大的数据处理能力,挑选所有输出数据中需要的信息组成特定的格式交给下一步使用;
可视化阶段就是利用Matplotlib将生成的数据图表化,并分门别类地组织在一起;
清理回收阶段则是释放所有云存储、清空数据目录、所有虚拟机关机。
(3)数据流
在整个测试流中,数据分为以下两种:
测试数据流:是控制器发起,负载节点上的虚拟机生成,通过存储網络到达云存储集群;
控制数据流:是控制器同时向负载节点和存储节点发起,在测试完成后再分别将数据传给控制器。
4 自动化测试平台
本文实现的自动化测试平台基于B/S架构,用户通过浏览器配置所有测试任务,在浏览器查看所有测试结果,双击任意测试任务即可查看该任务的详细报告。测试任务集示例如图3所示。
上述任务集中前两个是默认配置,中间两个是经过调优的,最后两个是使用了PCI-E SSD后的结果。在三大类中选取其中一次测试的IOPS数据分别如图4至图6所示。
通过图4和图5对比可知,调优后虽然IOPS有小幅度降低,但是整体更加趋于平缓,波动很小,这说明存储性能的稳定性更好。
通过图5和图6对比可知,PCI-E SSD对于云存储的加速效果很显著,有了PCI-E SSD,云存储的冷热数据分离优势才能得以体现。
5 结束语
本文通过使用业界认可的通用、开源、跨平台的工具和方法,构建了一个包含部署、调优、测试、数据分析和可视化等全流程的云存储自动化测试平台。测试平台通过设置任务集、自定义调优脚本、自动化性能数据收集处理和自动输出性能图表等特色功能,为用户判断云存储性能提供了强有力的数据支撑。实验数据表明,本文构建的云存储自动化测试平台能够方便快捷地对比不同云存储产品的性能,并采用简单自定义调优参数来验证该参数在实际应用中的效果,这样既为云存储技术选型提供了依据,又为后期使用的优化提供了参考。
参考文献:
[1] 陈杰. 大数据场景下的云存储技术与应用[J]. 中兴通讯技术, 2012(6): 47-51.
[2] 刘贝,汤斌. 云存储原理及发展趋势[J]. 科技信息, 2011(5): 50-51.
[3] 周可,王桦,李春花. 云存储技术及其应用[J]. 中兴通讯技术, 2010(4): 24-27.
[4] 邱全伟,朱立谷,阳小珊,等. 海量存储测试平台监控系统的设计与实现[J]. 计算机研究与发展, 2011(S1): 68-73.
[5] 刘丽媛. 基于Python的半导体测试软件系统的设计与实现[D]. 北京: 北京交通大学, 2013.
[6] GitHub. giampaolo/psutil[EB/OL]. [2017-05-14]. https://github.com/giampaolo/psutil.
[7] 曹东航. 基于Ganglia的云平台监控的研究与实现[D]. 成都: 电子科技大学, 2016.
[8] GitHub. matplotlib/matplotlib[EB/OL]. [2017-05-14]. https://github.com/matplotlib/matplotlib.
[9] 赵梦茹. 移动终端Linux存储IO性能分析与优化[D]. 西安: 西安电子科技大学, 2014.
[10] 郑庆. 海量规模下高性能对象存储服务技术的研究[D]. 上海: 上海交通大学, 2013.