配色: 字号:
企业即时通信客户端的开发
2012-09-18 | 阅:  转:  |  分享 
  
企业即时通信客户端的开发

与性能测试

DevelopmentandPerformanceTesting

oftheEnterpriseInstantMessageClient







院系 数学与计算机科学系 专业 计算机科学与技术 班级 xxxxxxxxxxx 姓名 xxxxxxxx 学号 xxxxxxxxxxxx ?(空行,五号字,行高0.7厘米) 指导教师单位 数学与计算机科学系 指导教师姓名 xxxxxxxx 指导教师职称 副教授 ?

?

企业即时通信客户端的开发与性能测试

摘要

当今世界处于信息爆炸式增长并迅速更新的时代。随着网络的发展,即时通信服务深入到人们生活的方方面面。对企业来说,即时消息、语音、视频通信和即时文件传输的利用率非常高。企业级即时通信系统作为未来的主流办公工具,集成了多种先进的信息沟通方式。目前不少即时通信软件都有针对企业的版本。这些软件功能虽然全面,却并不符合许多中小型企业的工作要求。

通过深入研究开源的Openfire服务器和SmackAPI的实现,本系统充分利用更高安全性即时通信协议XMPP,编写接口的工厂类以实现即时通信协议的客户端软件模块。企业级即时通信软件SPGEcq就是从企业工作的实际出发,在大幅减少企业通信费用的同时,提高了企业整体的工作效率,使得企业员工脱离网络聊天所带来的问题。在即时通信、文件传输等功能的基础上,各企业还可以通过二次开发来定制自己的多样性功能和主题,使用丰富的扩展插件来满足自身的需求。此外,本即时通信软件遵循开源的GNU协议,具有跨平台特性。

最后本文对系统进行了性能测试根据测试结果分析,针对的系统性能瓶颈进行相应的,消除系统性能瓶颈,使系统能够达到预期的性能指标期望值。推动集团整体业务自动化提供更坚实、更好的系统平台以及更多、更适合的应用erformanceTestingoftheEnterpriseInstantMessageClient

ComputerScienceandTechnology2005-2TengBin-yun

SupervisorLiChao-jian

Abstract

Thecurrentworldlocatesintheperiodofinformationexplosivegrowthandrapidupdate.Asthenetworkdeveloped,instantmessageservicegetsintothevariousfacetsofpeople’slives.Forenterprise,instantmessage,voice,videocommunicationandinstantfiletransferhaveveryhighrateofapply.Tobethefuturemainstreaminofficetools,enterpriseinstantmessagesystemintegratesvariousadvancedwayforinformationcommunication.Atpresent,muchinstantmessagesoftwarehavetheversionforenterprise.Theyhavecompletefunctionsbutnotfitwiththeworkdemandinmanysmallandmedium-sizedenterprises.

Throughdeeplyresearchingtheimplementofopen-sourceOpenfireserverandSmackAPI,thesystemplentyusesthehighersecurityinstantmessageprotocolXMPPandcarriesouttheinstantmessageprotocol’sclientsoftwaremodulebywritingthefactoryclassofinterfacecode.EnterpriseinstantmessagesoftwareSPGEcqstartswiththepracticalworkofenterpriseandimprovesthewholeworkefficiencythatemployeegetsridoftheproblemofnetworkchat,aswellasreducestheenterprisecommunicationcostbyabigmargin.Onbasisofthefunctionslikeinstantmessageandfiletransfer,variousenterprisescustomizetheirownvariousfunctionsandthemebyrepeatedlydevelopmentanduseplentyofextendedplug-intofulfilltheirownrequirements.Furthermore,theinstantmessagesoftwarekeepstotheopen-sourceGNUlicenseandhasgotthefeatureincross-platform.

Atlastthestudymakesthesystemperformancetest.Onbasisoftestresultanalysis,weevaluatetheexistentsystemperformancebottleneckcorresponding,andeliminateitforreachingtheexpectationofperformanceguideline.Throughtheworkofperformancetestandoptimizing,thesystemwillberunningstablyinSipuGroup’sSPGLinuxtothisday.Itwillworkupthewholebusinessautomatizationofgroup,andprovidesmorestable,bettersystemplatformsaswellasmuchmoreandmoresuitableapplicationsforenterprise.

(空行,小四号字)

Keywords:目录

1前言 1

1.1即时通信软件的现状和特点 1

1.1.1即时通信软件的现状 1

1.1.2目前即时通信软件的特点 2

1.2即时通信软件的企业应用 3

1.3本开发项目的实际意义 4

2即时通信软件需求分析 5

2.1获取用户需求 5

2.1.1可运行原型法 5

2.1.2其他有效地获取需求的方式 5

2.1.3功能划分 6

2.1.4功能描述 6

2.2面向对象分析 7

2.2.1面向对象分析的任务和活动 7

2.2.2关键建模用图 7

3即时通信客户端SPGEcq的实现 10

3.1技术背景及环境配置 10

3.1.1软件开发技术 10

3.1.2软件开发工具及环境配置 10

3.2SPGEcq客户端的实现 10

3.2.1登录对话框 11

3.2.2账户创建向导 13

3.2.3联系人列表 15

3.2.4文件传输管理 17

3.3客户端的启动 19

4即时通信系统的性能测试 21

4.1即时通信系统性能测试中使用的统计量 21

4.1.1响应时间 21

4.1.2并发用户数 22

4.2即时通信系统性能测试方法论 24

4.2.1性能下降曲线分析法 24

4.2.2PTGM模型 26

4.3测试前期准备及工具引入 27

4.3.1系统基本功能的验证 27

4.3.2测试工具需求确认 27

4.3.3性能预备测试 28

4.4测试计划 28

4.4.1性能测试领域分析 28

4.4.2用户活动剖析与业务建模 28

4.4.3确定性能目标 28

4.5测试设计与开发 29

4.5.1测试环境设计 29

4.5.2测试场景设计 30

4.6即时通信系统性能测试评估 31

4.6.1基础性能分析 31

4.6.2建议和结论 32

结束语 34

致谢 34

参考文献 34





1前言

当今世界处于信息爆炸式增长并迅速更新的时代。为适应新的经济竞争环境,现代企业特别是中小企业的沟通越来越快,对效率的要求也越来越高,企业内部的团队工作中的协调沟通必须即刻达成,顺畅的沟通对生产效率、管理质量起到至关重要的作用。在异步通信已无法满足办公需求的下,好的即时沟通平台能够帮助实现高效沟通。

图1.1使用即时通信的主要目的

Fig.1.1TheMainPurposeofUsingIM

1.1.2当前即时通信软件的特点

个人即时通信软件在企业的应用中存在着许多不足之处。首先,通常从安全和管理的角度出发,企业不接受接入互联网的服务,也就限制了这些软件的使用;其次,由于这些软件主要侧重聊天和娱乐,存在繁杂的功能将影响工作效率;另外,注册用户不需要验证身份证,这导致了在传输过程中企业的敏感数据极其容易被窃取,并且数据的安全性不能得到有效的保障。

现在流行诸多的IM通信协议中,大都是封闭协议,不同的IM之间是相对封闭的无法互通。而Jabber作为一种开放的标准化IM协议已被IETF标准化将引发一股不断开放的IM潮流。ExtensibleMessagingandPresenceProtocol,XMPP)。

Jabber作为一种开放的体系架构,具有良好的可扩展性、安全性及其在开源界良好的支持,能作为开发客户端的最佳选择。是一种基于Jabber的开源IM客户端,具有多种功能,提供了良好的安全性支持和插件开发支持,并且具备优良的可展性

图1.2SPGLinux的SPGEcq客户端

Fig.1.2SPGEcqClientforSPGLinux

1.2即时通信软件的企业应用

对企业来说,即时消息、语音、视频通信和即时文件传输的利用率非常高。企业级即时通信系统作为未来的主流办公工具,集成了多种先进的信息沟通方式。它是一种比邮件更快捷、更具亲和力和交互性的沟通方式。特别是它能与电子邮件、电话以及其他企业应用办公程序结合使用,成功打造现代办公的新平台。

相对于常用的即时通信软件,企业级即时通信软件的发展显然要慢很多。很多企业的即时通信系统主要是下面几种方式:

(1)直接使用QQ、MSN等面向普通用户的即时通信软件,并通过企业内部制定的规则来规范员工的行为。这种方式最大的好处是易于与企业外部沟通而且服务费用低廉。它的缺点是企业无法从技术上限制员工使用的行为,例如无法杜绝工作时间网上聊天,无法保证在企业内部人员交流的前提下禁止财务人员向企业外的用户发送文件,潜在的风险很大。

(2)使用功能更强大的商业即时通信平台,如RTX。这种方式将即时通信与业务流程融为一体,而且企业能对其加以完全的控制,很适合与支持大型企业的内部沟通和协调。但缺点在于投资较大,中小型企业基本无法采用这种方式。

1.3本开发项目的实际意义

目前不少即时通信软件都具有针对企业的版本,比如腾讯TM。但是这些软件功能虽然全面,却并不符合许多中小型企业的工作要求。

(1)由于这些基于Internet的即时通信软件是全开放式的,员工用这些软件彼此在企业内部交流的同时,也可以和企业之外的网友进行聊天。这使得即时通信软件不仅没有成为企业信息沟通的平台,反而成为影响员工工作效率的累赘。

(2)部分即时通信软件将自己的通信环境限制在一个局域网内部。这样做虽然阻止了上一种情况的发生,但是对于多分支、跨地域的企业或者公司,就完全起不到通讯的效果。

(3)不同的企业总会有不同的需求,现有的即时通信软件虽然免费,但是不能为企业定制各自独立版本来满足其多样性的要求。

SPGEcq企业级即时通信软件就是从企业工作的实际出发,充分利用开源即时通信协议,使得企业员工脱离网络聊天所带来的问题。在大幅减少企业通信费用的同时,提高了企业整体的工作效率。而且,各企业还可以通过二次开发来不断扩展自己的多样性功能。

2即时通信软件需求分析

2.1获取用户需求

SPGEcq客户端软件主要是实现即时通信的基本功能。因此,必须准确地获取企业用户的需求,才能保证整个即时通信系统的完整性和可靠性。另外,软件的操作界面要求与企业使用的SPGLinux操作系统的默认风格一致。针对企业用户对即时通信系统需求并不清楚的情况,采取可运行原型需求获取的方法,并加强与企业用户的沟通来获取系统需求。

2.1.1可运行原型法

所谓“可运行原型法”是指根据系统设计的基本需求,在以往类似项目应用系统的基础上进行二次开发,少量修改后得出一个可运行的软件,通过“可运行原型软件”这一载体,达到彻底挖掘项目需求的一种需求获取的方法。

针对即时通信软件的开发,可以在开源即时通信平台的基础上,快速构建出一个基于Smack库和Openfire的可运行即时通信系统,然后借助这一平台来加快对需求的挖掘和双方对需求的理解。步骤如下:

(1)根据所了解到的需求,在Smack库和Openfire开源即时通信平台的基础上,快速构建出一个运行在SPGLinux操作系统上的即时通信系统;

(2)通过向用户演示“SPGEcq即时通信客户端”的原型,逐步挖掘并让企业用户确认项目需求;

(3)根据不断获取到的需求进行增量式整理,丰富即时通信系统原型;

(4)经过多次可运行原型系统的交互,最终开发出合理的企业级即时通信客户端软件。

2.1.2其他有效地获取需求的方式

除了使用“可运行原型方法”获取需求,还可以根据企业的特点结合以下方式组合获取需求:

(1)因为是针对企业进行即时通信软件的开发,可以在企业内部进行现场调研,对技术处、行政处和市场部的人员等进行询问、访谈,以获取真实的需求。

(2)向在XMPP开发领域有所研究的相关人员,如Spark客户端的作者DerekDeMoro和igniterealtime社区的爱好者们进行咨询,寻求指导。

(3)对现有的Smack库和Openfire即时通信系统进行分析,从而得到更多有益的启发。

(4)从图书馆、网络等各种渠道检索所需要的信息,尤其是关于开源即时通信平台的相关文档。

2.1.3功能划分

客户端的功能模块分为账号创建、登录管理、联系人管理、群组管理和消息管理等。如图2.1所示。



图2.1客户端功能图

Fig.2.1ClientFunctionalDiagram

2.1.4功能描述

(1)用户登录:

已注册的用户输入正确的账户和密码,选择服务器的IP地址,正常进入SPGEcq客户端系统。在服务器端会显示用户处于登录状态。如果账户或密码错误,则不能登录。若服务器IP地址错误也不能进入系统。

(2)注册账号:

客户端点击登录模块的“账户”按钮,在创建新账户窗口中输入用户名、密码和服务器IP,确认后就可以申请到一个账号了。服务器端可以看到新增的账户信息。

(3)添加联系人:

用户登录进入主界面后,点击“联系人”下的“添加联系人”,出现添加联系人模块,输入联系人的用户名、昵称和加入群组就能加为好友。如果被加的用户名不存在,则会提示“不能添加联系人”。

(4)删除联系人:

右击联系人结点,选择弹出菜单的“移除联系人”项可删除联系人。

(5)与联系人即时聊天:

当两个用户都注册了账号,并且互相加为好友后,就可以通过软件即时聊天。可发送的形式包括文字、表情和文件。

(6)群组管理:

对好友按群组进行分类,可以添加、删除群组,也可以修改群组名称。

(7)消息管理:

可以查看本地的聊天记录。

2.2面向对象分析

面向对象的分析方法解决了两大问题:一是将消息数据模型和消息处理模型二者合一,二是使面向对象方法从系统分析平滑地过渡到系统设计。面向对象的分析结果一般用UML图来表示。

2.2.1面向对象分析的任务和活动

下面介绍用面向对象的方法进行系统分析时需要进行的活动。

首要任务是获取用户需求,对系统进行描述并建立用例模型。包括下列活动:

(1)获取用户需求,并对客户端软件的特性进行描述。

(2)根据软件的描述,发现事件中的用例。

(3)对每个用例进行详细分析并描述。

(4)分析各用例间的关系,得到用例图。

通过对整个系统的静态特征进行分析,得到客户端的分析类图。根据用例描述和分析各个类之间的关系,建立类与类之间的关联。然后画出初步的类图。

最后根据实际情况对各个类的方法进行补充,得到完整的类图。

2.2.2关键建模用图

(1)用例图

用例是能够帮助确定软件使用情况的UML组件。一组用例就是从用户的角度出发对如何使用该客户端软件的描述,也可以认为是系统的一组使用场景。



图2.2客户端用例图

Fig.2.2UseCaseforClient

(2)类图

类图是面向对象最常用的图,描述了类集、接口集、协作及它们之间的关系。





图2.3客户端工厂类的类图

Fig.2.3ClassDiagramofClientManufactoryClass

以上工厂类是客户端API架构的关键。它们可以获得由Smack库提供的实例,例如XMPPConnection或ChatContainer等,并获取Openfire服务器的信息,与其他客户端进行通讯。而其中的SparkManager是其他工厂类的一个“工厂类”。

可以对SmackAPI进行更深入地使用。SparkManager中的许多方法非常强大,如getChatManager()、getSessionManager()、getMainWindow()getConnection(),它们分别可以获得聊天管理器、会话管理器、主窗口和服务器连接的实例。

3即时通信客户端SPGEcq的实现

下面对基于SPGLinux操作系统平台下的即时通信软件SPGEcq的开发环境搭建和实现主要工厂类的核心方法进行描述。

3.1技术背景及环境配置

3.1.1软件开发技术

该即时通信系统是一个具有完整功能的三层C/S结构系统。使用的技术包括Java、XML、Shell等。在一个共享的中间层——Smack库封装了企业逻辑,不同客户端应用程序可以共享同一个中间层,而不必由每个程序单独实现企业逻辑。并且客户端可以做得很“瘦”,因为很多复杂的工作都有应用服务器Openfire代劳了,客户端应用程序只需关注用户界面及插件扩展本身,也就更易于打包、发布、安装、配置和维护。

3.1.2软件开发工具及环境配置

即时通信客户端软件的开发中使用到的主要工具是Eclipse,以及Ant脚本引擎、SVN版本控制工具、UML工具等插件支持。

系统开发环境的配置如下:

(1)开发语言:Java

(2)后台数据库:MySQLforLinux

(3)运行环境:OpenfireforLinux

(4)集成开发环境:EclipseforLinux

(5)操作系统:SPGLinuxDesktop

开发使用的硬件环境如下:

(1)PC机配置:AMD3600+CPU,1GB内存

(2)存储器容量:160GBSATA硬盘

(3)网络类型:TCP/IP网络

3.2SPGEcq客户端的实现

下面将对基于Smack库和Openfire服务器的SPGEcq客户端软件的一些具体设计和实现进行说明,着重软件的工厂类部分。



3.2.1登录对话框



图3.1SPGEcq登录对话框

Fig.3.1LoginDialogofSPGEcq

LoginDialog类负责创建登录窗口,初始化SPGEcq及其插件。下面是类方法的功能描述:

publicfinalclassLoginDialog{

...

/

调用LoginDialog使其可见

@参数:登录对话框的parentFrame

/

publicvoidinvoke(JFrameparentFrame){...}



/

取得用户名和密码,执行监听器

/

privatefinalclassLoginPanelextendsJPanelimplementsKeyListener,ActionListener,FocusListener,CallbackHandler{...}



/

初始化客户端及其所有插件,调用主窗体,创建workspace布局。

/

privatevoidstartSpark(){…}



/

由代理配置更新系统特性。

/

privatevoidupdateProxyConfig()throwsException{…}

/

定义背景,使用登录面板,在背景上画图。

/

publicclassLoginBackgroundPanelextendsJPanel{…}



/

图像面板显示SPGEcq徽标。

/

publicclassImagePanelextendsJPanel{…}



/

检查历史客户端设置settings.xml文件和升级用户。

/

privatevoidcheckForOldSettings()throwsException{…}



/

使用DNS查找密钥分配中心(KDC),假设用SRV记录等找到KDC。

@参数realm:查找的范围。

返回:KDC主机名。

/

privateStringgetDnsKdc(Stringrealm){…}

}

3.2.2账户创建向导



图3.2建立新账号向导对话框

Fig.3.2AccountCreationWizard’sDialog

返回新用户在注册对话框中的用户名、密码、确认密码和服务器。若判断两次输入密码一致,则由提供的信息创建新的账户。

publicclassAccountCreationWizardextendsJPanel{

/

构造AccountCreationWizard的用户界面,添加组件。

/

publicAccountCreationWizard(){...}



/

返回新账户的用户名。返回其他填写的字符串方法与之类似。

/

publicStringgetUsername(){…}



/

如果两次密码匹配则返回真。

/

publicbooleanisPasswordValid(){…}





/

使用提供的信息创建新账户。

/

privatevoidcreateAccout(){…}



/

在账户创建失败时被调用。

@参数:错误代码errorCode

/

privatevoidaccountCreationFailed(interrorCode){…}



/

在账户创建成功时被调用

/

privatevoidaccountCreationSuccessful(){…}



/

援引AccountCreationWizard。

@参数:使用父框架parent

/

publicvoidinvoke(JFrameparent){…}



/

创建基于用户设定的XMPPConnection。

返回创建的XMPPConnection。

抛出XMPPException

/

privateXMPPConnectiongetConnection()throwsXMPPException{…}





/

如用户已注册返回真

返回真或假

/

publicBooleanisRegistered(){…}



}

3.2.3联系人列表



图3.3联系人列表面板

Fig.3.3ContactListPanel

对列表中的联系人分组及联系人进行操作。

publicfinalclassContactListextendsJPanelimplementsActionListener,ContactGroupListener,Plugin,RosterListener,ConnectionListener{



/

更新用户现场。

@参数:用户更新的presenece。

如果更新用户的现场时出现问题则抛出异常。

如果用户在线,检查是否在离线组。如果是就从离线组移除

并添加到他们所属的所有组

/

privatesynchronizedvoidupdateUserPresence(Presencepresence)throwsException{…}



/

更新基于他们JID的个人单独现场。

@参数:用户现场presence,被更新的名单登记entry

@参数:用户呈现的jid号barejid

/

privatevoidupdateContactItemsPresence(Presencepresence,RosterEntryentry,StringbareJID){…}



/

移动每个与所给出bareJID相关的ContactItem。

@参数:用户现场presence,用户的bareJID。

/

privatevoidupdateContactItemsPresence(Presencepresence,RosterEntryentry,StringbareJID){…}



/

移动用户到他所属的每个群组。

@参数:显示为在线用户的bareJID,用户的RosterEntry值entry。

@参数:用户的现场presence。

/

privatevoidchangeOfflineToOnline(StringbareJID,finalRosterEntryentry,Presencepresence){…}



/

建立初始化的联系人列表时被调用。

/

privatevoidbuildContactList(){…}



/

当NEW账户被添加时调用

@参数:被添加的地址addresses

/

publicvoidentriesAdded(finalCollectionaddresses){…}



/

添加一个用户到联系人列表

@参数:用户的名册登记RosterEntry值entry

/

privatevoidaddUser(RosterEntryentry){…}



/

当基于预订通知的名册改变时进行处理。

@参数:被更新的登记列表addresses。

/

publicvoidentriesUpdated(finalCollectionaddresses){…}



}

3.2.4文件传输管理



图3.4传送文件按钮

Fig.3.4TransferFileButton

SparkTransferManager类中包含了完成文件传输工作的方法。

publicclassSparkTransferManager{



/

返回一个工厂类SparkTransferManager的实例,如果有必要就创建它。

并确保同步锁定以防创建了两个实例。

/

publicstaticSparkTransferManagergetInstance(){…}



/

发送文件给用户。

@参数:要发送的文件file,文件要发送给的用户jid号jid。

返回用户的聊天室ChatRoom

/

publicChatRoomsendFile(Filefile,Stringjid){…}



/

发送图片给用户。

@参数:要发送的图片image,要发送图片给用户所在的聊天室room

/

publicvoidsendImage(finalBufferedImageimage,finalChatRoomroom){…}



/

如果在剪贴板有一张图片则返回那张图片,否则返回null

/

publicstaticBufferedImagegetClipboard(){…}



/

把一个新的传输监听器TransferListener添加到工厂类SparkManager。

文件传输监听器FileTransferListeners能用来截取自己定制的传入文件。

@参数:监听器listener。

/

publicvoidaddTransferListener(FileTransferListenerlistener)



/

移除文件传输监听器。

@参数:监听器listener

/

publicvoidremoveTransferListener(FileTransferListenerlistener){…}



/

设置当前默认存储文件的目录。

@参数:默认目录directory。

/

publicvoidsetDefaultDirectory(Filedirectory){…}



/

返回文件选择器给用户。

@参数:父组件component,标题title。

/

publicFileDialoggetFileChooser(Frameparent,Stringtitle){…}

}

3.3客户端的启动

SPGEcq客户端的启动主要由Startup类来完成,包含main()方法。

publicclassStartup{

/

如果没有指定位置时使用默认值。

/

privatestaticfinalStringDEFAULT_LIB_DIR="../lib";

/

main()方法调用Startup对象的start方法获得参数。

/

publicstaticvoidmain(String[]args){

newStartup().start(args);

}



/

通过加载和实例化自举容器启动服务器。一旦启动方法被调用,

服务器就启动了,并且服务启动器不再被使用。

使用JiveClassLoader建立classpath。

解压缩lib里的打包文件和插件并将它们加载到类装载器。

@参数:SPGEcq初始的实例转变的变量args

/

privatevoidstart(String[]args){…}



/

转换在目录里的任何打包文件为标准的JAR文件。

每个打包文件转换完成后被删除。没有打包文件时,该方法什么也不做。

@参数:包含打包文件的目录libDir,解包时是否要显示状态printStatus

/

privatevoidunpackArchives(FilelibDir,booleanprintStatus){…}

}

4即时通信系统的性能测试

即时通信系统的性能测试属于黑盒测试。性能测试方法是通过模拟生产运行的业务压力和所使用的场景组合,测试系统的性能是否满足生产性能要求。这种方法主要的目的是验证系统是否达到其所规划的能力,要求运行环境必须是已经确定的。因为软件系统的性能表现与非常多的因素相关,要求测试时的硬件设备、软件环境、网络条件和基础数据等必须都已经确定。

4.1即时通信系统性能测试中使用的统计量

目前在性能测试中使用的统计量包括:响应时间(ResponseTime)、并发用户数(NumberofConcurrentUsers)、吞吐量(Throughput)、性能计数器(PerformanceCounter)和思考时间(ThinkTime)等。

4.1.1响应时间

响应时间的定义为:对请求做出响应所需要的时间。响应时间是用户视角的软件性能的主要体现。具体来说,当用户单击一个按钮、发出一条消息,从用户单击开始到应用系统把本次操作的结果以用户能察觉的方式展示出来,这个过程所消耗的时间就是用户对软件性能的直观印象。以本即时通信系统为例,图4.1说明了用户的这种印象。



图4.1即时通信系统的响应

Fig.4.1ResponseofIMSystem

图4.1将用户所感受到的响应时间划分为“呈现时间”和“系统响应时间”两个部分,其中“呈现时间”取决于数据在客户端收到响应数据后被处理并呈现页面所消耗的时间;而“系统响应时间”指即时通信系统从请求发出开始到即时通信客户端接收到数据所消耗的时间。

响应时间可以被进一步分解。图4.2描述了一个消息传输响应时间的构成。从图中可以看到,消息的响应时间可被分解为“网络传输时间”(T1+T2+T3+T4)和“应用延迟时间”(A1+A2+A3),而“应用延迟时间”又可以分解为“数据库延迟时间”(A2)和“即时通信服务器延迟时间”(A1+A3)。它们与响应时间的关系可以如下表示:

消息响应时间=网络传输时间+即时通信服务器延迟时间+数据库延迟时间

消息响应时间=(T1+T2+T3+T4)+(A1+A3)+A2



图4.2即时通信的消息响应时间分解

Fig.4.2ResolvingofInstanceMessage’sResponseTime

之所以要对响应时间进行这样的分解,主要目的是为了能更好定位性能瓶颈。

4.1.2并发用户数

(1)并发用户数的概念

如果性能测试时的目标是验证当前系统能否支持现有用户的访问,最好的办法就是获得在同一时间段内访问被测系统的用户数量。使用性能测试工具模拟出与系统的访问用户数相同的用户,并模拟用户的行为,那么得到的测试结果就能够真实反映实际用户访问时的系统性能表现。这里提到的在同一个时间段内访问系统的用户数量,也就是并发用户数的其中一个概念。这个并发的概念通常在性能测试方法中用于从业务的角度模拟真实的用户访问,体现的是业务并发用户数。

如果抛开业务的层面,仅从服务器端所能承受的压力来考虑,那么对C/S结构的应用来说,毫无疑问系统的性能表现主要由服务器端决定。显然,当越多的用户同时使用系统,系统承受的压力越大,系统的性能表现也就越差。而且,此时很可能出现由于用户的同时访问而导致的资源争用等问题。这里提出“并发用户数”的另一个概念。不从业务角度出发,而是从服务器端承受的压力出发,它描述的是同时向服务器发出请求的客户。这个概念一般结合并发测试(ConcurrencyTesting)使用,并体现服务器端承受的最大并发访问数。

(2)估算公式

在实际的性能测试工作中比较关心的是业务并发用户数,也就是从业务角度设置比较合理的并发数。因此,下面的讨论主要是针对业务并发用户数(简称并发用户数)。

根据参考文献[6]中提出的用于估算平均并发用户数的方法,首先对登录会话(loginsession)进行定义。登录会话是由起始时间和结束时间定义的一段时间间隔。在这段时间内保留有一个或多个系统资源。以需要用户验证的应用程序为例,一个登录会话在用户登入系统的时刻开始,并于用户注销的时刻结束。每个由登录会话创建的用户会话都会消耗系统内存,而且它们从开始到结束的时间长度都不同。这里,某一时间片上的并发用户数由时间片中的用户会话数来定义。如图4.3所示。



图4.3某一时间片上的并发用户数

Fig.4.3TheNumberofConcurrentUsersatAParticularTimeInstant

每个水平线段表示一个的登录会话。因为t0时刻有三个登录会话,所以t0时刻的并发用户数为3。一般的,从0到任意时刻T的时间间隔上,并发用户的平均数C可表示为:

C=所有登录会话时间长度的总和÷T

当0到T时刻的登录会话总数为n,且登录会话时间的平均长度为L时,则:

C=nL/T(4.1)

当要估算并发用户数的峰值CP时,可以使用泊松分布对此独立随机事件进行建模。参考文献[6]给出的计算公式如下:

CP≈(4.2)

(3)使用建议

参考文献[6]提供的是一种可行但非最精确的方法。因为在公式(4.1)和(4.2)中仍然要估算“并发用户的平均数”和“登录会话时间长度”,而要精确估算这两个值并不容易。另外,还要考虑到用户的业务操作存在一定的时间集中性,即相对集中地分布在某个时间段内而不是平均分布在整个考察的时间段内。

基于这个方法,提出在使用公式时的一些建议,以便更精确地计算出并发用户数。

首先应该以更细的时间粒度进行考察。例如,可以设定1个小时为考察时间的粒度。对该即时通信系统,将一天的上班时间划分为8个区间,这样就可以解决前面提到业务操作存在的时间集中性问题。

其次要考虑典型的业务模式,因为不同的应用就有不同的模式。例如,一个内部系统一般在上班后30分钟至1个小时内会集中地出现用户登录;一个财务系统在每月中旬结账日的前几天会比较繁忙;一个公司门户网站在重要消息发布的前后会有访问高峰;一个视频点播系统会在休息时段有大量的用户访问等等。因此,在考虑计算并发用户时,可以结合系统所应用的业务模式,多考虑一些可能发生的场景,并基于这些场景进行估算。

4.2即时通信系统性能测试方法论

对性能测试来说,如果没有正确科学的方法论指导,性能测试很容易成为一种随意的测试行为。而随意进行的性能测试很难取得实际作用和预期效果。下面给出本次即时通信系统性能测试过程中使用到的方法。

4.2.1性能下降曲线分析法

性能下降曲线实际上描述的是性能随用户数增长而出现下降趋势的曲线。而这里所说的“性能”一般是指响应时间,但也可以指吞吐量等其他数据。

图4.4给出了一条相对基础的响应时间性能下降曲线示例。



图4.4一条基本的响应时间性能下降曲线图

Fig.4.4ABasicResponseTimeDegradationCurveChart

这张图描绘了用户访问的时间与系统用户负载之间的对比。左边的纵轴是几秒钟内端到端的响应时间,而底部的横轴则是访问系统的用户总数。这张特殊的图中还包含了数据表。随着更多的用户接入系统,图中用户访问的时间就如预料的情况那样增加或减少了。图中数据所生成的是最普遍的响应时间性能曲线形状。95%以上的曲线图都会像该图一样。如果出现较大的偏差,主要原因应从以下几点考虑:

(1)用户群体模型不准确。

(2)编写的脚本不具有用户群体模型代表性。

(3)测试的系统无法处理多用户。

(4)测试没有真正对系统产生压力。

典型的响应时间性能下降曲线可以划分为以下几个部分:

(1)单用户区域

此时段是对系统单用户的响应时间。从图中可以看出,单用户的性能实际上比后面几个级别的多用户性能更慢。这是正常的。因为由负载生成工具生成的单用户响应通常都会稍慢于某些页面的最佳性能,与负载生成工具的工作方式(比如线程)、高速缓存和休眠中的硬盘等有关。仅是单用户接入页面的这种情况可以比喻为在冰天雪地中驾驶汽车。如果汽车没有上路前进行暖车,那么车子的性能可能就会有些迟缓。所以一般情况下不应使用单用户负载作为后续负载测试的参照基准。

(2)性能平坦区

在模仿10到100个用户的区域范围内,可以看到系统获得了更好的性能并在一段时间内保持不变。在测试模型正确的前提下,系统能够在这个区域达到期望的最佳性能而不需要对其进行更多的性能调优。任何位于性能平坦区的测试结果都可以作为后续负载测试的参照基准或基线。根据参考文献[7]提出的观点,应该以性能拐点之前最大用户负载的15%为基准。

(3)压力区域

从图中用户负载在100到175之间的区域可以明显地看到,随着负载的增长响应时间开始延长。从技术上说曲线下降的地方系统正处于压力之下,但基本上还是能够处理负载的。压力区域在响应时间开始缓慢增长的时候开始,并在性能拐点结束。这里就是所谓系统性能“轻微下降”的地方。这也就意味着在此区域的负载增加了,响应时间也会变长,但增长率不是很高。当应用软件进行了全面调整之后,即使在压力区域加上最大的建议用户负载,系统仍然能够在高于此负载的情况下相对较好地运行一段时间。

(4)性能拐点

超过175的用户负载之后,曲线图中的响应时间开始快速增长。系统已不再能很好地处理负载了,接着很可能出现运行不正常甚至不稳定。响应时间的这种变化经常会很快地发生,并在倾斜度或趋势上造成曲线急剧的变化。此处称之为性能拐点。性能拐点处就是系统所能承受的极大负载。在性能测试中此处的负载已成为系统的关键瓶颈并值得去研究其细节,还要尽可能地对系统进行调优。

对性能测试来说,找到这些区域和拐点,也就可以找到性能瓶颈产生的地方。因此,对性能下降曲线分析法来说,主要关注的是性能下降曲线上的各个区间和对应的拐点。通过识别不同的区间和拐点,从而为性能瓶颈识别和调优提供依据。

4.2.2PTGM模型

随着被测试系统的日趋复杂,参考文献[8]提出了一种对性能测试进行管理的方法,该方法基于自动化测试生命周期方法(AutomatedTestLift-CycleMethodology,ATLM)和被广泛采用的TMap模型。这种方法是用的模型称为性能测试过程通用模型(PerformanceTestGeneralModel,PTGM)。

PTGM模型是一个结构化的过程模型。它将性能测试过程分为测试前期准备、测试工具引入、测试计划、测试设计与开发、测试执行和管理以及测试分析等六个步骤,如图4.5所示。



图4.5性能测试过程通用模型

Fig.4.5PerformanceTestingGeneralModel

根据PTGM模型对性能测试过程的描述,下面分别对即时通信系统性能测试的各个阶段进行阐述。

4.3测试前期准备及工具引入

在把握该系统的基本状况之后,开始进行测试前期的准备工作并引入测试工具。

4.3.1系统基本功能的验证

该系统进行性能测试时已经进行了客户端各功能的验收测试,因此在性能测试中不需要额外安排基础功能验证。

4.3.2测试工具需求确认

考虑到即时通信系统测试的要求,确定的测试工具需求如下:

(1)支持HTTP、Jabber/XMPP协议层上的测试。

(2)能监控Linux服务器的主要性能计数器值,例如服务器的内存使用状况、CPU使用状况、磁盘I/O情况等。

(3)能监控Windows服务器的主要性能计数器值,例如服务器的内存使用状况、CPU使用状况、磁盘I/O情况等。

4.3.3性能预备测试

性能预备测试用于对系统建立直观的认识,即在正式开始测试之前体验性地使用SPGEcq客户端的主要功能。根据用户体验,客户端的所有操作均能在5秒之内完成,响应时间相对较长的是登录过程。

4.4测试计划

测试计划阶段需要分析用户活动,确定系统的性能目标。

4.4.1性能测试领域分析

根据对该即时通信系统项目背景的了解,本性能测试要解决的主要问题为:验证系统是否到了预期的性能指标,能否稳定地在当前环境下运行。

这些内容对应于“能力验证”应用领域,可用压力测试的方法对其进行性能测试。

4.4.2用户活动剖析与业务建模

本研究所描述的即时通信系统的建模主要通过分析用户活动来体现。

在对用户活动进行建模的过程中,得到了以下数据:

(1)平均每天使用该系统的总用户数约为160。

(2)平均每个用户的登录会话时间为4小时,即平均每个用户在8小时时间内有4个小时处于“使用系统”的状态。

根据以上数据,用公式(4.1)对并发用户数进行计算:

160×4/8=80(人)

有了这个参考数据就可以进行测试场景的设计。

4.4.3确定性能目标

本性能测试的应用领域已被确定为“能力验证”。于是在确定性能目标时,主要围绕这个方面来讨论。

最终确定的明确的性能需求如下:

(1)系统能够在高于实际系统运行压力1倍的情况下,持续稳定工作8小时:持续稳定工作定义为在系统运行期间,系统的可用资源不会出现持续性减少,客户端响应速度没有显著变化。

(2)在发送消息响应时间要求5秒的情况下,找到系统能够承受的最大用户数量:该要求可以给用户提供一个针对该即时通信系统可扩展性的参考。

表4.1给出了分析整理后的性能需求描述。

表4.1性能需求描述

Tabel.4.1PerformanceDemandDescription

需求内容 需求详细描述 系统能够稳定运行 系统压力条件:高于实际系统运行压力1倍

系统稳定的判定条件:测试过程中,各应用进程的内存使用没有明显变化,响应时间和消息处理能力没有明显变化

测试持续时间:8小时 在消息响应时间要求5秒的情况下,找出系统能够承受的最大用户数量 方法:以“响应时间大于5秒”作为负载测试的结束条件,获得系统能够承受的最大用户数量 对“能力验证”应用领域来说,本测试需要关注的是消息的响应时间、各服务器的资源使用状况,结合性能测试需求,性能目标可以定义如下:

(1)在典型用户数量要求的情况下,服务器CPU平均使用率不高于75%,内存使用率不高于75%;

(2)在稳定性测试的压力情况下,服务器CPU平均使用率不高于95%,内存使用率不高于90%。

4.5测试设计与开发

对本即时通信系统性能测试而言,测试场景关注用户接入系统的数量,以场景来体现性能测试的目的和目标。

4.5.1测试环境设计

本性能测试需要验证即时通信系统在实际应用部署环境上的性能,因此,尽可能选择接近实际生产的环境来进行测试。由于本测试的环境就是实际生产环境,因此在环境设计上,不需要考虑太多的内容。

最终确定的测试环境见表4.2。



表4.2测试环境

Table.4.2TestEnvironment

设备 硬件配置 软件设置 数据库服务器 HP8000服务器,磁盘阵列

CPU12850MHz,24GB内存 Asianuxserver3.0

MySQL5.0 应用服务器 HP8000服务器,磁盘阵列

CPU12850MHz,24GB内存 SPGLinuxserver

Openfire3.6+Tomcat5.0 性能测试控制台 PC机,160GB硬盘

CPU2GHz,1GB内存 LoadRunnerAnalysis

MicrosoftOfficeExcel 负载生产设备 PC机,160GB硬盘

CPU2GHz,1GB内存 WindowsXP

SPGLinuxDesktop

LoadRunnerAgent 表4.2硬件配置中给出了用作测试的基础数据量。

4.5.2测试场景设计

通过分析表4.2的性能需求,可以很容易地为本次测试给出需要的场景。

根据上面给出的数据,设定的总并发用户数为80,表4.3给出了本次测试场景的列表。

表4.3典型测试场景

Table.4.3TypicalTestScenario

场景名称 场景业务及比例分配 测试指标 性能计数器 系统应用典型场景 用户分配:80

用户增长模式:

每15秒增加4个

迭代时间间隔:15分钟

运行时间:8小时 消息响应时间小于5秒 应用服务器的CPU使用率、内存使用率

响应时间 稳定性测试场景 用户分配:典型应用场景用户数的2倍

测试持续时间:8小时 测试过程中,各应用进程的内存使用没有明显变化

测试过程中,响应时间和业务处理能力没有明显变化 应用服务器的CPU使用率、内存使用率

响应时间 4.6即时通信系统性能测试评估

测试执行完成后,通过LoadRunner的Analysis模块,可以对测试过程中得到的性能数据进行分析。

4.6.1基础性能分析

图4.6给出了运行中的虚拟用户与平均传输响应时间的关联图。从该关联图可以看出,随着运行用户数量的阶梯式地增长,应用系统性能的变化趋势也很明显。



图4.6运行虚拟用户数——平均传输响应时间关联曲线

Fig.4.6RunningVusers—AverageTransactionResponseTimeCorrelationCurve

在图4.6中,Vuser的数量从0至10增加时,各事务的性能表现基本保持稳定;当Vuser的数量从10增至30时,事务的响应时间呈缓慢的线性增长状态;当Vuser的数量超过50时,事务的响应时间急剧增加。

根据“性能下降曲线分析法”可以知道,50个用户为“最佳状态下的最大用户并发数”。从图中可以看到,当Vuser增长到50时,基本上所有事务的响应时间都在5秒以内,因此,根据需求和“性能下降曲线分析法”可以得出结论:

(1)在“系统应用典型场景”条件下,被测系统在50个并发用户的访问情况下事务响应时间小于5秒。

(2)Vuser为50是该系统性能表现的拐点。

(3)“文件传输”事务是性能相对最差的事务。

4.6.2建议和结论

查看整个测试过程的每秒点击数以及吞吐量的曲线,如图4.7和图4.8所示。



图4.7每秒点击数的曲线图

Fig.4.7TheCurveDiagramofHitsperSecond



图4.8吞吐量的曲线图

Fig.4.8TheCurveDiagramofThroughput

可以看到在7小时20分左右,吞吐量有一个明显变低的趋势,说明此时应用服务器已经遇到了瓶颈。在7小时25分系统的业务处理能力开始明显变小,基本上达到预期运行8小时的稳定性要求。如果要进一步确定系统的性能瓶颈,可以检查是否由于应用服务器本身的吞吐量限制,从而决定进一步的调优策略。

因为需要关注的是实际运行系统的性能,所以客户端软件在其中扮演的角色非常重要。客户端各功能模块的问题导致运行中整个即时通信系统的性能受到影响。在接下来的二次开发和调优中,就要针对客户端的功能模块,特别是消息模块和插件体系进行修改。

结束语

企业级即时通信软件SPGEcq客户端主要采用Java进行自主研发,基于XMPP的Smack库和Openfire应用服务器平台。它减少了企业级即时通信费用,提高了企业整体的工作效率,促进了企业跨平台软件的正版化。该客户端具有以下优点:

(1)开放源码

SPGEcq客户端软件的源代码遵循GNU较宽松的公共许可证(GNULesserGeneralPublicLicense,LGPL),可向任何人提供开放式的访问。它不仅更易于定制,而且也加强了在所有权环境下的独立性。如先前所述,通过以开源许可证的方式来发布核心代码和基本模块,为开发者社区提供了一种能够改善产品并开放给其用户使用的机会。鉴于开源代码开放式访问的特色,可以轻松并快速地按照自己的需要来定制解决方案,免去了外包定制的昂贵成本和必要性。正是力量使得企业用户可以享受到个人开发、定制或整合的成果加速推进基于国产软件的正版化,通过软件正版化带动本国软件产业的发展。JiveSoftware.Openfire3.6.3Documentation[DB/OL].http://www.igniterealtime.org/projects/openfire/documentation.jsp,2009-01-08.

[3]JabberSoftwareFoundation.ExtensibleMessagingandPresenceProtocol(XMPP):InstantMessagingandPresence[DB/OL].http://www.ietf.org/rfc/rfc3921.txt?number=3921,2004.

[4]章淼.网络互连设备性能测试系统的研究[D].北京:清华大学,2001.

[5]田志伟.基于某省电力公司门户与协同办公系统的性能测试与调优E.M.Wong.MethodforEstimatingtheNumberofConcurrentUsers[DB/OL].

http://www.geocities.com/wongman_eric/Concurrent_Users_Estimation.pdf,2004-10-14.

[7]S.Barber.Userexperience,notmetricsPart10:Creatingadegradationcurve

[DB/OL].http://www.ibm.com/developerworks/rational/library/4244.html,2004-04-21.

[8]段念.软件性能测试过程详解与案例剖析[M].北京:清华大学出版社,2006.

[9]何国伟.软件可靠性[M].北京:国防工业出版社,2003.

[10]Jivesoftware.SmackAPI3.0.4[DB/OL].http://www.igniterealtime.org,2006.

[11]MercuryInteractive.LoadRunnerBooksOnline[CP/DK].MercuryLoadRunner8.1CD,2005-07-25.

[12]CayS.Horstmann,GrayCornell.CoreJava[M].SantaClara:SunMicrosystems,2008.

[13]FreeSoftwareFoundation.GNULesserGeneralPublicLicense[DB/OL].http://www.gnu.org/licenses/lgpl.html,1999.

[14]赵斌.软件测试技术经典教程[M].北京:科学出版社,2007.

[15]柳纯录.软件评测师教程[M].北京:清华大学出版社,2005.







滕彬云企业即时通信客户端的开发与性能测试



玉林师范学院本科生毕业论文(设计)



28



29



滕彬云企业即时通信客户端的开发与性能测试



玉林师范学院本科生毕业论文(设计)







献花(0)
+1
(本文系叮当在线首藏)