分布式系统的分布式系统的测试

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-06

在测试执行过程中,对测试结果的分析是一个需要进行深入思考的重点问题。分布式系统测试的重点在于对后端服务器集群的测试,而判定系统中是否存在Bug则是我们需要解决的重要问题。那么应该如何确定是否存在Bug呢?

对于测试结果的分析,我们通常观察下面几种情况。

观察前端应用的返回结果。这里需要分两种情况来考虑:第一,按照前端应用业务功能点及流程进行操作,观察返回结果是否符合业务方的需求预期;第二,操作后端的服务器(通常是重启、宕机、断网等操作),观察前端应用的返回结果是否符合系统的设计需求。

分析服务器日志。在功能测试过程中,当我们在启动服务器的时候,需要将日志级别定义为Debug级别(最低级别)。这样做的主要目的是为了能便于测试工程师来分析日志和定位问题。为了能更好地定位问题,常常需要在服务器程序代码中进行日志打桩,把程序中的一些重要数据通过日志的方式展现出来。通常情况下,我们需要对日志的格式进行约定,在日志行中增加一些关键字来进行分类,这将便于测试工程师进行日志分析,也有利于开展分布式系统的自动化测试。另外,值得注意的是,我们尽可能地将打桩代码放在Debug代码中,避免影响系统代码,引入新问题。

分析操作系统的一些重要信息。我们测试的分布式系统绝大多数是基于Linux操作系统开发的,在测试的过程中,除了详细分析程序日志以外,还需要对操作系统的一些重要数据信息进行分析,从而来诊断服务器程序是否存在异常。以Linux操作系统为例,我们常常会使用top命令、netstat命令及sar命令来查看操作系统的一些数据信息。例如,可以通过netstat命令检查服务器程序是否正确地监听了指定的端口等。

借助其他分析工具。例如,如何判断服务器程序是否产生了内存泄漏?通常需要借助于内存检测工具来进行分析。在Linux环境下,我们常用Valgrind来进行内存检测。这是一款非常好用、功能强大的分析工具,可以帮助测试或者开发工程师快速发现很多隐藏的程序Bug,尤其是在内存检测方面(同时它还具有很多其他优秀的功能,读者可以自己查看官网中的使用手册)。对于分布式系统而言,压力测试和性能测试非常重要。在进行压力测试和性能测试的时候,可能会碰到下面一些难点。

数据准备。如何准备海量的测试数据并保证模拟数据的真实性?以一个分布式的文件系统为例,预先存入100GB的数据还是存入100TB的数据、存入的文件是大小基本一致差别不大还是各不相同甚至差异很大(例如,从几十字节至几十兆字节不等),这些因素对于分布式系统的性能影响是有很大差异的。另外,如果需要预先存入100TB的数据,若按每秒写入100MB数据来计算,写入100TB数据需要100×1024×1024/100=1048576秒=291.27小时=12天。我们是否能忍受这么长时间的数据准备工作?为了解决这样的问题,我们需要对系统架构设计进行深入分析,设计好测试场景,并提前进行测试用例的设计,以尽早开始准备测试数据。

性能或压力测试工具。通常来说,分布式系统的测试需要开发一些测试工具来满足性能测试的需求。如果可以的话,建议这样的测试工具最好由测试工程师自己来实现,因为测试工程师更清楚自己的测试需求。当需要自己开发测试工具的时候,有两个关键问题需要重点关注:第一,一些关键数据的收集方式与计算将成为性能测试工具的关键,例如,TPS(每秒请求数)、Throughput(吞吐量)计算的准确性;第二,要保证性能测试工具的性能,如果工具本身的性能不好,将无法给予分布式系统足够强大的压力来进行测试。另外,当考虑到多并发(例如有10万客户端同时并发连接)时,如果性能测试工具在一台测试机器上只能运行50个或者更少的话,那么需要的测试机器数量也将会很庞大(例如2000台测试机),这个成本或许是许多公司不能承受的。因此,性能测试工具本身的性能必须要足够好才能满足需求、降低测试成本。自动化测试是测试行业发展的必然趋势,对于分布式系统测试而言也不例外。在实施分布式系统自动化测试的过程中,我们可能会碰到下面两个难点问题。

涉及平台多且硬件杂,测试流程控制困难。在实施自动化测试的过程中,测试脚本需要控制的操作系统和应用程序很多,而且存在跨平台的特性,同时还有可能需要控制一些网络设备。因此,选择一个优秀的自动化测试框架成为了非常重要的工作之一。以我们的实践经验来看,STAF是一个不错的选择,它的平台(Windows及Linux各版本)支持及开发语言的支持都很全面。

测试结果验证复杂。对于分布式系统的自动化测试来说,我们需要通过测试脚本来收集各种测试结果数据以验证测试结果的正确性。在实施自动化测试的过程中,我们可以将测试结果数据收集部分模块化,通过各子模块来检测各项数据是否正确。例如,我们会设计一个日志分析模块,主要负责从服务器应用程序的日志中收集相应数据进行对比验证(本文前面提到的在打桩日志中增加关键字部分就显得格外重要)。

随着互联网的发展,大型分布式系统也越来越多、越来越复杂、越来越重要。如何有效地保证大型分布式系统7×24小时全天候持续稳定地运行也就成为了一个重要课题。



  • 分布式系统的分布式系统的测试_常见的分布式系统
    答:通常情况下,我们需要对日志的格式进行约定,在日志行中增加一些关键字来进行分类,这将便于测试工程师进行日志分析,也有利于开展分布式系统的自动化测试。另外,值得注意的是,我们尽可能地将打桩代码放在Debug代码中,避免影响系统代码,引入新问题。分析操作系统的一些重要信息。我们测试的分布式系统绝大多数...
  • 【分布式网络阅卷系统的设计与实施】 常见的分布式系统
    答:图像服务器实现切分试题图像的分发,以网络资源及磁盘读写占用为主,考虑数据的安全性及系统的稳定性,本系统采用大容量光存储系统作为存储介质。 2.大容量存储系统 大容量存储系统用于存储扫描试卷的切分图片,每个科目2万考生的平均数据量为3GB,本系统采用Raid 5方式组成4TB的存储系统,实现阅卷平台的稳定运行以满足数...
  • 什么是分布式系统?
    答:分布式系统是建立在网络上的软件系统。 处理协助任务,然后整合结果。在分布式系统中,一组独立的计算机向用户呈现一个统一的整体,就像一个系统一样。系统具有多种通用的物理和逻辑资源,可以动态分配任务,分散的物理和逻辑资源可以通过计算机网络实现信息交换。系统中有一个分布式操作系统,以全局方式管理计算...
  • 分布式系统一致性高可用的解决方案总结
    答:首先明确一点,在分布式集群中,不可能采用人工手动备份,一定是系统程序按照一定的规则自动备份,就好像我将AB连在一起,写个程序,让A电脑自动把文章同步到B电脑。数据备份的方式分为两种: 这里以redis-cluster和zookeeper举例。 在redis-cluster中,当一台新的slave节点加入时,会出发数据同步,需要将主节点的数据同步到从...
  • 451定额分布式天馈线系统调测如何计算
    答:451定额分布式天馈线系统调测计算步骤如下:1、测试接收机和放大器的性能。需要使用信号源和功率计等测试设备,对接收机和放大器进行性能测试。测试时需要考虑信号源的输出功率和频率,以确保接收机和放大器的灵敏度和增益符合要求。2、测试天线的性能。需要使用测试仪器对天线进行测试,包括天线的增益、方向...
  • DCCS2009分布式测试系统的理念是什么?
    答:分布式测控系统采用就近测量,采用前端数字化技术,变个性的模拟量传输为共性的数字化传输。所有子站的传输均采用标准的数字通讯电缆。采用总线技术,所有通讯电缆可在任意点互联。简化了现场线路,降低了布线要求。总线方式加强了系统的可拓展性。u集中 管理 与专业仪表相比,分布式测试系统侧重于通过通讯将...
  • 请教一个关于分布式系统的问题
    答:近。分时是迈向分布式系统的第一步:用户可以在不同的地点共享并访问资源。8 0年代是个人计算的1 0年:人们有了自己个人专用的计算机PC。到了9 0年代,基于微处理器的系统所提供的出色的性能/价格比和网络技术的稳步提高,分布式系统开始走进历史舞台。 分布式系统发展的主要推动因素有:1、固有的分布式应用。分布式系统...
  • 保证分布式系统数据一致性的6种方案
    答:分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 xts-client 和 xts-server 两部分,前者是一个嵌入客户端应用的 JAR 包,主要负责事务数据的写入和处理;后者是一个独立的系统,主要负责异常事务的恢复。 核心特性 传统...
  • 分布式系统的分类
    答:分布式系统根据其设计目标和应用场景可以分为以下几类:1. 分布式文件系统:主要用于大规模数据存储,如Google File System (GFS)、Hadoop分布式文件系统(HDFS)等。2. 分布式数据库系统:用于大规模数据处理和查询,如Google BigTable、Amazon Dynamo等。3. 负载均衡系统:用于平衡系统中各服务器的负载,如...
  • 分布式什么意思
    答:分布式是指将一个系统或任务分散到多个计算节点上,协同完成某个目标的过程或技术。以下是详细的解释:一、定义及概念简述 分布式技术是一种将系统任务分散到多个计算机或其他计算节点上执行的方法。这些计算节点可以位于同一物理位置,也可以分布在不同地域。通过分布式技术,可以并行处理数据、共享资源、提高...