笔者目前处于一家国内核心金融机构的测试中心部门,随着公司新业务的开展以及大数据时代的到来,金融软件系统逐步趋向于分布式、高稳定性、高可用的架构。软件测试工作不再像过去只需完成传统的系统测试即可,而是越来越趋于高度自动化、快速反馈、环境真实以及非功能测试。
由于先前我司主要采用VMware为公司提供虚拟化软件服务,随着虚拟机数量的提升以及部门的扩张,企业内部需要一个私有云环境来更好的规划计算、存储、网络等资源。通过对比VMware和OpenStack,我们决定采用OpenStack来搭建该私有云平台。
云测试平台主要有两个目标:1)为开发测试提供虚拟资源弹性管理。2)集成现有测试工具提供云端的测试服务。根据这两个目标我们进行了软硬件环境的技术选型。
1. 云测试平台软硬件环境
1) 硬件设备
考虑到云测试平台一期的服务容量,硬件设备如下表1所示
指标 | 数量 | 备注 | |
主机设备 | DL580 G8服务器,每台CPU:4*15C;内存:512G、硬盘:5*900G。 | 2 | 1)CPU必须支持VT技术。 2)为了提高系统的稳定性,我们用4块硬盘做了raid |
网络设备 | 48口千兆三层交换机 | 3 | 提供内外网连接 |
防火墙 | 吞吐量2048Mbps,4个千兆端口 | 1 | 隔离内外网设备,负责与其他网络互联 |
表1 云测试平台硬件
2) 软件系统
云测试平台是一套全开源系统架构,我们所用到的框架全部采用开源软件。如表2所示。
软件名称 | 功能 | 版本 | 备注 |
OpenStack | 为云测试平台提供基础设施服务。 | Liberty | 目前社区最新版本为M版,我们决定落后社区一个版本,以保证稳定性。 |
Zabbix | 为云测试平台提供系统级监控。 | 2.4.5 | 弥补OpenStack Celimeter不能对硬件资源进行监控。 |
ELK | 日志分析平台 | 2.x | ELK由ElasticSearch、Logstash、Kibana以及Nigix组成,分布式日志收集平台。 |
表2 云测试平台软件系统
2. 云测试平台部署方案
云测试平台一期主要采用两节点部署方案。其中一个节点将担任管理、网络、计算和存储的功能。另外一个节点将充当网络双活以及计算和存储的功能。主要部署结构见图1所示。
(点击放大图像)
图1 云测试平台双节点部署方案
3. 云测试平台逻辑架构
由于OpenStack在云测试平台中将提供基础设施服务。其本身由多个组件构成,企业在实施OpenStack的过程中可以根据自身业务需求选择相应的组件。图2为云测试平台的逻辑架构图。
在IaaS层,我们主要选择了NOVA作为计算资源管理功能、Neutron用于网络虚拟化功能、Cinder用于块存储功能。通过这3个核心组件将硬件的计算资源、网络资源以及存储资源池化。
在PaaS层,OpenStack的Celimeter组件提供VMM级别的资源监控,为了弥补其无法监控底层硬件资源,我们利用Zabbix作为企业级系统资源监控。同时在OpenStack组件升级、通知服务等方面我们也做了一些二次开发。
在TaaS层,主要提供测试服务,我们通过OpenStack的Heat组件,调用其API将日常用到的测试工具与其集成,如测试管理工具TestLink、CI工具Jenkins、以及自动化测试工具Fitnesse。
用户在使用云测试平台的时候可以通过三种方式,访问OpenStack的Horizon组件提供的Dashboard、命令行以及API的方式。二期我们也会定制开发自己的portal界面以提高用户体验和易用性。
(点击放大图像)
图2 云测试平台逻辑架构
4. 云测试平台网络实现方案
网络实现方案是云测试平台的核心技术也是难点之一,在这里简单介绍一下云测试平台的网络实现方式。OpenStack支持4种网络虚拟化实现方案,分别为FlatDHCP、GRE、VLAN、VXLAN。云测试平台主要采用了OVS的VXLAN协议。
VXLAN是将以太网报文封装在UDP传输层上的一种隧道转发模式,它采用24位比特标识二层网络分段。使用VXLAN可以克服VLAN只有4000个可用的VLAN ID的局限。当然对于小型企业私有云VLAN也能满足网络需求。
云测试平台的网络实现方式主要如图3所示。其主要描述了计算节点的上的虚拟机是如何与外网完成通信的。计算节点上主要包括两个网桥:集成网桥br-int和隧道网桥br-tun。其中集成网桥br-int规则比较简单,作为一个正常的二层交换机使用。br-tun作为虚拟网桥,规则稍微复杂。要将内部网包进行合理甄别,将内部带着对应vlan tag网包,从正确的tunnel扔出去;将外部带着正确tunnel号过来的网包改为对应的内部vlan tag。
网络节点负责网络服务的任务,包括DHCP、路由和高级网络服务等。一般包括三个网桥:br-tun、br-int和br-ex。其中br-int和br-tun与计算节点上的两个网桥功能类似。br-ex主要有两个核心接口,一个是挂载的物理接口,如eth0,网包将从这个接口发送到外部网络上。另外是qg-xxx这样的接口,是连接到router服务的网络名字空间,里面绑定一个路由器的外部IP,作为NAT时候的地址,另外,网络中的floatingIP也放在这个网络名字空间中。
(点击放大图像)
图3 云测试平台网络实现方式
目前云测试平台已经在公司内部上线,目前我们主要为测试中心以及公司其他部门提供以下服务。
云测试平台提供基于kvm的测试虚拟机,同时我们制作做了符合公司软件系统的模板镜像。如测试人员需要一台部署交易系统的服务器,只需要在平台上选择含有交易系统的镜像以及相应配置即可完成测试环境申请。见图4。
(点击放大图像)
图4 测试虚拟机申请
同时由于云平台做到了网络虚拟化,每个测试项目都可以拥有自己的私有网络可避免网络冲突,见图5。
(点击放大图像)
图5 隔离的私有网络拓扑
随着自动化测试用例数不断增加,回归测试的执行时间也不断拉长。目前我司交易系统自动化测试用例数已达到8000多个,而且这个数字还在不断增加。
在单台服务器上执行8000个用例需要5到6个小时,这对于被测系统、测试平台以及服务器都产生了交大的压力,测试执行过程往往会发生一些无法预估的异常,如网络丢包、响应超时等情况。同时由于执行时间太长,无法快速反馈测试结果,降低了自动化测试的时效性。为了改变这些问题,我们利用云测试平台实现了分布式自动化测试。
通过将测试用例拆分成不同的模块,将用例分布到不同的云主机上运行,最后通过测试平台将用例执行结果统一收回。分布式自动化测试中我们通过Jenkins实现统一调度。见图6所示。
(点击放大图像)
图6 交易系统用例分布式执行
对于虚拟机的监控,云平台通过OpenStack的Celiometer组件监控虚拟机CPU,内存,I/0指标。但是对于运维级别的监控,OpenStack本身没有提供可监控的组件。针对OpenStack云组件及其整个运行环境得监控,我们采用了开源企业级监控解决方案Zabbix。其负责监控云测试平台各个组件、VMM、OS、网络交换机等云基础资源和服务的运行状态,并且根据需要定制大量的触发器。在故障发生时触发报警机制,通过SMS或者EMAIL等方式通知相关人员。如图7所示是对云平台数据库的监控。
(点击放大图像)
图7 Zabbix对云平台数据库组件监控信息
由于云测试平台涉及的组件非常多,每个组件都有自己的日志信息,为了能够方便的查看日志,需要一个中央平台将各个节点上的日志信息收集并解析展现。在云平台的实施过程中,我们采用了业界应用最广的分布式日志框架ELK。其主要由三个开源框架组成,分别为开源搜索引擎ElasticSearch、日志解析组件Logstash、日志展示组件Kibana。此外日志平台还可以运用到如交易系统日志收集以及其他业务系统日志收集。平台架构如图8所示。
(点击放大图像)
图8 分布式日志收集平台
云测试平台是我司测试中心一个重要的基础设施平台,未来我们将在云平台上开展更多的应用,如众测平台、接口适应性测试、全交易链条测试等服务。同时云测试平台也是企业去IOE的一项实施,平台全部采用开源框架设计。2016年我们即将开始云测试平台二期研发项目,届时将有更多的测试服务移植到云平台上,也希望能够为行业提供更多的测试服务。
[1]yeasy.深入理解Neutron – OpenStack网络实现GitBook
感谢魏星对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。