杨 旭
(中央宣传部电影数字节目管理中心,北京 100866)
在计算机化、全球互联化发展的今天,人们足不出户可以更直接的感受视频、电影、科技、购物的快感,享受互联网带来的红利。但移动互联网时代的到来也带来了新的挑战,首先就是用户覆盖面的不断扩大与用户访问量的突增。本文基于农村电影数字节目交易平台,以优化该平台的服务负载性能为目的,采用一种基于Tsung分布式负载集群测试方式对该平台的web 应用服务性能进行负载测试。该应用的实现是优化升级web应用服务器负载性能的主要依据之一,通过负载压力测试可以检测出系统的运行瓶颈,也为系统在生产环境下运行做好评估和预案,对业务系统的风险防控有重要作用。
平台系统的测试主要包括平台的功能性测试、非功能性测试。功能性测试主要在单元测试、集成测试阶段进行;非功能性测试在集成阶段测试,主要包括有负载测试、安全阶段测试、容量结果测试、兼容性性能测试等测试过程。
负载测试(又称压力测试),是对web平台整体执行能力的一种测试,其主要是需要在大量数量、高频率等方式或其突发资源使用率的方式下进行的负载测试,以找出web应用服务器对异常情况的处理能力及抵抗能力的瓶颈。
异常情况,是指模拟用户访问数量瞬间达到访问峰值,CPU 占用、内存消耗瞬间增加,处理大量数据,长时间运行等情况。压力测试是迫使web应用服务在这种异常情况下运行,但负载测试不可能模拟所有业务流程,所以要确定关键的业务流程,结合业务流程及需求编写测试用例。
负载测试的加载方式分为一次性加载、递增加载、高低突变加载、随机加载四种方式。借助递增加载和一次性加载方式可以容易获得web系统的性能拐点,即性能瓶颈点。
本文采用了Tsung软件模拟大量的用户数据输入量,以检测系统web应用服务器处理大量用户访问的处理能力及性能瓶颈。本文结合本平台的实际应用需求,采用了一次性加载和递增加载结合的方式进行压力测试。在系统测试过程中引入了分布式集群压力测试方案,即利用负载均衡把同一个业务分布在多个服务器上,把模拟客户端业务分拆成多个子业务分布式部署在不同的测试服务器上。
分布式模式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。就比如现在主流平台爱奇艺、淘宝、新浪微博等访问量大的互联网平台,都采用了集群模式,前面放一个均衡服务器,后面几台服务器完成同一业务,如果有业务访问的时候,监测服务器的负载,平衡每台负载量,即使有一台服务器宕机,其他服务器也能补充上来。因此本文待测web服务端采用集群部署模式,压力测试采用分布式模式实现。
衡量一个软件系统的常见性能指标有:吞吐率、响应时间、资源占用率、并发用户数等指标值。
(1)吞吐率:软件web服务器并发处理能力的量化描述,单位是请求数/秒 (即reqs/s),指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。吞吐率和并发用户数相关,不同的并发用户数下,吞吐率一般是不同的,这个数值表示当前机器的整体性能,值越大越好。
(2)最大并发用户数:表示会话 (Session)开始且尚未结束,并且已建立连接的最大用户数。该指标反映了系统在高并发用户下的处理能力。
(3)会话 (Session)响应时间:会话响应时间是用户体验系统最直观的感受,表示每个用户会话持续时间,是服务器响应时间、网络响应时间和客户端响应时间的总和。
(4)服务器资源占用率:包括常见的机器的CPU 使用率、内存使用率、磁盘占用率、网络I/O占用率等。
这个是在简单 (单一访问链接)的情况下,可通过日吞吐量指标来评价一个系统的性能,吞吐量越大系统性能越稳定,具体公式如下:
日吞吐量=吞吐率×24×3600
当系统随着用户的并发数的增加,平均响应时间也在增加,每秒处理的请求也就增加,用户等待请求的时间也会变长,会造成吞吐率的下降,因此一个系统的吞吐量要综合考虑用户并发、吞吐率、响应时间、硬件服务器的资源使用等综合因素。
随着越来越多的用户开始使用该平台,为满足平台高访问量的需求,需要选用支持分布式、高并发的压力测试软件。目前常用的压力测试软件有Load Runner、Jmeter、Tsung等软件.
Tsung是基于Erlang开发的,是开源的、支持多协议、支持分布式的负载测试软件。Jmeter的架构和Loadrunner原理一样,都是通过中间代理,监控和收集并发客户端发出的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈结果的一个过程。Jmeter安装简单,和Tsung一样都属于开源软件,但是没有IP欺骗功能,不符合本文采用的模拟真实用户访问的需求。Load Runner虽然有强大的结果分析能力和UI界面,但是属于付费、重量级软件,在自由度上有限,扩展性较差、不够灵活。
下面对Tsung和Jmeter两款开源的测试软件进行比较,如表1所示。
表1 Tsung和Jmeter比较表
由以上比较得出,Tsung和Jmeter均属于轻量级,Jmeter支持Windows,而Tsung在支持操作系统上,包括Windows和Linux下Ubuntu、Cent OS不同Linux的版本。在脚本录制方面,Jmeter 用户改写复杂,而Tsung更灵活,手工修改录制脚本更简洁方便,也支持协议多样,满足对现有平台的web应用服务器的测试需求。
随着百姓对农村公益电影的关注度越来越高,平台业务量需求将不断地增加。本文以提高平台负载性能、支持大量用户访问的需求为目的,利用压力测试软件对平台系统进行负载实验,根据实验测试结果有针对性的指导平台进行优化升级。
首先建立测试环境,配置压力测试机器为4台装有Cent OS7操作系统的服务器,内存128GB,分别安装Tsung1.7.0 软件,录制测试脚本并根据需求修改运行脚本。分别采用单点和分布式两种测试方案,利用单个客户端Client和多个客户端Clients分布式两种方式对web应用服务器进行负载压力测试。
单点测试策略:用单点Client对单台web应用服务器进行负载测试,检查该服务器的性能,考察当前软硬件环境下系统所能承受的最大负载瓶颈。
分布式测试策略:优化调整Cent OS 操作系统的参数,并调整增加负载均衡配置,配置Tsung分布式方案。
2.1.1测试用例选择
本文模拟平台上业务用户的使用习惯和业务操作频率,模拟院线用户、放映队用户、普通用户等用户的常规操作的使用情况,观察在Tsung负载压力下平台的web服务器端系统的负载值,具体方式分两个阶段测试:第一阶段采用一次性加压的测试方式并有10分钟处理间隔时间;第二阶段每隔10秒钟逐步加载压力,详细信息如表2所示。
表2 测试用例表
100 4mn21sec 795 Max:98req/s 200 3mn19sec 1260 Max:125req/s 300 6mn11sec 1200 Max:70req/s 400 9mn56sec 1569 Max:99req/s 500 11min57sec 2082 Max:79req/s 1000——--
2.1.2用例配置
根据测试计划配置Tsung 的参数,配置测试tsung.xml脚本文件,以并发50用户为例:arrivalrate="50"unit="second",即以秒为单位,每秒模拟并发50个用户数,如此依次配置模拟产生的并发数。
2.1.3测试结果
测试结果以报表方式提供,以下分别为每秒并发25个、100个、500个的吞吐率的测试结果为示例,如图1、2、3所示。
图1 并发数为25每秒结果图
图2 并发100每秒结果图
图3 并发500每秒结果图
本轮测试主要目的是找出单台web服务器的负载瓶颈,并加以改进。从单点测试结果可以看出,在测试过程中出现未达到瓶颈、达到瓶颈、超过瓶颈三种情况:
(1)随着并发用户数的增加,单台压力测试并发数在200以下时,系统吞吐量会逐渐增加,此时响应时间会较快,此时系统未达到瓶颈。
(2)当单台压力测试数超500并发后,随着并发用户数的增加,系统吞吐量不再会增加,此时响应时间会开始变长,首页页面运行缓慢,CPU 飙升100%以上或更高,吞吐率在200~300r/sec之间,此时系统达到瓶颈。
(3)最大并发用户数在1000 之后很难继续增加,系统已超过瓶颈,随着并发用户数的增加,系统吞吐量出现下降,此时响应时间会逐渐拉长,甚至无响应。此时监测网卡带宽如图4所示,网卡带宽超过500M,图片带宽占用大,经过对结果分析对比,从机器性能、系统吞吐量等性能出发,当单机用户模拟用户数达到1000并发量时单机系统达到瓶颈。
图4 网卡带宽监测图
本文为解决此瓶颈提出改进方案并做分布式负载测试策略,主要从以下几个方面改进:(1)调整本机参数,修改机器的limits参数,网络Net参数等基本参数;(2)增加负载均衡配置,可增加多台web应用服务器,如可配置Nginx软件均衡或硬件均衡等措施;(3)调整网络带宽,如从图片压缩算法、分布式存储等算法方面来减少带宽压力。
随着测试的进行,本文在单点测试中发现,当压力测试机器调整操作系统的机器参数后,系统模拟并发数达到1000之后系统出现明显瓶颈,因此单点测试方式存在其瓶颈点。
分布式测试策略可以让多台机器并发测试,单台在理论状态下由于硬件限制最多模拟不超过65535个用户数,而要模拟超百万的用户数则需要用分布式策略解决。
2.2.1部署分布式压力测试环境
分布式测试策略由4台web应用服务器组成的集群、1台负载均衡服务器、4 台Tsung客户端组成,本文根据项目需求配置四台Clients,组成分布式Tsung压测服务端。表3为Tsung测试环境集群配置表,图5为Tsung分布式压力测试及集群架构图。
表3 Tsung测试环境集群配置表
图5 Tsung分布式压力测试及集群架构图
2.2.2负载均衡配置
负载均衡根据负载均衡算法将客户端请求分发给后端服务器,Nginx 是一款广泛应用的高性能Http服务器,能满足上万级别的请求调度,有多种负载均衡模块算法可配置。Nginx目前提供的负载均衡模块主要有:加权轮询模块 (round_robin),可均分请求,是默认的Http 负载均衡算法,集成在框架中;IP 哈希模块 (ip_hash),可保持会话;最少连接数模块(least_conn),可均分连接。
表4 Nginx均衡算法模块比较表
基于上述各个负载模式的特征,根据本文的需求,需要保持会话的测试同时能测试出web应用服务器系统的瓶颈值,因此在Nginx配置文件中upstream 模块配置基础负载IP 哈希均衡算法以及后端服务器数据接收转发方式。
2.2.3 Tsung分布式配置
在实际应用中,为了避免多台测试机器同时分布式运作,需要把主从机配置成免登陆方式,即Tsung分布式集群的机器之间实现无密码的ssh登录,将公钥复制到从机/root/.ssh下,并改名为authorized_keys,如果需要本地允许无密码登录,可将自己生成的id_rsa.pub内容追加到authorized_keys下,即可完成免登陆配置。
2.2.4实验结果
经过对上节的单点测试结果的分析,对系统参数进行优化配置、增加负载均衡、压缩图片、增加带宽等处理后,重复上节进行单点测试计划,逐步增加并发用户数目以达到分布式负载测试。图6为多台同时并发1000用户数下的结果图。
图6 Tsung每秒并发1000用户结果图
在分布式测试策略下发现,模拟用户数每秒最大可突破1000个,系统处理请求的能力在负载均衡的调度下,处理能力比单机模式有显著提高,瞬间处理每秒5000 个请求,产生的最大用户数最高为25000个每秒,页面响应尚可。因此在实际应用生产过程中结合Nignx 负载均衡的算法性能,采用least_conn结合的自适应负载算法模式,该模式满足网络服务高可用、高性能要求,通过实验测试web应用服务器、CPU 平稳运行。
本文基于农村电影数字节目交易平台,利用压力测试软件对平台的负载性能进行测试。通过比较Tsung、Jmeter、Load Runner三种不同压力测试软件的优缺点,最终选择适合本平台的Tsung开源测试软件,并利用Tsung软件对平台的web应用服务器进行负载性能测试。本次应用先后采用单点负载测试和分布式集群负载相结合方式进行压力测试,并给出性能测试结果。该应用的实现为平台有针对性的从机器参数、软硬均衡等方面进行全面优化和升级提供主要参考依据。经过实验证明,经过优化升级的平台在原有平台的基础上提升了容载及处理能力,有效保证了高访问量压力,保证了用户体验的满意度。❖