构建高性能WebSphere企业级应用

分類: 图书,计算机/网络,企业软件开发与实施,
作者: 孙磊 等编著
出 版 社: 电子工业出版社
出版时间: 2008-5-1字数: 560000版次: 1页数: 421印刷时间: 2008/05/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787121063176包装: 平装编辑推荐
IBM中国开发中心技术经典呈现;
构建高性能Websphere企业及应用
1.作者以自身实际参与的Websphere电子商务应用系统为背景,重点讨论在构建高性能WebSphe re企业级应用过程中,各个环节可能遇到的性能问题和解决方案。
2.从基本的原理到特定问题的处理细节,本书都有较为全面的介绍,作者提供了大量实用的性能优化技巧,以及多种性能相关工具的使用心得。对于Websphere企业级应用中常见的死锁问题、内存使用问题等,作者进行了独到的分析并提供了对应的解决方案。
3.在内容组织上注重理论联系实际,以实践经验分享为主。对于各种提高性能的原则或工具,重点介绍作者在实际开发、测试和维护T作中的具体使用经验,即作者在实际工作中的做法,以及为什么这样做。
4.读者对象:Websphere应用系统的开发人员、测试人员、实施人员和系统维护人员。同时,本书也可以作为高校网络应用系统开发课程的教学参考书。
内容简介
本书主要讲述如何构建高性能的WebSphere企业级应用系统,在阐述与性能相关的概念的基础上,重点介绍作者在开发、测试和维护WebSphere应用系统过程中为提高系统性能所进行的探索,以及在解决实际性能问题过程中所积累的经验。
全书由三部分组成,第一部分综述篇介绍构建高性能WebSphere企业级应用的基本原理和相关概念。第二部分技术篇以WebSphere企业级应用的整个生命周期为主线,从架构、设计、开发、测试等多个环节来介绍与性能相关的理论和经验。第三部分实践篇分专题通过实例讨论如何解决WebSphere企业级应用中几个常见的性能问题,以及由此总结出来的提高系统性能的方案。
本书适用于有一定WebSphere应用开发、测试和系统维护项目经验的人员,也可以作为高等院校计算机相关专业学生的教学参考书。
作者简介
孙磊,北京大学计算机科学与技术系硕士,IBM中国软件开发中心高级软件工程师。2003年加入IBM中国开发中心至今,一直从事WebSphere企业级电子商务应用的测试和性能优化工作。兴趣包括J2EE应用性能理论模型,富客户端程序性能优化等。
目录
第1部分综述篇
第1章性能与WebSphere企业级应用
1.1WebSphere企业级应用
1.1.1WebSphere应用
1.1.2企业级应用
1.1.3电子商务应用
1.2性能问题
1.2.1一个虚构的场景
1.2.2性能问题的现象
1.2.3性能问题的影响
1.2.4性能相关概念
1.3构建高性能WebSphere应用
1.3.1WebSphere应用性能影响因素
1.3.2性能与应用系统的生命周期
1.3.3构建高性能应用的角色与任务
1.4小结
第2章基本性能指标与性能模型
2.1性能指标
2.1.1负载指标
2.1.2运行指标
2.1.3资源占用指标
2.1.4各指标之间的关系
2.2理论分析
2.2.1理论模型与实际问题
2.2.2实例分析:漏斗模型
2.3缓存技术与性能模型
2.3.1提升系统性能的途径
2.3.2WebSphere动态高速缓存技术
2.3.3动态高速缓存性能模型
2.3.4WebSphere 6.1对动态高速缓存的改进
2.4小结
第2部分技术篇
第3章WebSphere应用性能规划
3.1性能规划的一般过程
3.1.1理解应用环境
3.1.2系统负载分析
3.1.3软件结构中的性能设计
3.1.4硬件结构中的性能设计
3.2拓扑结构设计
3.2.1WebSphere应用拓扑结构
3.2.2实例分析:电子商务应用拓扑结构设计
3.3系统容量规划
3.3.1容量规划的范围
3.3.2CPU容量规划的理论模型
3.3.3实例分析:电子商务应用容量规划
3.4小结
第4章WebSphere高性能编程
4.1MVC结构与高性能编程
4.1.1MVC结构
4.1.2电子商务应用分层结构
4.1.3提高性能的一般原则
4.2控制层
4.2.1一般性建议
4.2.2电子商务应用最佳实践
4.3模型层
4.3.1一般性建议
4.3.2电子商务应用最佳实践
4.4视图层
4.5其他最佳实践
4.5.1内存使用
4.5.2数据软删除
4.5.3缓存与滞后取
4.5.4数据库编程
4.6小结
第5章WebSphere应用性能测试
5.1性能测试概述
5.1.1性能测试的一般方法
5.1.2性能测试的一般流程
5.2电子商务应用性能测试
5.2.1制定测试计划
5.2.2执行测试
5.2.3管理测试资产
5.2.4常见问题处理
5.3性能测试工具
5.3.1常见性能测试工具
5.3.2选择负载测试工具
5.3.3测试工具发展趋势
5.4小结
第6章企业级应用性能监视
6.1性能监视概述
6.1.1监视对象与监视策略
6.1.2监视级别
6.2操作系统监视
6.2.1nmon
6.2.2top和topas
6.2.3vmstat和iostat
6.2.4typeperf
6.2.5zVM监视
6.3WebSphere应用服务器监视
6.3.1Tivoli性能查看器
6.3.2高速缓存监视器
6.4数据库服务器监视
6.4.1DB2性能监视
6.4.2Oracle监视
6.5生产环境性能监视
6.5.1Tivoli产品家族
6.5.2ITCAM监视工具
6.6小结
第7章性能问题分析与诊断
7.1性能问题诊断的一般过程
7.1.1自顶向下分析与自底向上分析
7.1.2电子商务应用的问题诊断过程
7.2WebSphere应用日志分析
7.2.1Web服务器日志
7.2.2应用服务器日志
7.2.3数据库服务器日志
7.2.4日志分析工具
7.3WebSphere应用程序运行剖析
7.3.1Heap分析
7.3.2JInsight
7.3.3TPTP分析平台
7.3.4ITCAM
7.4小结
第8章WebSphere应用性能参数调优
8.1参数调优概述
8.1.1一般过程
8.1.2基本原则
8.1.3参数调优与性能测试
8.2电子商务应用经验参数
8.2.1操作系统调优参数
8.2.2Web服务器调优参数
8.2.3数据库服务器调优参数
8.2.4应用服务器调优参数
8.2.5硬件配置
8.3性能参数调优实例介绍
8.4小结
第3部分实践篇
第9章死锁问题实例分析
9.1死锁的原理
9.1.1抽象死锁原理
9.1.2DB2锁管理机制
9.2死锁问题处理的一般过程
9.2.1发现死锁
9.2.2解决死锁
9.3常见死锁问题处理实例
9.3.1RUNSTATS
9.3.2缺少索引
9.3.3SQL语句不合理
9.3.4资源访问顺序问题
9.3.5隔离级别问题
9.3.6意外更新记录
9.4小结
第10章内存使用问题实例分析
10.1WebSphere内存管理
10.1.1Java虚拟机与垃圾回收机制
10.1.2WebSphere应用中的JVM内存管理
10.2WebSphere内存问题分析
10.2.1内存问题分析的一般过程
10.2.2垃圾回收分析工具
10.3常见内存问题实例
10.3.1JVM堆大小问题
10.3.2固定对象问题
10.3.3大对象问题
10.3.4缓存大小问题
10.3.5内存泄漏问题
10.4小结
第11章性能下降问题实例分析
11.1性能下降问题
11.1.1常见现象和产生原因
11.1.2分析和解决过程
11.2自顶向下分析实例
11.2.1问题背景
11.2.2自顶向下分析过程
11.3数据库引起的性能下降问题实例
11.3.1问题背景
11.3.2分析与解决过程
11.4小结
第12章动态高速缓存实例分析
12.1动态高速缓存设计
12.1.1基本缓存策略
12.1.2整页缓存与片段缓存
12.1.3命令缓存
12.1.4磁盘缓存
12.1.5外部缓存
12.1.6失效处理
12.1.7缓存复制
12.2实例分析:B2C网站动态高速缓存的设计与实现
12.2.1缓存需求分析
12.2.2整页缓存:产品目录页
12.2.3片段缓存:迷你购物车
12.2.4命令缓存:组织查询
12.2.5缓存配置参数设计
12.2.6缓存部署与验证
12.2.7缓存预加载机制
12.3动态高速缓存常见问题处理
12.3.1页面内容重复
12.3.2缓存内容错误
12.3.3JVM内存不足
12.3.4磁盘I/O导致性能下降
12.4小结
附录A测试工具介绍
附录B操作系统监视工具介绍
附录C动态高速缓存辅助资料
参考文献
术语表
书摘插图
第1章性能与WebSphere企业级应用
本书名为“构建高性能WebSphere企业级应用”,本章就先界定什么是w曲sphere企业级应用,什么是性能向题。WebSphere应用多种多样,性能问题千变万化。长书的讨论范围限定为类似于电子商务应用的WebSphere Web应用系统,涉及的性能问题是一些比较常见的性能问题。
本章还介绍了性能问题在构建应用系统生命周期的各个环节的表现,影响系统性能的各种人员角色及其任务。
1.1WebSphere企业级应用
经过多年的产品开发与市场推广,webspnere系列产品与技术日趋完善。开发WebSphere应用早已不是什么新鲜事。但对于什么应用可以称为企业级应用,并没有一个清晰的解释。很多软件都有企业版,但对于企业版与其他版本有何区别,许多人也并不了解。
1.1.1WebSphere应用
顾名思义,WebSphere应用(WebSphere Application)是基于WebSphere开发的应用程序(Application)。
WebSphere是国际商业机器有限公司(IBM)的五大软件品牌之一。WebSphere提供一个集成软件平台。它包含编写、运行和监视随需应变的Web应用程序和跨平台解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
WebSphere应用服务器(WebSphere Application Server)是整个基础设施的基础,所有其他产品都在它之上运行。准确地说,WebSphere应用是运行于WebSphere应用服务器之上的应用程序。
WebSphere产品被称为中问件产品,是指WebSphere产品(尤其是WebSphere应用服务器)处于应用程序与操作系统之间。WebSphere应用程序的逻辑结构如图1.1所示。
从某种意义上说,中间件技术的出现是为了简化应用程序的开发。WebSphere应用程序调用中间件产品提供的功能和服务而不是操作系统提供的接口实现高层的功能。因此,WebSphere应用程序可以非常简单地实现跨平台和跨产品服务。
WebSphere应用系统(WebSphere Application System)是指以WebSphere应用程序为核心的提供服务的完整系统。该系统一般包括硬件和软件,软件包括支持应用程序运行的各个组成部分:操作系统、WebSphere应用服务器,以及其他支持软件(如数据库服务器、Web服务器等)。如果没有特别声明,本书后面凡提到WebSphere应用的场合均指WebSphere应用系统。
1.1.2企业级应用
许多软件产品都有企业版(Enterprise Edition)或商业版(Business Edition),以区别于专业版(Professional Edition)或标准版(Standard Edition)。不同的产品有不同的版本定位策略,各个版本之间的差别也没有一个统一的标准。但一般而言,企业版或商业版都是整个产品线中最高级别的版本。
本书题目中的企业级应用(Enterprise Application)也是指与一般的中小型或非商业应用相区别的应用,而不是泛指使用Java 2企业版(Java 2 Enterprise Edition)技术构建的应用。本书所特指的企业级应用,通常都为大中型企业维持生产运行提供服务。中断这些应用系统的正常运行,对整个企业的营业利润会造成巨大的影响,所以,对企业级应用的各方面都有严格的要求。比如安全性,企业级应用的数据通常都是企业的核心业务数据,对这些核心业务数据的非法访问可能为企业带来非常严重的损失。又比如数据准确性和完整性,对某些重要交易数据的错误处理可能带来包括法律诉讼在内的严重后果。此外,最常见、也是本书想强调的就是对性能的严格要求。
在澄清有关性能的具体概念之前,这里先对企业级应用的性能需求进行一些感性的描述。
首先,企业级应用往往需要承担很大规模的业务负载。以作者参与的某个电子而务应用系统为例,该系统有四百万用户定期访问,平均每小时要处理三百万次Web页面访问。比这更大的业务负载在企业级应用中也很常见。
其次,企业级应用的运行往往支撑着企业的核心业务,所以,要求应用程序能够提供7乘24小时的不间断服务。仍以上面提到的电子商务应用系统为例,该系统平均每小时会产生一万个订单(Order)。按照平均每个订单的交易金额为一百美元计算,平均每小时的交易金额为一百万美元。也就是说,该系统的正常运行每中断一小时,就可能带来一百万美元的经济损失。
再次,企业级应用对应用程序的处理速度(或运行效率)要求很高。前面提到的系统平均每小时要处理一万个订单,也就是说,系统需要在大约三分之一秒内处理完一个订单。这看起来似乎并不是很快。但如果考虑到系统同时还要应付每小时三百万次页面访问,商业应用中订单的业务逻辑又非常复杂,此外还要兼顾数据安全性、完整性的要求,三分之一秒内处理完一个订单已经对应用程序的处理速度提出了非常高的要求。
总之,在商品经济社会,一个企业花费巨额资金构建一个企业级应用,是为了带来更多的利润。如果这个企业级应用不能带来经济效益,那么,就没有必要构建它。所以,作者更愿意将企业级应用称为商业应用(Business Application)。企业级用户对应用程序运行的要求总是越快越稳定(或者说性能越高)越好。因此,高性能是一个应用能成为企业级应用的重要前提。
1.1.3电子商务应用
本书是一本经验分享型的书,书中介绍的是作者在开发、测试和维护WebSphere企业级应用系统过程中的实践经验。为了使读者更容易理解书中提到的性能问题或系统结构,有必要介绍一下作者所参与的企业级应用系统的背景。作者所参与的主要是IBM提供的电子商务解决方案或应用系统,在本书中简称电子商务应用。
电子商务本身是一个比较宽泛的概念,本书中所提到的电子商务应用特指由IBM提供的在WebSphere平台上构建的电子商务(e-Commerce)解决方案。按照前两节的概念,作者参与的电子商务应用(e-Commerce Application)是一个构建于WebSphere平台上的企业级应用。该应用的客户都是企业客户,客户搭建该应用是为了构建网络或其他渠道上的交易平台。这些企业的最终用户可以通过该电子商务应用进行企业对客户(B2C)或企业对企业(B2B)的交易活动。如前所述,绝大部分企业客户对作者开发的电子商务应用的性能都有很高的要求,所部署的应用也通常要面对非常高的业务负载。企业客户投入很多资金购买和构建作者参与的电子商务应用,电子商务应用也给客户带来了可观的经济效益。比如,某大客户目前70%的营业收入是通过电子商务应用的业务渠道获得的。
本书后面绝大部分讨论都是以该应用为背景介绍的,本节就对该应用的大体结构及相关概念进行简单的介绍。
用一句话概括,作者参与的电子商务应用的功能设计是为企业用户提供企业对企业(B2B)或企业对客户(B2C)的电子商务解决方案。它提供一组紧密集成的软件模块,帮助企业客户实现快速的、高度自动化的跨渠道营销和销售流程。电子商务应用的功能如图
1.2所示。
电子商务应用对最终用户(购买客户)提供的界面是丰富多彩的电子商店。购买客户可以通过各种渠道访问电子商店:可以是Web浏览器,也可以是各种智能终端设备,或者通过电话联系客户经理进行交易。
电子商务应用为企业业务人员提供各种各样的管理功能:审批订单、修改库存等。业务人员也可以通过多种渠道访问这些管理功能:可以是Web浏览器,也可以是基于Eclipse技术的富客户端工具。
电子商务应用支持多渠道(multi.channel)的访问方式,所以,作者在工作中遇到的性能问题也不局限于Web应用中的问题。不过,目前Web仍然是最主要的访问渠道,因此,本书中的讨论也以Web应用中的性能问题为主。
电子商务应用内部最核心的概念是商业模式(Business Model)和业务流程(Business Process)。B28和B2C就是完全不同的商业模式。电子商务应用内部的功能都围绕这些商业模式和业务流程展开。
电子商务应用可以独立地为客户提供服务,它也可以和客户的其他业务系统合作,为客户提供完整的解决方案:客户关系管理系统(CRM)、企业资源计划系统(ERP)等。电子商务应用可以通过包括Web服务在内的多种集成接口和这些业务系统进行集成。
电子商务应用内部划分为一些小的功能模块。如订单处理(Order Management)、产品目录和内容管理(Catalog and Content Management)等。
电子商务应用提供了相当丰富的预置(Out Of Box)功能,用户使用这些功能就可以搭建一个完整的网上商店。电子商务应用也提供了开发环境和二次开发接口,大客户的开发人员(或IBM的技术服务人员)可以在其基础上进行定制开发(Customization)。所以,作者遇到的性能问题有一些来自于电子商务应用的核心代码(产品开发),另外一些则来自于用户的定制开发代码(项目开发)。
在电子商务应用的开发和维护过程中遇到的性能问题涵盖的范围很广,但限于篇幅和作者的亲身经验,本书讨论的性能问题只是其中的一小部分。
1.2性能问题
前一节介绍了什么是WebSphere企业级应用,以及性能对企业级应用的重要性。本节讨论什么是性能,通过介绍一些性能问题来界定讨论范围。实际上,对企业级应用系统性能的掌握是与各种各样的性能问题联系在一起的。这是一个遇到问题、解决问题、再遇到新问题的螺旋式上升的过程。所以,提高企业级应用系统的性能是一个经验性很强的工作。通过阅读和理解本书中介绍的各种性能问题,希望读者学会如何分析和解决这些问题。这样才能够在自己的实际工作中遇到类似问题时处理得得心应手,并且能够在设计和实现新的企业级应用系统时设法避免类似的问题。
1.2.1一个虚构的场景
为了避免争议,此处以一个纯粹虚构的场景为例。
张三是一个钓鱼爱好者,同时又是一个很有商业头脑的青年。他在五年前就看好互联网上的商机,创办了一个以销售钓鱼器具为核心业务的网站。网站有钓鱼爱好者的论坛,也有出售钓鱼器具的网上商店。网站是张三和几个朋友创建的。构建之初主要考虑的是如何实现网站的各种功能,采用的技术也力求简单。网站在一个月内就投入运行了。刚开始的时候,网站的访问量很少。出现过一些功能上的问题,但依靠张三和朋友们的技术力量很快就解决了这些问题。
张三的网站经过了最初几年的艰难时期,终于存活了下来。网站的知名度也稳步提高。张三不失时机地对网站进行了改版,引入最新的页面展示技术:个性化页面,用户评价系统,动态广告,等等。网站的网页越来越吸引人。网站的访问量成倍地提升。每天的访问量从几百增加到几万。网上商店的业务量也从每天几个订单增加到每天几百个订单。辉煌的前景就在眼前。
可就在这时,问题出现了。越来越多的用户抱怨网页的响应时间变慢了,有时候需要等待十几秒一个网页才能显示出来。更加不能忍受的是订单交易的过程中经常出错。有的用户还反映在交易出错之后出现订单丢失的情况。与此同时,网站的管理员(张三的朋友)也发出了警告:在网站的访问高峰时期,网站服务器的CPU使用率达到了100%。再这样下去,也许网站有一天会瘫痪的。
张三决定亲自体验一下问题的严重性。于是他在网站的访问高峰期访问了自己的网上商店。结果令人震惊:在等待20秒后才进入网站的首页,而单击第一个热销商品的时候就出现了如图1-3所示的错误。
张三决定立刻解决这些问题。可是张三和他的朋友们钻研了几天也找不到头绪。网上商店的客户已经开始流失了,张三觉得不能再拖下去了。他找到了一家专业开发Web应用系统的公司来重新构建整个网站。有了以前的教训,张三把性能指标写入了需求规格说明书。他要求新的网站能够满足如下要求:
•系统高峰时期的页面平均响应时间不超过2秒
•系统每天可以处理1000个订单
•系统可以满足在5年内每年业务量增加50%的负载需求
•……
上面的场景是一个完全虚构的场景,但是,读者可以从这个场景中看到一些自己身边遇到的问题的影子。
1.2.2性能问题的现象
各种应用要处理的业务不同,所面临的性能问题也会不同。本书主要讨论基二于二WebSphere构建的Web应用所面临的各种性能问题。下面就基于前一节举出的虚构场景,列举一些Web应用中常见的性能问题。在对各种性能指标进行定义之前,本节采取定性的非严格的描述方式。
1.交易出错
应用程序中的功能性问题也会导致在客户访问过程中出现错误。与功能性错误不同,性能问题导致的错误多数是由于并发访问造成的。也就是说,单个用户访问时没有错误,多个用户访问(或者说系统负载比较高)的时候才出现错误。
系统出错可能有两种类型。
一种是系统的某个部分发生致命错误而完全不能工作,比如数据库服务器崩溃(Crash)。这种情况下,所有需要经过该部分的交易都会出现错误,而且一段时间内无法恢复。这种错误是非常严重的错误,企业级应用中基本上不应该出现这样的错误。
系统中经常出现的是另一种错误,即某些特定交易(或操作)出现错误。这种错误往往与系统特定的运行状态相关,也就是说,同一时间内,有些用户的交易出现错误,另外的用户则没有错误。这种错误又可以分为两种类型。一种是可恢复的,比如某个用户在网上商店提交订单的时候出现错误,用户刷新页面或者再次提交这个订单的时候就有可能成功地完成交易。另一种则是不可恢复的,比如前一节虚构场景中提到的,某些用户在订单交易出错的时候出现订单丢失的情况。订单一旦丢失,往往不能再从系统中找回来(虽然理论上讲可能通过服务器端的某些特殊处理进行恢复)。这两种错误相比,不可恢复的错误是更严重的。
2.交易速度慢
与交易出错相比,交易速度慢的问题可能隐蔽一些。一些开发人员或维护人员可能认为只要应用系统把所有的交易处理都正确完成就可以了,处理速度慢一些没有太大关系。其实,从某种意义上讲,交易处理速度慢的问题更为严重。
从应用的服务器端或者从系统管理员的角度看,交易处理速度表现为单位时间内,系统处理的交易数目。对于最终用户而言,系统的处理速度表现为页面的响应时间。即使没有对响应时间的精确定义,大多数读者对于响应时间也有感性的认识。访问有些网站的时候,单击一个链接,马上就可以显示出页面;而访问另一些网站的时候,单击一个链接之后需要等上半天才能看到结果页面。
与交易出错(要么出错,要么不出错)相比,交易速度慢的问题更模糊一些。响应时间长到多少算是“慢”,并没有一个统一的定义。有些用户可能响应时间在10秒钟之内就可以接受,另一些用户可能对于3秒以上的响应时间就认为很慢了。这与用户的心理状态、处理交易的类型、其他类似应用的响应时间水平等许多因素有关。应用开发人员和测试人员需要根据各自应用的具体情况制定判定标准。
用户一旦认为交易(或页面)的响应时间“慢”,就有可能采取一些措施,比如反复刷新页面,重新提交操作,或者干脆放弃当前交易。应用系统的交易速度慢本来就可能是由系统负载重导致的,用户的这些行为有可能进一步加重系统的负载(用户即使放弃交易,该交易也可能还在服务器端继续运行),导致交易出错的产生。
此外,交易处理速度慢到一定程度,有可能超过系统各个环节的超时(TimeOut)设置,从而导致超时类错误的产生。
3.资源使用问题
与前面两种问题相比,资源使用问题更隐蔽,也更容易为开发或维护人员所忽略。
应用程序要正常运行,就必须使用各种各样的系统资源:CPU是资源,内存是资源,磁盘I/O是资源,这些都是物理存在的资源。还有一些抽象的逻辑资源,比如数据库系统中常用的“锁”也是一种特殊的资源。在特定的应用系统中,任何资源都是有限的,对资源的竞争或滥用都可能导致问题。
……
