企业即时通信客户端的开发及其性能测试_第1页
企业即时通信客户端的开发及其性能测试_第2页
企业即时通信客户端的开发及其性能测试_第3页
企业即时通信客户端的开发及其性能测试_第4页
企业即时通信客户端的开发及其性能测试_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

n(空行,五号字,1.(空行,五号字)(空行,五号字) 玉林师范学院本科生毕业论文(设计)(空行,五号字)(空行,五号字)企业即时通信客户端的开发与性能测试(空行,五号字)Development and Performance Testingof the Enterprise Instant Message Client(空行,五号字)(空行,五号字)(空行,五号字)院 系 数学与计算机科学系 专 业 计算机科学与技术 班 级 xxxxxxxxxxx 姓 名 xxxxxxxx 学 号 xxxxxxxxxxxx (空行,五号字,行高0.7厘米)指导教师单位 数学与计算机科学系 指导教师姓名 xxxxxxxx 指导教师职称 副教授 企业即时通信客户端的开发与性能测试计算机科学与技术xxxx级x班 xxxxx指导教师 xxxxxx摘要当今世界处于信息爆炸式增长并迅速更新的时代。随着网络的发展,即时通信服务深入到人们生活的方方面面。对企业来说,即时消息、语音、视频通信和即时文件传输的利用率非常高。企业级即时通信系统作为未来的主流办公工具,集成了多种先进的信息沟通方式。目前不少即时通信软件都有针对企业的版本。这些软件功能虽然全面,却并不符合许多中小型企业的工作要求。通过深入研究开源的Openfire服务器和Smack API的实现,本系统充分利用更高安全性即时通信协议XMPP,编写接口的工厂类以实现即时通信协议的客户端软件模块。企业级即时通信软件SPGEcq就是从企业工作的实际出发,在大幅减少企业通信费用的同时,提高了企业整体的工作效率,使得企业员工脱离网络聊天所带来的问题。在即时通信、文件传输等功能的基础上,各企业还可以通过二次开发来定制自己的多样性功能和主题,使用丰富的扩展插件来满足自身的需求。此外,本即时通信软件遵循开源的GNU协议,具有跨平台特性。最后本文对系统进行了性能测试。根据测试结果分析, 本文针对存在的系统性能瓶颈进行相应的评估,消除系统性能瓶颈,使系统能够达到预期的性能指标期望值。经过性能测试和调优工作,本系统在思普企业集团SPGLinux上稳定运行至今,并将逐步推动企业集团整体业务的自动化,为企业提供更坚实、更好的系统平台以及更多、更适合的应用。(空行,小四号字)关键词:即时通信,企业级,XMPP,跨平台,性能测试Development and Performance Testing of the Enterprise Instant Message ClientComputer Science and Technology 2005-2 Teng Bin-yunSupervisor Li Chao-jianAbstractThe current world locates in the period of information explosive growth and rapid update. As the network developed, instant message service gets into the various facets of peoples lives. For enterprise, instant message, voice, video communication and instant file transfer have very high rate of apply. To be the future mainstream in office tools, enterprise instant message system integrates various advanced way for information communication. At present, much instant message software have the version for enterprise. They have complete functions but not fit with the work demand in many small and medium-sized enterprises.Through deeply researching the implement of open-source Openfire server and Smack API, the system plenty uses the higher security instant message protocol XMPP and carries out the instant message protocols client software module by writing the factory class of interface code. Enterprise instant message software SPGEcq starts with the practical work of enterprise and improves the whole work efficiency that employee gets rid of the problem of network chat, as well as reduces the enterprise communication cost by a big margin. On basis of the functions like instant message and file transfer, various enterprises customize their own various functions and theme by repeatedly development and use plenty of extended plug-in to fulfill their own requirements. Furthermore, the instant message software keeps to the open-source GNU license and has got the feature in cross-platform.At last the study makes the system performance test. On basis of test result analysis, we evaluate the existent system performance bottleneck corresponding, and eliminate it for reaching the expectation of performance guideline. Through the work of performance test and optimizing, the system will be running stably in Sipu Groups SPGLinux to this day. It will work up the whole business automatization of group, and provides more stable, better system platforms as well as much more and more suitable applications for enterprise.(空行,小四号字)Key words:instant message, enterprise level, XMPP, cross-platform, performance test目录1 前言当今世界处于信息爆炸式增长并迅速更新的时代。为适应新的经济竞争环境,现代企业特别是中小企业的沟通越来越快,对效率的要求也越来越高,企业内部的团队工作中的协调沟通必须即刻达成,顺畅的沟通对生产效率、管理质量起到至关重要的作用。否则将影响项目的整体推进,也难以迅速应对瞬息变化的市场需求。随着网络的发展,即时通信服务深入到人们生活的方方面面。由于即时通信的方便快捷,它的出现大大改变了传统的邮件交流方式。在异步通信已无法满足办公需求的情况下,好的即时沟通平台能够帮助实现高效沟通。1.1 即时通信软件的现状和特点1.1.1 即时通信软件的现状随着当今信息社会对信息的需求越来越强烈,人们已经不满足于通过互联网、邮件、电视等媒体获得信息量了,他们对于信息的及时性要求越来越高。对于外界的联系人们也不仅局限于电子邮件和电话,还需要更快的联系方式即时通信(Instant Message, IM),以便可以随时随地传递信息。即时通信软件是互联网应用工具软件,IM软件的历史并不久远,但是它一诞生,就立刻受到互联网用户的喜爱,并风靡全球。它的沟通能力再次焕发出无限光彩。除了“聊天”之外,它更多地显示出了商务通信、居家办公的卓越性能,可以说是目前我国上网用户使用率最高的软件。据2008-2009中国企业即时通信市场研究年度报告称,在基于互联网工作中使用即时通信服务的人将在未来几年内大幅度增加,而2008年全球每天发送的即时通信消息已超过一万亿条。如图1.1所示,下面是人们使用即时通信软件的主要目的。图1.1 使用即时通信的主要目的Fig.1.1 The Main Purpose of Using IM1.1.2 当前即时通信软件的特点个人即时通信软件在企业的应用中存在着许多不足之处。首先,通常从安全和管理的角度出发,企业不接受接入互联网的服务,也就限制了这些软件的使用;其次,由于这些软件主要侧重聊天和娱乐,存在繁杂的功能将影响工作效率;另外,注册用户不需要验证身份证,这导致了在传输过程中企业的敏感数据极其容易被窃取,并且数据的安全性不能得到有效的保障。现在流行诸多的IM通信协议中,大都是封闭协议,不同的IM之间是相对封闭的,无法互通。而Jabber作为一种开放的标准化IM协议(已被IETF标准化)3将引发一股不断开放的IM潮流。目前开源的即时通信软件已经成为IM发展的一个新亮点。开源的即时通信协议和相关软件作为沟通交流手段多元化的重要组成部分,具有良好的发展前景。目前,在国外有许多优秀的开源即时通信平台协议,其中包括应用最广泛的分布式Jabber协议核心可扩展的消息现场协议(Extensible Messaging and Presence Protocol,XMPP)。Jabber作为一种开放的体系架构,具有良好的可扩展性、安全性及其在开源界良好的支持,能作为开发企业级客户端的最佳选择。SPGEcq是一种基于Jabber的开源IM客户端,具有多种功能,提供了良好的安全性支持和插件开发支持,并且具备优良的可扩展性。下面介绍开源的SPGEcq客户端软件。SPGEcq是一款开放源代码和跨平台的即时通信客户端。它具有支持内置群组聊天、电话集成和强大的安全性。同时它也提供了非常好的终端用户体验特性,如在线拼写检查、群组聊天室书签和标签对话框。通过与Openfire服务器的配合,SPGEcq是最容易的也是最佳的,作为替代使用非安全公共即时通信网络软件的客户端。它插件动态扩展了即时通信客户端的功能特性。为了企业级或组织的应用,以及为即时通信的转变注入创新理念。扩展插件的应用编程接口(Application Programming Interface, API)充实了客户端的适应性,却依然能使它用起来简单有趣。SPGLinux操作系统下的SPGEcq如图1.2所示。图1.2 SPGLinux的SPGEcq客户端Fig.1.2 SPGEcq Client for SPGLinux1.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客户端的作者Derek DeMoro和ignite realtime社区的爱好者们进行咨询,寻求指导。(3)对现有的Smack库和Openfire即时通信系统进行分析,从而得到更多有益的启发。(4)从图书馆、网络等各种渠道检索所需要的信息,尤其是关于开源即时通信平台的相关文档。2.1.3 功能划分客户端的功能模块分为账号创建、登录管理、联系人管理、群组管理和消息管理等。如图2.1所示。图2.1 客户端功能图Fig.2.1 Client Functional Diagram2.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.2 Use Case for Client(2)类图类图是面向对象最常用的图,描述了类集、接口集、协作及它们之间的关系。图2.3 客户端工厂类的类图Fig.2.3 Class Diagram of Client Manufactory Class以上工厂类是客户端API架构的关键。它们可以获得由Smack库提供的实例,例如XMPPConnection或ChatContainer等,并获取Openfire服务器的信息,与其他客户端进行通讯。而其中的SparkManager是其他工厂类的一个“工厂类”。可以对Smack API 进行更深入地使用。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)后台数据库:MySQL for Linux(3)运行环境:Openfire for Linux(4)集成开发环境:Eclipse for Linux(5)操作系统:SPGLinux Desktop开发使用的硬件环境如下:(1)PC机配置:AMD 3600+ CPU,1GB内存(2)存储器容量:160GB SATA硬盘(3)网络类型:TCP/IP网络3.2 SPGEcq客户端的实现下面将对基于Smack库和Openfire服务器的SPGEcq客户端软件的一些具体设计和实现进行说明,着重软件的工厂类部分。3.2.1 登录对话框图3.1 SPGEcq登录对话框Fig.3.1 Login Dialog of SPGEcqLoginDialog类负责创建登录窗口,初始化SPGEcq及其插件。下面是类方法的功能描述:public final class LoginDialog./* 调用LoginDialog使其可见* 参数:登录对话框的parentFrame*/public void invoke(JFrame parentFrame)./* * 取得用户名和密码,执行监听器 */private final class LoginPanel extends JPanel implements KeyListener, ActionListener, FocusListener, CallbackHandler./* * 初始化客户端及其所有插件,调用主窗体,创建workspace布局。 */private void startSpark()/* * 由代理配置更新系统特性。 */private void updateProxyConfig() throws Exception/* * 定义背景,使用登录面板,在背景上画图。 */public class LoginBackgroundPanel extends JPanel/* 图像面板显示SPGEcq徽标。 */public class ImagePanel extends JPanel/* * 检查历史客户端设置settings.xml文件和升级用户。 */private void checkForOldSettings() throws Exception/* * 使用DNS查找密钥分配中心(KDC),假设用SRV记录等找到KDC。 * 参数realm:查找的范围。 * 返回:KDC主机名。 */private String getDnsKdc(String realm)3.2.2 账户创建向导图3.2 建立新账号向导对话框Fig.3.2 Account Creation Wizards Dialog返回新用户在注册对话框中的用户名、密码、确认密码和服务器。若判断两次输入密码一致,则由提供的信息创建新的账户。public class AccountCreationWizard extends JPanel/* * 构造AccountCreationWizard的用户界面,添加组件。 */public AccountCreationWizard()./* * 返回新账户的用户名。返回其他填写的字符串方法与之类似。 */public String getUsername()/* * 如果两次密码匹配则返回真。 */public boolean isPasswordValid()/* * 使用提供的信息创建新账户。 */private void createAccout()/* * 在账户创建失败时被调用。 * 参数:错误代码errorCode */private void accountCreationFailed(int errorCode)/* * 在账户创建成功时被调用*/private void accountCreationSuccessful()/* * 援引AccountCreationWizard。 * 参数:使用父框架parent */public void invoke(JFrame parent)/* * 创建基于用户设定的XMPPConnection。 * 返回创建的XMPPConnection。 * 抛出XMPPException */private XMPPConnection getConnection() throws XMPPException/* * 如用户已注册返回真 * 返回真或假 */public Boolean isRegistered()3.2.3 联系人列表图3.3 联系人列表面板Fig.3.3 Contact List Panel对列表中的联系人分组及联系人进行操作。public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener /* * 更新用户现场。 * 参数:用户更新的presenece。 * 如果更新用户的现场时出现问题则抛出异常。 * 如果用户在线,检查是否在离线组。如果是就从离线组移除* 并添加到他们所属的所有组 */private synchronized void updateUserPresence(Presence presence) throws Exception/* * 更新基于他们JID的个人单独现场。 * 参数:用户现场presence,被更新的名单登记entry* 参数:用户呈现的jid号barejid */private void updateContactItemsPresence(Presence presence, RosterEntry entry, String bareJID)/* * 移动每个与所给出bareJID相关的ContactItem。 * 参数:用户现场presence,用户的bareJID。 */private void updateContactItemsPresence(Presence presence, RosterEntry entry, String bareJID)/* * 移动用户到他所属的每个群组。 * 参数:显示为在线用户的bareJID,用户的RosterEntry值entry。 * 参数:用户的现场presence。 */private void changeOfflineToOnline(String bareJID, final RosterEntry entry, Presence presence)/* * 建立初始化的联系人列表时被调用。 */private void buildContactList()/* * 当NEW账户被添加时调用 * 参数:被添加的地址addresses */public void entriesAdded(final Collection addresses)/* * 添加一个用户到联系人列表 * 参数:用户的名册登记RosterEntry值entry */private void addUser(RosterEntry entry)/* * 当基于预订通知的名册改变时进行处理。 * 参数:被更新的登记列表addresses。 */public void entriesUpdated(final Collection addresses)3.2.4 文件传输管理图3.4 传送文件按钮Fig.3.4 Transfer File ButtonSparkTransferManager类中包含了完成文件传输工作的方法。public class SparkTransferManager/* * 返回一个工厂类SparkTransferManager的实例,如果有必要就创建它。 * 并确保同步锁定以防创建了两个实例。 */public static SparkTransferManager getInstance()/* * 发送文件给用户。 * 参数:要发送的文件file,文件要发送给的用户jid号jid。 * 返回用户的聊天室ChatRoom */public ChatRoom sendFile(File file, String jid)/* * 发送图片给用户。 * 参数:要发送的图片image,要发送图片给用户所在的聊天室room */public void sendImage(final BufferedImage image, final ChatRoom room)/* * 如果在剪贴板有一张图片则返回那张图片,否则返回null */public static BufferedImage getClipboard()/* 把一个新的传输监听器TransferListener添加到工厂类SparkManager。* 文件传输监听器FileTransferListeners能用来截取自己定制的传入文件。* 参数:监听器listener。 */public void addTransferListener(FileTransferListener listener)/* * 移除文件传输监听器。 * 参数:监听器listener */public void removeTransferListener(FileTransferListener listener)/* * 设置当前默认存储文件的目录。 * 参数:默认目录directory。 */public void setDefaultDirectory(File directory)/* * 返回文件选择器给用户。 * 参数:父组件component,标题title。 */public FileDialog getFileChooser(Frame parent, String title)3.3客户端的启动SPGEcq客户端的启动主要由Startup类来完成,包含main()方法。public class Startup /* * 如果没有指定位置时使用默认值。 */private static final String DEFAULT_LIB_DIR = ./lib;/* * main()方法调用Startup对象的start方法获得参数。 */public static void main(String args) new Startup().start(args);/* * 通过加载和实例化自举容器启动服务器。一旦启动方法被调用, * 服务器就启动了,并且服务启动器不再被使用。 * 使用JiveClassLoader建立classpath。 * 解压缩lib里的打包文件和插件并将它们加载到类装载器。 * 参数:SPGEcq初始的实例转变的变量args */private void start(String args)/* * 转换在目录里的任何打包文件为标准的JAR文件。* 每个打包文件转换完成后被删除。没有打包文件时,该方法什么也不做。* 参数:包含打包文件的目录libDir,解包时是否要显示状态printStatus */private void unpackArchives(File libDir, boolean printStatus)4 即时通信系统的性能测试即时通信系统的性能测试属于黑盒测试。性能测试方法是通过模拟生产运行的业务压力和所使用的场景组合,测试系统的性能是否满足生产性能要求。这种方法主要的目的是验证系统是否达到其所规划的能力,要求运行环境必须是已经确定的。因为软件系统的性能表现与非常多的因素相关,要求测试时的硬件设备、软件环境、网络条件和基础数据等必须都已经确定。4.1 即时通信系统性能测试中使用的统计量目前在性能测试中使用的统计量包括:响应时间(Response Time)、并发用户数(Number of Concurrent Users)、吞吐量(Throughput)、性能计数器(Performance Counter)和思考时间(Think Time)等。4.1.1 响应时间响应时间的定义为:对请求做出响应所需要的时间。响应时间是用户视角的软件性能的主要体现。具体来说,当用户单击一个按钮、发出一条消息,从用户单击开始到应用系统把本次操作的结果以用户能察觉的方式展示出来,这个过程所消耗的时间就是用户对软件性能的直观印象。以本即时通信系统为例,图4.1说明了用户的这种印象。图4.1 即时通信系统的响应Fig.4.1 Response of IM System图4.1将用户所感受到的响应时间划分为“呈现时间”和“系统响应时间”两个部分,其中“呈现时间”取决于数据在客户端收到响应数据后被处理并呈现页面所消耗的时间;而“系统响应时间”指即时通信系统从请求发出开始到即时通信客户端接收到数据所消耗的时间。响应时间可以被进一步分解。图4.2描述了一个消息传输响应时间的构成。从图中可以看到,消息的响应时间可被分解为“网络传输时间”(T1+T2+T3+T4)和“应用延迟时间”(A1+A2+A3),而“应用延迟时间”又可以分解为“数据库延迟时间”(A2)和“即时通信服务器延迟时间”(A1+A3)。它们与响应时间的关系可以如下表示:消息响应时间=网络传输时间即时通信服务器延迟时间数据库延迟时间消息响应时间=(T1T2T3T4)(A1A3)A2图4.2 即时通信的消息响应时间分解Fig.4.2 Resolving of Instance Messages Response Time之所以要对响应时间进行这样的分解,主要目的是为了能更好定位性能瓶颈。4.1.2 并发用户数(1)并发用户数的概念如果性能测试时的目标是验证当前系统能否支持现有用户的访问,最好的办法就是获得在同一时间段内访问被测系统的用户数量。使用性能测试工具模拟出与系统的访问用户数相同的用户,并模拟用户的行为,那么得到的测试结果就能够真实反映实际用户访问时的系统性能表现。这里提到的在同一个时间段内访问系统的用户数量,也就是并发用户数的其中一个概念。这个并发的概念通常在性能测试方法中用于从业务的角度模拟真实的用户访问,体现的是业务并发用户数。如果抛开业务的层面,仅从服务器端所能承受的压力来考虑,那么对C/S结构的应用来说,毫无疑问系统的性能表现主要由服务器端决定。显然,当越多的用户同时使用系统,系统承受的压力越大,系统的性能表现也就越差。而且,此时很可能出现由于用户的同时访问而导致的资源争用等问题。这里提出“并发用户数”的另一个概念。不从业务角度出发,而是从服务器端承受的压力出发,它描述的是同时向服务器发出请求的客户。这个概念一般结合并发测试(Concurrency Testing)使用,并体现服务器端承受的最大并发访问数。(2)估算公式在实际的性能测试工作中比较关心的是业务并发用户数,也就是从业务角度设置比较合理的并发数。因此,下面的讨论主要是针对业务并发用户数(简称并发用户数)。根据参考文献6中提出的用于估算平均并发用户数的方法,首先对登录会话(login session)进行定义。登录会话是由起始时间和结束时间定义的一段时间间隔。在这段时间内保留有一个或多个系统资源。以需要用户验证的应用程序为例,一个登录会话在用户登入系统的时刻开始,并于用户注销的时刻结束。每个由登录会话创建的用户会话都会消耗系统内存,而且它们从开始到结束的时间长度都不同。这里,某一时间片上的并发用户数由时间片中的用户会话数来定义。如图4.3所示。图4.3 某一时间片上的并发用户数Fig.4.3 The Number of Concurrent Users at A Particular Time Instant每个水平线段表示一个的登录会话。因为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.4 A Basic Response Time Degradation Curve Chart这张图描绘了用户访问的时间与系统用户负载之间的对比。左边的纵轴是几秒钟内端到端的响应时间,而底部的横轴则是访问系统的用户总数。这张特殊的图中还包含了数据表。随着更多的用户接入系统,图中用户访问的时间就如预料的情况那样增加或减少了。图中数据所生成的是最普遍的响应时间性能曲线形状。95%以上的曲线图都会像该图一样。如果出现较大的偏差,主要原因应从以下几点考虑:(1)用户群体模型不准确。(2)编写的脚本不具有用户群体模型代表性。(3)测试的系统无法处理多用户。(4)测试没有真正对系统产生压力。典型的响应时间性能下降曲线可以划分为以下几个部分:(1)单用户区域此时段是对系统单用户的响应时间。从图中可以看出,单用户的性能实际上比后面几个级别的多用户性能更慢。这是正常的。因为由负载生成工具生成的单用户响应通常都会稍慢于某些页面的最佳性能,与负载生成工具的工作方式(比如线程)、高速缓存和休眠中的硬盘等有关。仅是单用户接入页面的这种情况可以比喻为在冰天雪地中驾驶汽车。如果汽车没有上路前进行暖车,那么车子的性能可能就会有些迟缓。所以一般情况下不应使用单用户负载作为后续负载测试的参照基准。(2)性能平坦区在模仿10到100个用户的区域范围内,可以看到系统获得

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论