欢迎来到天天文库
浏览记录
ID:30363441
大小:87.29 KB
页数:12页
时间:2018-12-29
《web应用程序的运行方式以及如何提高性能》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Web应用程序的运行方式以及如何提高性能了解Web应用程序的运行方式以及如何提高性能文档选项级别:中级SeanA.Walberg,高级网络工程师,P.Eng2009年4月13日了解Web应用程序的各种组件如何交互,以及在哪些地方可能发现性能瓶颈。开发人员和管理员都可以从本文受益,因为获得更好的性能是他们的责任。动态的Web应用程序能够存储大量信息,让用户能够通过熟悉的界面立即访问这些信息。但是,随着应用程序越来越受欢迎,可能会发现对请求的响应速度没有以前那么快了。开发人员应该了解Web应用程序处理Web请求的方式,知道在Web应用程序开
2、发中可以做什么,不能做什么,这有助于减少日后的麻烦。静态的Web请求(比如图1所示的请求)很容易理解。客户机连接服务器(通常通过TCP端口80),使用HTTP协议发出一个简单的请求。服务器解析这个请求,把它映射到文件系统上的一个文件。然后,服务器向客户机发送一些描述有效负载(比如网页或图像)的响应头,最后向客户机发送文件。在上面的场景中可能出现几个瓶颈。如果请求的变化很大,导致无法有效地使用操作系统的磁盘缓存,那么服务器的磁盘会很忙,到了某种程度之后,就会减慢整个过程。如果为客户机提供数据的网络通道饱和了,就会影响所有客户机。但是,除了
3、这些状况之外,"接收请求,发送文件"过程还是相当高效的。通过做一些假设,可以大致体会静态服务器的性能。假设一个请求的服务时间是10ms(主要受到磁头寻道时间的限制),那么大约每秒100个请求就会使磁盘接近饱和(10msec/request/1second=100requests/second)。如果要发送10K的文档,就会产生大约8mbit/sec的Web通信流(100requests/second*10KBytes/request*8bits/byte)。如果可以从内存缓存中获取文件,就可以降低平均服务时间,因此增加服务器每秒能够处理
4、的连接数。如果您有磁盘服务时间或平均请求延时的真实数据,可以把它们放进上面的算式,从而计算出更准确的性能估计值。既然服务器的处理容量是平均请求服务时间的倒数,那么如果服务时间加倍,服务器的处理容量(每秒处理的连接数)就会减半。请记住这一点,下面看看动态应用程序的情况。动态应用程序的流程依赖于应用程序的具体情况,但是一般情况下与图2相似。与前一个示例中的客户机一样,图2中的客户机首先发出一个请求。静态请求和动态请求之间实际上没什么差异(有时候.php或.cgi等扩展名可能意味着动态请求,但是它们可能引起误解)。如何处理请求是由Web服务器
5、决定的。在图2中,请求被发送到一个应用服务器,比如运行一个Java应用程序的Solaris系统。应用服务器执行一些处理,然后向数据库查询更多的信息。得到这些信息之后,应用服务器生成一个HTML页面,这个页面由Web服务器转发给客户机。因此,这个请求的服务时间是几个部分的总和。如果数据库访问花费7ms,应用服务器花费13ms,Web服务器花费5ms,那么网页的服务时间就是25ms。根据前面介绍的倒数规则,各个组件的容量分别是每秒142、77和200个请求。因此,瓶颈是应用服务器,它使这个系统每秒只能处理77个连接;超过这个数量之后,Web
6、服务器被迫等待,连接开始排队。但是,一定要注意一点:因为系统每秒只能分派77个连接,而一个连接需要的处理时间是25ms,所以并非每个应用程序用户的请求都能够在25ms内得到处理。每个组件每次只能处理一个连接,所以在高峰负载下,请求不得不等待CPU时间。在上面的示例中,考虑到排队时间和25ms的处理时间,平均请求服务时间最终会超过1.1秒。关于解决这些排队问题的更多信息,请参见。通过这些示例可以得出以下结论:在用户发出请求和获得最终页面之间的步骤越多,整个过程就越慢,系统容量就越低。随着页面请求速率的增加,这种效应会越来越显著。在项目开始
7、时做出的体系结构决策也会影响站点处理负载的能力。本文的其余部分将深入讨论这些问题。应用程序(包括Web应用程序)的体系结构常常按照层来描述。静态站点可以被看作只有一层--Web服务器。如果用Web服务器运行某种脚本语言(比如PHP),从而连接数据库,那么这可以看作两层。前一节中的示例有三层,即前端Web服务器、应用服务器和数据库。一个软件也可能由多层组成,这取决于您谈话的对象。例如,PHP脚本可能使用一个模板引擎把业务逻辑与表示分隔开,它可以被看作单独的两层。Java应用程序可能通过Javaservlet执行表示任务,servlet通过
8、与EnterpriseJavaBean(EJB)通信执行业务逻辑,EJB通过连接数据库获取更多信息。因此,换一个角度来看,三层体系结构可能是另一副样子,尤其是在涉及不同的工具集时。尽管应用程序的体系结构各不
此文档下载收益归作者所有