WEB性能优化(一)

王朝厨房·作者佚名  2007-01-05
窄屏简体版  字體: |||超大  

又上chinaunix了,老看帖子太没意思,整理出来一个东西,给大家看看,大家有兴趣多讨论讨论

要说web还是先从TCP/IP协议说起来的好(要丢也丢好的鸡单嘛,不要丢烂的),关于这方面的知识大

家参考《TCP/IP详解卷一》就好了,这里就不在多说了,只发一张图来说明,如下(图1)

[img:e3da136f87]http://storage.msn.com/x1pM0jCSUoiRhD8IF26wGEBncsxxJoiC8Xs9cUZAh2n3OZfDMPIM50HjA6M2ORo38IAYcPegzDHmSzCfCEjWfypPK49RiExSC6I[/img:e3da136f87]

图1 OSI模型

这里要说的是一般OSI模型都按照这个方式来划分,由于数据都是从7层往下一直到1层变成正负的电

压进行传递,然后再逆向转换过来,所以在这7层当任何一层都是非常重要的,都有优化的余地,今天主

要说的就是下4层。

关于1,2层涉及到接入,当然是带宽越快越好了,不过在带宽之外还有一个很重要的因素就是丢包率

,丢包率的大小在很大程度上也会对WEB性能产生非常大的影响,关于这些我们在后面再说。第3层就是IP

了,在互联网上目前也就是IPV4了,基本上没什么可说了,除非你用ipv6,IPV6同样也是可以提高WEB性

能的,但是目前意义不大,后面我们也简单的提到。所以还剩下第4层了,我们这里注重来看看第4层是怎

么影响WEB性能的。第4层说来主要就是TCP协议了,关于TCP协议,大家参看下图(图2)

[img:e3da136f87]http://storage.msn.com/x1pM0jCSUoiRhD8IF26wGEBnZ8K0EHrZuV82GpvV_znYT7-y5ibIRluWiAAA2NTC5Z1CHGSqqyLtuQDj6r5QR1JRYtRq2XCmC2P[/img:e3da136f87]图2 TCP的三次握手

TCP协议的三次握手,这个在这里不在解释,不明白的参看《TCP/IP详解卷一》(本人推荐安装一个

sniffer自己查看一下数据包)。WEB都是采用的是TCP连接,这点无庸质疑,但是这样也存在一个问题,

就是每次TCP连接必须进行三次握手,实际上HOST A发送请求到和HOST B握手成功一般需要等待两个响应

时间(实际上有的时候web的GET请求可以和最后一个确认的ack包一起发送,但是这样会给 D.O.S攻击留

下隐患,因为我们暂时不讲安全问题,在这里不多说),下图是1K字节的数据通过一个TCP连接在2.4G的

带宽上传输的时候理论上的速度和响应时间的图。

[img:e3da136f87]http://storage.msn.com/x1pM0jCSUoiRhD8IF26wGEBnYAkuS-oDAaquvYrzOdTGUsmZhgAYDQ4zQ3y1YH-GM1V3PRoWzikBMcVS3qgRH8H4cu0a1Zbcna5[/img:e3da136f87]

图三 RTT的速度

在这个图当中,我们可以看到当系统的响应时间越短那么每个TCP单位时间内传输的数据也会越多,

而这个变化是非线性的。

在实际的TCP协议当中,还有另外两个主要方面的控制:1)单个包的大小。实际上每个数据包的大小

是多少是有服务器和客户机进行协商出来的,由于IPV4头的限制最大的数据包只能是2的16次方即65536字

节,所以最大的IPV4数据报不超过7K,这样可以对照上面的表计算一下在2.4G带宽下一个TCP连接最快的

传输速率是多少。2)TCP的窗口大小。这个同样是有服务器端和客户端进行协商的,窗口是递增的直到会

传输重发机制(是重发,不一定是丢包),而在这里下层的丢包率就对windows窗口会产生非常大的影响

。关于这方面的内容详细部分参考《TCP/IP详解卷一》。把所有的部分综合起来得到下面的图(图4):

[img:e3da136f87]http://storage.msn.com/x1pM0jCSUoiRhD8IF26wGEBnTa1CFHRRPXDSaUOepRMTeJBCj-CC0FRhS7729v504Z7b3NCdXHg_QkIlEvhS4nAsfHESX6Hbh7m[/img:e3da136f87]

图4 TCP与丢包率与网络响应时间的关系

从图中我们就可以看到丢包率对TCP网络的重要性,因此在优化的时候我们可以先丛这些方面着手:

1)减少丢包率。选用的好的交换机和ISP看起来会花很多钱,但有的时候却能够让你得到成倍的速度

的提高。

2)减小响应时间。有的时候带宽的确是很高,但是服务器的负载太高,响应时间很慢,同样也会影

响服务器的吞吐量。尽量把你的服务器响应时间控制到100个ms吧。

3)使用cache增大吞吐量。磁盘I/O总是会在不知不觉的情况下消耗你几十个MS。

4)减少互联互通问题。后面再说。

好了,不写了,写东西真累。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航