论文部分内容阅读
摘要:近年来,随着电脑以及汇集相关技术的飞速发展,其应用领域不断扩大,业务逻辑越来越复杂,因此越来越多的汇集应用采用分布式系统的方式进行构建。鉴于分布式系统的并发性、缺乏全局时钟和故障独立性等特征,很难将单模块测试方法应用到基于分布式系统的模块测试中。分布式系统测试过程中主要存在两个问题:第一是難以保证分布式系统测试结果的可靠性;第二是在进行大规模分布式系统的性能测试及其它系统级验证时,存在着搭建分布式系统困难、测试效率低等问题。本文在对上述问题进行深入研究和探讨的基础上,分析了当前主流的测试模型,提出了一种改进的通用测试模型。
关键词:分布式;测试技术;研究应用
随着搜索业务架构和策略越来越复杂,越来越多的搜索模块都是以分布式系统的方式进行构建的,以达到优化模块性能,并提高资源利用率及提高异常容错能力的目的。分布式系统具有很多新的特征,比如并发性、故障独立性、缺乏全局时钟性、异构性、安全性、可扩展性和透明性等。加上近年来分布式系统规模的不断扩大,给分布式系统的测试提出了更高的要求,使得很难将单模块测试方法应用到基于分布式系统的模块测试中。
一、分布式系统测试概述
1.分布式系统。(1)并发性,在分布式系统中,各个组件分布在不同的电脑上,可以并发的进行工作,必要时共享诸如文件之类的资源。(2)缺乏全局,当分布式系统中的组件需要协同工作时,仅仅是通过消息的交换来协调它们之间动作的一致性,因此紧密地协调经常依赖于组件动作发生时对时间达成共识。但是,由于汇集上电脑同步时钟的准确性会受到限制,这也导致了分布于汇集上的组件之间对于各自组件动作发生的时间难以达成共识。(3)故障独立性,所有的电脑系统都可能发生故障,分布式系统故障的发生总是基于汇集的故障,而汇集故障会隔离与之互联的电脑,但这并不意味着故障组件以外的组件会停止运行。也就是说系统的每个组件会单独地出现故障,而其它组件仍然能够正常运行,通常其它正常运行的组件无法检测出是汇集故障还是组件故障。
2.分布式系统运行方式
分布式系统普遍采用层次结构的运行方式,分为四层结构:操作系统、互通平台、编译器及支撑系统以及分布式系统模块。其中操作系统层主要是为分布式系统提供一个运行环境,进行底层支持。考虑到不同的电脑上可能使用不同的操作系统,所以这一层可能是异构的,如机器 A 使用的操作系统是 UNIX,而在机器 B 上使用的则是 Window NT。互通平台层是由各种互通协议构成的,通过使双方都采用 TCP/IP 协议或 PVM等,以达到屏蔽底层操作系统不同的目的,使得分布式系统成为一个各组件相互协作的有机整体。
3.程序测试技术
如何有效的保障程序质量一直是程序产业的重要课题,尤其是在程序应用领域越来越广泛的背景下。在开发过程中难免会出现程序错误,若能较早地发现并排除这些错误,就可以减少因后期排除错误而带来的巨大成本,同时也可以较大地提高程序开发过程中的效率。因此,程序测试在整个程序开发生命周期中是不可或缺的。
二、分布式系统测试存在的问题
1.可靠性测试中存在的问题
(1)针对分布式系统的数据传输异常(丢失、延时、错包等)、连接异常、负载均衡以及调度策略验证等可靠性测试,目前很难站在集群的角度去观测和控制运行的状态困难,植入各种汇集互通异常,也没有很好的机制检查预期效果,导致测试效率和覆盖面很难保证(2)针对异步分布式系统测试中消息时序控制和故障发生时机控制困难,数据构造不一致等问题,没有低成本的解决方案,也没有合适的测试工具进行支撑,难以实现准确的测试控制。
2.性能测试中存在的问题
(1)多个模块项目的测试对稳定后端的依赖性强,但稳定后端资源有限,不能快速响应,项目需要排队,从而影响项目周期;(2)数据量以及连接关系和实际相差较远,导致准确性无法保证;(3)有些情况如模块的极限性能预估,无法准确的测试。通过研究和分析,造成这些问题的主要原因是数据源无法方便获取,实际环境的后端集群庞大,无法获得足够物理资源搭建环境。
三、分布式系统的应用
(1)应用背景
随着搜索业务越来越复杂,模块 A 需要和多个分布式系统模块进行交互,因此,对模块 A
进行测试时,搭建一套真实的环境需要较大的代价,而且搭建环境的规模也很难与真实环境中的规模相比。这也导致了在引入原型系统之前,对模块 A 进行性能测试的过程中,无法完整地构造整套真实环境进行数据的收集和分析,使用的测试方法是连接有限的后端环境进行新旧版本的横向性能对比,这样测试出来的性能数据并不能准确反映真实环境中实际的性能情况。基于以上背景,有必要引入原型系统来解决测试过程中分布式系统环境搭建困难以及数据源获取困难等问题,达到改进模块 A 测试的目的。
(2)应用效果
原型系统是为了支持通用测试模型设计和开发的,与具体业务无关,因此模块 A 引入原型系统进行可靠性测试和性能测试的改进,必然会带来一定的引入成本。下面首先分析引入原型系统带来的成本,然后从性能测试改进和可靠性改进两个层面介绍引入原型系统给模块 A 带来的效果收益。
(3)引入原型系统成本分析
针对模块 A,引入原型系统进行测试改进主要存在两方面成本:业务适配器PDU_Reader
接口实现和根据业务可靠性需求注入汇集异常。在业务适配器 PDU_Reader 接口实现方面,需要按照模块 A 的互通协议对该适配器的构造函数、parse_data 接口以及 get_sign 接口进行实现。由于原型系统的协议无关性,只需把互通协议头长度当做参数传给构造函数,对互通协议不需要进行解析。因此,PDU_Reader 接口实现成本较低,修改相应的配置文件即可使用,甚至在有些模块的应用中,采用直接录制数据并顺序回放数据的方式,可以做到零开发成本。
结束语:
分布式系统测试的关键技术,即链路控制技术,通过接管模块间互通链路,为后续数据录制回放、汇集控制等奠定了基础;通过对分布式集群模拟技术的研究,提出了一种数据录制回放的方法,解决了搭建分布式系统环境困难和数据源获取困难等问题;通过对互通异常注入技术的研究,为分布式系统可靠性测试提供了一种新的解决方案;通过对高性能汇集库 libevent 和多线程技术的研究,实现了数据源高性能的获取.
参考文献:
[1]何腾蛟. 分布式系统测试模型与框架的研究与应用[D].电子科技大学,2009.
关键词:分布式;测试技术;研究应用
随着搜索业务架构和策略越来越复杂,越来越多的搜索模块都是以分布式系统的方式进行构建的,以达到优化模块性能,并提高资源利用率及提高异常容错能力的目的。分布式系统具有很多新的特征,比如并发性、故障独立性、缺乏全局时钟性、异构性、安全性、可扩展性和透明性等。加上近年来分布式系统规模的不断扩大,给分布式系统的测试提出了更高的要求,使得很难将单模块测试方法应用到基于分布式系统的模块测试中。
一、分布式系统测试概述
1.分布式系统。(1)并发性,在分布式系统中,各个组件分布在不同的电脑上,可以并发的进行工作,必要时共享诸如文件之类的资源。(2)缺乏全局,当分布式系统中的组件需要协同工作时,仅仅是通过消息的交换来协调它们之间动作的一致性,因此紧密地协调经常依赖于组件动作发生时对时间达成共识。但是,由于汇集上电脑同步时钟的准确性会受到限制,这也导致了分布于汇集上的组件之间对于各自组件动作发生的时间难以达成共识。(3)故障独立性,所有的电脑系统都可能发生故障,分布式系统故障的发生总是基于汇集的故障,而汇集故障会隔离与之互联的电脑,但这并不意味着故障组件以外的组件会停止运行。也就是说系统的每个组件会单独地出现故障,而其它组件仍然能够正常运行,通常其它正常运行的组件无法检测出是汇集故障还是组件故障。
2.分布式系统运行方式
分布式系统普遍采用层次结构的运行方式,分为四层结构:操作系统、互通平台、编译器及支撑系统以及分布式系统模块。其中操作系统层主要是为分布式系统提供一个运行环境,进行底层支持。考虑到不同的电脑上可能使用不同的操作系统,所以这一层可能是异构的,如机器 A 使用的操作系统是 UNIX,而在机器 B 上使用的则是 Window NT。互通平台层是由各种互通协议构成的,通过使双方都采用 TCP/IP 协议或 PVM等,以达到屏蔽底层操作系统不同的目的,使得分布式系统成为一个各组件相互协作的有机整体。
3.程序测试技术
如何有效的保障程序质量一直是程序产业的重要课题,尤其是在程序应用领域越来越广泛的背景下。在开发过程中难免会出现程序错误,若能较早地发现并排除这些错误,就可以减少因后期排除错误而带来的巨大成本,同时也可以较大地提高程序开发过程中的效率。因此,程序测试在整个程序开发生命周期中是不可或缺的。
二、分布式系统测试存在的问题
1.可靠性测试中存在的问题
(1)针对分布式系统的数据传输异常(丢失、延时、错包等)、连接异常、负载均衡以及调度策略验证等可靠性测试,目前很难站在集群的角度去观测和控制运行的状态困难,植入各种汇集互通异常,也没有很好的机制检查预期效果,导致测试效率和覆盖面很难保证(2)针对异步分布式系统测试中消息时序控制和故障发生时机控制困难,数据构造不一致等问题,没有低成本的解决方案,也没有合适的测试工具进行支撑,难以实现准确的测试控制。
2.性能测试中存在的问题
(1)多个模块项目的测试对稳定后端的依赖性强,但稳定后端资源有限,不能快速响应,项目需要排队,从而影响项目周期;(2)数据量以及连接关系和实际相差较远,导致准确性无法保证;(3)有些情况如模块的极限性能预估,无法准确的测试。通过研究和分析,造成这些问题的主要原因是数据源无法方便获取,实际环境的后端集群庞大,无法获得足够物理资源搭建环境。
三、分布式系统的应用
(1)应用背景
随着搜索业务越来越复杂,模块 A 需要和多个分布式系统模块进行交互,因此,对模块 A
进行测试时,搭建一套真实的环境需要较大的代价,而且搭建环境的规模也很难与真实环境中的规模相比。这也导致了在引入原型系统之前,对模块 A 进行性能测试的过程中,无法完整地构造整套真实环境进行数据的收集和分析,使用的测试方法是连接有限的后端环境进行新旧版本的横向性能对比,这样测试出来的性能数据并不能准确反映真实环境中实际的性能情况。基于以上背景,有必要引入原型系统来解决测试过程中分布式系统环境搭建困难以及数据源获取困难等问题,达到改进模块 A 测试的目的。
(2)应用效果
原型系统是为了支持通用测试模型设计和开发的,与具体业务无关,因此模块 A 引入原型系统进行可靠性测试和性能测试的改进,必然会带来一定的引入成本。下面首先分析引入原型系统带来的成本,然后从性能测试改进和可靠性改进两个层面介绍引入原型系统给模块 A 带来的效果收益。
(3)引入原型系统成本分析
针对模块 A,引入原型系统进行测试改进主要存在两方面成本:业务适配器PDU_Reader
接口实现和根据业务可靠性需求注入汇集异常。在业务适配器 PDU_Reader 接口实现方面,需要按照模块 A 的互通协议对该适配器的构造函数、parse_data 接口以及 get_sign 接口进行实现。由于原型系统的协议无关性,只需把互通协议头长度当做参数传给构造函数,对互通协议不需要进行解析。因此,PDU_Reader 接口实现成本较低,修改相应的配置文件即可使用,甚至在有些模块的应用中,采用直接录制数据并顺序回放数据的方式,可以做到零开发成本。
结束语:
分布式系统测试的关键技术,即链路控制技术,通过接管模块间互通链路,为后续数据录制回放、汇集控制等奠定了基础;通过对分布式集群模拟技术的研究,提出了一种数据录制回放的方法,解决了搭建分布式系统环境困难和数据源获取困难等问题;通过对互通异常注入技术的研究,为分布式系统可靠性测试提供了一种新的解决方案;通过对高性能汇集库 libevent 和多线程技术的研究,实现了数据源高性能的获取.
参考文献:
[1]何腾蛟. 分布式系统测试模型与框架的研究与应用[D].电子科技大学,2009.