Web应用系统并发性能测量的研究与应用
2013-12-17吴锐
吴 锐
(安徽省教育招生考试院 网络信息中心, 安徽 合肥 230022)
互联网用户具有地理分布范围广、数量不确定、访问突发性强等特点,Web应用系统在设计时很难模拟大量用户同时访问的场景,对并发负载状态缺乏量化测量和监控手段,正式运行后容易遇到访问高峰而发生系统响应速度变慢甚至中断等情况,铁道部12306售票网站就是屡被诟病的典型案例.Web应用系统需在部署前精确测量并发性能、部署后实时监控并发负载,根据运行前预估的和运行时实际的用户并发访问规模,合理部署、及时调整系统的软硬件数量,保证用户对系统的正常访问.
1并发与性能指标
1.1Web应用系统的并发
Web应用系统一般采用B/S架构,本文所研究的并发指的是系统在同一个时间段内执行的所有用户HTTP请求和响应的总和,当这个时间段划分为更小的时间片时,发出请求的用户、HTTP请求和响应可能是不同的.
HTTP是基于TCP的应用层协议,Web应用系统并发也是系统和用户之间所有TCP连接的总和,但一个HTTP请求可能因调用多个资源而产生多个TCP连接.每个TCP连接都会耗费系统一定数量的CPU使用率、内存、互联网带宽等资源,内存、互联网带宽很容易进行扩充,不应成为系统并发性能的瓶颈,执行计算任务的CPU(包括服务器CPU、防火墙CPU等)是系统并发性能的决定因素[1].
1.2TCP连接状态与并发性能指标
1.2.1TCP连接状态
根据TCP/IP协议标准[2],TCP连接有9种状态(SYN-RECEIVED、ESTABLISHED、TIME-WAIT等).其中仅ESTABLISHED状态TCP连接传输应用数据、执行计算,对系统资源消耗较大;其他状态的TCP连接大多数处于等待状态,活动时也仅传输握手信号或关闭信号,对系统资源消耗很小.另外Linux 2.6以上版本内核的epoll机制[3],可显著减少系统存在大量并发连接、只有少量连接活跃情况下的CPU使用率,使非ESTABLISHED状态TCP连接对CPU的使用率进一步减小.
正常运行的Web应用系统会主动关闭与用户的TCP连接,根据TCP状态转换图,系统一般只大量出现ESTABLISHED、TIME-WAIT两种状态的TCP连接.对于TIME-WAIT状态TCP连接,可在Linux/Windows操作系统中限制其最大数量,避免对系统资源的严重消耗.
HTTP协议开启Keep-Alive特性可节省系统与同一用户建立TCP连接过程的开销.对于大量用户短时间集中访问的系统,采用Keep-Alive会导致系统被迫长时间保持大量ESTABLISHED状态TCP连接,系统资源消耗反而变大.另外现代操作系统越来越先进,使建立TCP连接的开销越来越小,如epoll机制.Keep-Alive也会造成ESTABLISHED状态TCP连接的忙碌和空闲无法区分,ESTABLISHED状态TCP连接数量与系统并发负载状态的关联度减小.所以本文讨论的Web应用系统,关闭了HTTP的Keep-Alive特性.
Web应用系统中的一些服务器,可能是另外一些服务器的客户端,TCP连接的被动关闭导致系统出现一定数量的CLOSE-WAIT状态TCP连接,但对系统性能影响很小:(1)服务器对服务器的连接一般会采用连接池(connection pool)或持久化(persistent)等技术来提高性能,这种连接长时间保持ESTABLISHED状态,不会出现连接状态的经常变化;(2)服务器对服务器的TCP连接总数有限,相比服务器与用户之间动辄数千的TCP连接并发,数量微不足道.
在实践中,Web应用系统也有可能出现大量SYN-RECEIVED状态TCP连接,此时系统一般处于两种状态:遭到了SYN FLOOD攻击、超负载运行导致与用户的TCP连接3次握手变慢.
综上所述,经合理配置的系统在正常运行时,ESTABLISHED状态TCP连接数量与系统运行负载密切相关.
1.2.2并发性能指标
Web应用系统的并发性能,可从响应时间、吞吐量、用户行为等方面进行研究[4],本文从系统与用户之间的TCP连接出发,提出以下衡量Web应用系统并发性能的4个指标:
1)PETC-Parallel Established TCP Connections.系统与用户之间瞬时处于ESTABLISHED状态的TCP连接数,PETC的最大值MPETC是衡量系统并发性能的最重要指标.
2)NTCPS-New TCP Connections Per Second.系统与用户之间每秒新创建的TCP连接数,代表系统每秒响应用户新请求的能力.
3)FETCPS-Finished Established TCP Connections Per Second.系统与用户之间每秒结束ESTABLISHED状态的TCP连接数,结合完成的总时间,可以计算出系统完成单个TCP连接所需的时间.
4)MFETCPS-Max Finished Established TCP Connections Per Second.系统与用户之间每秒最多可完成的ESTABLISHED状态TCP连接数,可根据FETCPS的单个TCP连接所需完成时间进行理论推算得出.
1.2.3系统运行状态
随着用户每秒对Web应用系统TCP连接请求从无到有、逐渐增多,系统负载逐渐加大,PETC、NTCPS、FETCPS三项指标先逐渐增大、到了最大值后开始减小,MFETCPS指标一直减小,可将系统的运行状态划分为3个阶段:
1)轻负载
当用户每秒发出的TCP连接请求数较少时,系统CPU使用率小于100%,系统每秒可完成处理的ESTABLISHED状态TCP连接数大于新创建的TCP连接数,并发性能指标之间的数量关系为:NTCPS=FETCPS 2)均衡负载 当用户每秒发出的TCP连接请求数达到一定数量时,系统CPU使用率为100%,系统每秒新建的TCP连接数等于每秒完成处理并关闭的TCP连接数,系统处于吞吐动态平衡状态,并发性能指标之间的数量关系为:NTCPS=FETCPS=MFETCPS,在TCP连接请求对时间均匀分布的前提下,PETC=NTCPS.将系统此运行状态称为最佳运行状态,此时PETC达到最大值.理论上用户向系统发出的MPETC个TCP连接,可在一秒之内获得所需的结果,用户感觉不到系统响应的延时. 3)重负载 当用户每秒发出的TCP连接请求数再加大,系统负载再加重,对用户TCP请求的响应时间变长、甚至超时中断,此时系统CPU使用率仍为100%,但系统被迫耗费更多的CPU资源去处理与用户的TCP三次握手连接,用于处理ESTABLISHED状态TCP连接的CPU资源反而减少,PETC、FETCPS、MFETCPS从最大值开始减小,并发指标之间的数量关系为:NTCPS>FETCPS=MFETCPS,在TCP连接请求对时间均匀分布的前提下,PETC>FETCPS,但PETC与NTCPS的大小关系不确定. 用户每秒TCP连接请求数与PETC、MFETCPS两项指标之间的数量关系如图1所示. 图1 TCP请求数与并发指标 Web应用系统在运行时,存在着多个用户对多种资源的多个请求,系统在响应这些差异化的请求时所耗费的CPU使用率、内存、互联网带宽等资源相差很大,给测量系统并发性能带来了挑战,解决方案有两种: 第一种,采用复杂的分布式测试方案,借助于商业测试软件(如LoadRunner)模拟对Web应用系统的大规模互联网访问[5],这种方案实施成本高,对复杂场景的模拟也存在困难. 第二种,将用户HTTP请求、系统HTTP响应按照运行流程,分解成最小的、不可再分割的原子请求和响应集合,简化测试场景,使用自编或开源软件精确测量各类原子请求和响应的并发性能,再将这些原子请求和响应按并联或串联的方式进行组合计算,最后得出整个系统的并发性能[6]. 本文采取的是第二种方案. 按照以下三种分解方法,可将Web应用系统所有HTTP请求与响应分解为各类原子请求与响应集合,而原子请求和响应与TCP连接之间存在着一一对应关系,从而将并发性能测量转换为对TCP连接数的测量. 2.1.1并行响应的分解 用户向系统发出一个HTTP请求获取资源A1,但A1需调用资源A2、…、An,系统需一次返回n个资源进行响应,这里的资源是个广义的概念,可以是静态网页、动态网页、图片、验证码生成等.将资源A1改造为A1′,消除对资源A2、…、An的调用,该HTTP请求和响应分解成对资源A1′、A2、…、An的请求和响应H1、H2、…、Hn,如图2所示,分别对这些请求和响应测量出最大并发数MPETC1、MPETC2、…、MPETCn. 图2 并行响应的原子分解 计算得 (1) 2.1.2串行请求的分解 在动态交互系统中,用户需按照一定的次序连续发出请求:H1、H2、…、Hn,才能获得所需要的最终资源An.将请求H1、H2、…、Hn改造为请求H1、H2′、…、Hn′,发出请求Hk′(k=2,…,n)时,携带请求H1、H2、…Hk-1的响应结果,消除Hk′对前面k-1个请求的依赖,使得这n个请求彼此独立,如图3所示,这种改造并不会改变每个请求的最大并发数,对每个请求H1、H2′、…、Hn′,分别测量出最大并发数MPETC1、MPETC2、…、MPETCn. 图3 串行请求的原子分解 假设原系统处于最佳运行状态有MPETC个并发,则请求H1、H2、…、Hn的并发数是相同的,论证如下:因为用户数量足够多、操作彼此独立,假设请求Hk的并发数PETCk最小,则Hk之后的请求因处理速度较快、被Hk请求阻塞,并发数自动降为PETCk,释放了部分CPU资源可用于处理Hk请求;Hk之前的请求因处理速度较快,在Hk请求处产生瓶颈,部分用户因系统响应变慢而处于等待状态,阻塞了新用户对系统发出的新请求,系统负载减小,系统对请求Hk的处理速度加快,最终PETCk与前面k-1请求的并发数相同.同理可得公式(1). 2.1.3并行请求的分解 计算得 (2) 特别对于所有资源都被等概率(Pi=1/n,i=1…n)访问的特殊情形,公式(2)即为公式(1). 对并发指标的测量,可使用基于监控和基于测试软件两种方法,基于监控适和对系统各个时刻的PETC、NTCPS进行连续测量,结合Cacti数据采集和绘图软件可获取该并发指标在任意时刻的数值和图形[8];基于测试软件适合对FETCPS、MFETCPS进行有限次测量来确定MPETC. 2.2.1PETC的测量 (1)基于SNMP监控 SNMP[9]的tcpCurrEstab(OID:1.3.6.1.2.1.6.9)监控值代表系统中ESTABLISHED和CLOSE-WAIT两种状态的TCP连接总数,前文已经论述了在Web应用系统服务器中CLOSE-WAIT状态TCP连接数为零或极少,但tcpCurrEstab值不能直接作为PETC值,在多层架构的系统中,用户与系统第一层建立一个TCP连接,第一层会依次与其他层建立TCP连接,这些连接的生命周期相同,连接的总数与系统的层数相关,此时tcpCurrEstab值与PETC值呈倍数关系. (2)基于应用软件监控 一些应用软件内置了与用户建立的ESTABLISHED状态TCP连接数监控,可直接获取PETC值,如Nginx软件的NginxStatus监控. 2.2.2NTCPS的测量 SNMP的tcpPassiveOpens(OID:1.3.6.1.2.1.6.6)监控值代表系统中TCP端口由LISTEN状态转变为SYN-RECEIVED状态的数量,与PETC的情形类似,该数值与NTCPS值呈倍数关系. 2.2.3FETCPS和MFETCPS的测量 对Web应用系统的HTTP请求和响应进行原子分解后,降低了并发性能测试软件的复杂度,对于每个原子请求和响应,可使用简单的并发性能测试软件向系统发出一定并发数量的原子HTTP请求,结合完成这些请求实际所需的总时间,得出该并发数量下的FETCPS和MFETCPS. 开源软件Apache自带的ab[10]可用于测量原子请求和响应的MFETCPS,使用的命令格式为:ab -c c0-n n0 http://ip/index.html,其中参数c0为并行请求数、n0为请求总数,ab软件采用的测试策略是前一个请求被系统响应完毕就立即发出一个新请求,在c0个并行请求的前提下,对系统发出尽可能多的请求数.所以命令执行完毕后输出的结果中:“Time per request”数值t0是系统完成每个TCP连接所需要的时间、“Requests per second”数值r0即为MFETCPS. 2.2.4MPETC的测量 基于监控和ab软件都能测量出MPETC数值,但基于ab软件的测量更快捷,可采用二分查找法: 1)发出一个较小的并行请求数C1,测得MFETCPS1,此时C1 2)发出一个很大的并行请求数C2,测得MFETCPS2,此时C2>MFETCPS2. 3)发出并行请求数C3=(C1+C2)/2,测得MFETCPS3,若C3=MFETCPS3,则MPETC值为C3,否则根据C3和MFETCPS3的大小关系重复以上步骤. 查分系统采用公认的动态网页并发性能最高的Linux/Nginx/PHP软件组合并进行了设计优化[11-12],系统架构如图4所示.负载均衡器后端是多台查分服务器,所有查分服务器共用Oracle数据库服务器,查分服务器的硬件配置为1颗4核3.0GHz主频CPU、4G内存,Oracle数据库服务器硬件配置为2颗4核2.4GHz主频CPU、16G内存. 图4 高考网上查分系统架构 查分系统对外开放前,首页是一个html静态页面,发布提示信息给考生.查分系统对外开放后,首页是一个php动态页面,需考生输入座位号、身份证号、验证码,发送给php分数查询动态页面,获得分数结果. 在计算复杂度确定的前提下,Web页面的并发数与页面长度直接相关,本查分系统涉及的所有页面大小控制在5KB左右,除了验证码的图片,不包含其他任何图片,否则系统对互联网带宽需求太大. Cacti系统每隔1min采集一次PETC、NTCPS、CPU使用率等监控值并绘图。 3.2.1 查分服务器 静态首页仅含静态文字,无需进行原子分解;信息输入和分数查询两个动态页面必须按顺序运行,按串行请求方式进行原子分解和公式计算;信息输入页面内含文字提示和验证码图片两个资源,ab软件无法在一次请求中获取这两个资源,按并行响应方式进行原子分解和公式计算。 1)静态页面 按前文所述的二分查找法测量静态页面的MPETC为1.06万,见表1,ab的命令格式为:ab -c c0 -n n0 http://ip/index.html,c0的起始最小、最大值选为1000、16000,n0为600万,保证测试的持续时间为10min左右. 表1ab软件二分查找法测量MPETC 2)信息输入页面 3)分数输出页面 分数输出页面out.php的运行依赖于信息输入页面index.php以POST方式提交的座位号、身份证号、验证码参数,测试时修改out.php代码,使其可从测试命令行获得以GET方式提交的参数,ab的命令格式为ab -c c0 -n n0 http://ip/out.php?zwh=zwh0&sfzh=sfzh0&code=code0,同样使用二分查找法测得每台服务器分数输出页面的MPETC为2810. 4)查分服务器 3.2.2防火墙和负载均衡器 防火墙、负载均衡器等网络设备的并发性能也制约了Web应用系统对用户可提供的并发性能,网络设备对于任何TCP连接,只提供数据传输功能、不执行任何计算,并发性能仅与TCP连接传输的数据长度有关.可采用黑盒测试的方式对网络设备并发指标进行测量[13],如图5所示.对于不同的资源Ak,发出测试请求H1,当网络设备CPU使用率为100%时,并发数PETCk即为网络设备对资源Ak请求的MPETC.若网络设备并发性能较好,可根据实际情况发出多路测试请求H2、…、Hm. 图5 网络设备并发性能指标的测量 在网页长度5KB的情形下,本系统使用的某款防火墙和负载均衡器的MPETC值分别为1.02万、1.36万. 在本系统中,防火墙和负载均衡器各一台,无法通过增加数量来提高并发指标,这决定了整个系统对互联网用户可提供的最大PETC即为防火墙的MPETC:1.02万. 3.3.1查分服务器数量 所有查分服务器的MPETC总和达到1.02万即可,静态网页服务器只需要1台(1.06万)、动态网页查分服务器需要3台(3577×3=10731). 3.3.2Oracle数据库服务器数量 在对单台查分服务器MPETC测量时,Cacti监控显示分数查询引起的Oracle数据库服务器CPU使用率为4%,3台查分服务器同时运行时,Oracle数据库服务器CPU使用率为12%,使用1台Oracle数据库服务器即可满足系统需要. 3.3.3互联网带宽 查分系统对互联网带宽的最大需求为408Mbits(=1.02万×5KB×8),远大于现有的200Mbits互联网带宽,解决方案有2种: 1)增加3条100M宽带,这会增加额外的费用. 2)查分服务器启用Nginx静态html网页和动态php网页的HTTP压缩传输,对于纯文本信息的网页,可节省50%以上的带宽,但压缩传输会消耗一些CPU使用率,尤其是动态php网页的压缩传输可导致服务器MPETC下降约25%,可通过增加1台动态php网页查分服务器来保持系统MPETC不减少. 3.3.4运行效果 综上所述,查分系统最终采用4台查分服务器、1台Oracle数据库服务器,系统MPETC为1.02万,每秒有5 100个考生可查出分数结果,预计全省50万考生可在98s之内完成查分. 安徽省2012年高考网上查分系统实际运行时,Cacti监控表明系统PETC最大值不超过7 000,小于设计指标1.02万。所有查分的考生都可在信息输入后1s之内查出分数结果,获得良好的社会反响. 本文提出的HTTP请求和响应的原子分解策略,简化了并发性能测试的场景,降低了并发性能测试软件的复杂度,便于精确定位系统并发性能瓶颈,有针对性地进行优化设计.本文提出的并发性能指标,在系统设计时可定量确定并发性能,在系统运行时可实时监控并发负载状态,为保障系统正常运行打下基础. [1] 李逦. Web项目性能测试实例设计与分析[J].辽宁高职学报,2009,11(9):89-92. [2] Stevens W R.TCP/IP详解卷1:协议[M].北京:机械工业出版社,2000:174-191. [3] 张轶凡,卢正兴,王芙蓉. Linux下高性能网络I/O解决方案分析[J].现代计算机,2006(247):90-93. [4] 兰景英,王永恒. Web性能测试研究[J].计算机技术与发展,2008,18(11):90-93. [5] 左为平,杨晓亚. WEB应用系统性能测试的实现[J].重庆科技学院学报:自然科学版,2012,14(1):131-132. [6] 贺乐天,孙永强. 分布式计算的并发测量[J].软件学报,1998,9(1):30-35. [7] 刘荷花. Web性能测试的实现方法[J].山西电子技术,2010(1):64-65. [8] The Cacti Group Inc. Cacti Manual [EB/OL]. (2012)[2012-6-25]. http://www.cacti.net/downloads/docs/html/index.html. [9] 武孟军. 精通SNMP[M]. 北京:人民邮电出版社,2010. [10] 邵芬,于国防,付海燕. AB:一种简单的性能测试工具[J].计算机时代,2007(12):59-60. [11] 张宴.实战Nginx:取代Apache的高性能Web服务器[M]. 北京:电子工业出版社,2010. [12] 李军.高并发Web系统的设计与优化[D].北京:北京交通大学,2009. [13] 杨建光,梅大成.黑盒测试方法和综合策略的研究[J].计算机光盘软件与应用,2012(1):121-122.2并发性能指标的测量方法
2.1原子分解与MPETC计算公式
2.2测量方法
3高考网上查分系统并发性能测量
3.1查分系统概况
3.2MPETC的测量
3.3并发指标与硬件数量
4结束语