写点什么

基于 OpenStack 的云测试平台

2016 年 5 月 11 日

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 )关注我们。

2016 年 5 月 11 日 17:0110810

评论

发布
暂无评论
发现更多内容

快速掌握并发编程---ArrayBlockingQueue 底层原理和实战 java

田维常

并发编程 LinkedBlockingQueue

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

springboot

GitHub标星75k后被大V联手封杀的超火boot开源文档

周老师

Java 编程 程序员 架构 面试

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

面试官问:你讲讲分布式事务问题的几种方案?

Crud的程序员

分布式

如何将MySQL查询优化到极致?

冰河

MySQL sql 性能优化 查询优化 查询

【原创】Spring Boot集成Mybatis的玩法

田维常

springboot

Spring Boot 集成 Druid 监控数据源

田维常

springboot

【原创】Spring Boot终极篇《上》

田维常

springboot

社会正在惩罚不读书的人!这份程序员进阶书单,值得收藏~

田维常

程序员 电子书

追风人与笃行者:云手机的2020风云录

脑极体

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

springboot

Spring Boot 如何快速实现定时任务

田维常

springboot

高防服务器是什么?

德胜网络-阳

设置Vmware中的Ubuntu为桥接模式

jiangling500

ubuntu vmware 桥接

C++中的vector和Java中的ArrayList的构造函数的区别

jiangling500

Java c++ ArrayList vector

快速掌握并发编程---关于乐观锁、悲观锁、可重入锁

田维常

并发编程

【原创】SpringBoot 这几种配置文件方式,你都用过吗?

田维常

springboot

如何快速构建Spring Boot基础项目?

田维常

spring Boot Starter

【原创】Spring Boot一口气说自动装配与案例

田维常

springboot

【原创】Spring Boot 过滤器、监听器、拦截器的使用

田维常

springboot

Polkadot系列(二)——混合共识详解

QTech

区块链 polkadot

国内外互联网大厂工程师联合推荐:程序员三门课+151个建议

小Q

Java 学习 编程 程序员 开发

【原创】Spring Boot 如何手写starter

田维常

springboot

面试官:Java装箱与拆箱的区别?

田维常

springboot

送你4句口诀 云存储选型不再犯难

京东智联云开发者

云存储

浅析一个较完整的SpringBoot项目

田维常

sping

【原创】Spring Boot终极篇《下》

田维常

springboot

一期二班 - 吴水金 - 第五课作业

吴水金

看完这篇你还能不懂C语言/C++内存管理?

C语言与CPP编程

c c++ C语言 内存管理 编程开发

刷了LeetCode的链表专题,我发现了一个秘密!

Simon郎

Java 链表 面试数据结构与算法

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

基于OpenStack的云测试平台-InfoQ