1、云测试平台技术架构
(一)云测试平台搭建的背景
笔者目前处于一家国内核心金融机构的测试中心部门,随着公司新业务的开展以及大数据时代的到来,金融软件系统逐步趋向于分布式、高稳定性、高可用的架构。软件测试工作不再像过去只需完成传统的系统测试即可,而是越来越趋于高度自动化、快速反馈、环境真实以及非功能测试。
由于先前我司主要采用 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 云测试平台网络实现方式
2、云测试平台应用
目前云测试平台已经在公司内部上线,目前我们主要为测试中心以及公司其他部门提供以下服务。
(1) 测试虚拟机申请
云测试平台提供基于 kvm 的测试虚拟机,同时我们制作做了符合公司软件系统的模板镜像。如测试人员需要一台部署交易系统的服务器,只需要在平台上选择含有交易系统的镜像以及相应配置即可完成测试环境申请。见图 4。
(点击放大图像)
图4 测试虚拟机申请
同时由于云平台做到了网络虚拟化,每个测试项目都可以拥有自己的私有网络可避免网络冲突,见图5。
(点击放大图像)
图5 隔离的私有网络拓扑
(2) 分布式自动化测试
随着自动化测试用例数不断增加,回归测试的执行时间也不断拉长。目前我司交易系统自动化测试用例数已达到 8000 多个,而且这个数字还在不断增加。
在单台服务器上执行 8000 个用例需要 5 到 6 个小时,这对于被测系统、测试平台以及服务器都产生了交大的压力,测试执行过程往往会发生一些无法预估的异常,如网络丢包、响应超时等情况。同时由于执行时间太长,无法快速反馈测试结果,降低了自动化测试的时效性。为了改变这些问题,我们利用云测试平台实现了分布式自动化测试。
通过将测试用例拆分成不同的模块,将用例分布到不同的云主机上运行,最后通过测试平台将用例执行结果统一收回。分布式自动化测试中我们通过 Jenkins 实现统一调度。见图 6 所示。
(点击放大图像)
图6 交易系统用例分布式执行
3、云测试平台监控
(1)运维监控
对于虚拟机的监控,云平台通过 OpenStack 的 Celiometer 组件监控虚拟机 CPU,内存,I/0 指标。但是对于运维级别的监控,OpenStack 本身没有提供可监控的组件。针对 OpenStack 云组件及其整个运行环境得监控,我们采用了开源企业级监控解决方案 Zabbix。其负责监控云测试平台各个组件、VMM、OS、网络交换机等云基础资源和服务的运行状态,并且根据需要定制大量的触发器。在故障发生时触发报警机制,通过 SMS 或者 EMAIL 等方式通知相关人员。如图 7 所示是对云平台数据库的监控。
(点击放大图像)
图7 Zabbix 对云平台数据库组件监控信息
(2)日志监控
由于云测试平台涉及的组件非常多,每个组件都有自己的日志信息,为了能够方便的查看日志,需要一个中央平台将各个节点上的日志信息收集并解析展现。在云平台的实施过程中,我们采用了业界应用最广的分布式日志框架ELK。其主要由三个开源框架组成,分别为开源搜索引擎ElasticSearch、日志解析组件Logstash、日志展示组件Kibana。此外日志平台还可以运用到如交易系统日志收集以及其他业务系统日志收集。平台架构如图8 所示。
(点击放大图像)
图8 分布式日志收集平台
4、总结
云测试平台是我司测试中心一个重要的基础设施平台,未来我们将在云平台上开展更多的应用,如众测平台、接口适应性测试、全交易链条测试等服务。同时云测试平台也是企业去 IOE 的一项实施,平台全部采用开源框架设计。2016 年我们即将开始云测试平台二期研发项目,届时将有更多的测试服务移植到云平台上,也希望能够为行业提供更多的测试服务。
参考文献
[1]yeasy. 深入理解 Neutron – OpenStack 网络实现[ GitBook ]
感谢魏星对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论