WEB性能优化(一)

JavaGG 发布于 2009/05/06 16:01
阅读 779
收藏 0

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


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

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

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

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

要说的就是下4层。
    

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

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

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

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

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


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

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

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

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

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

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

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

而这个变化是非线性的。

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

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

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

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

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

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


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

    从图中我们就可以看到丢包率对TCP网络的重要性,因此在优化的时候我们可以先丛这些方面着手:
    1)减少丢包率。选用的好的交换机和ISP看起来会花很多钱,但有的时候却能够让你得到成倍的速度

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

响服务器的吞吐量。尽量把你的服务器响应时间控制到100个ms吧。
    3)使用cache增大吞吐量。磁盘I/O总是会在不知不觉的情况下消耗你几十个MS。
    4)减少互联互通问题。后面再说。
    好了,不写了,写东西真累。



加载中
0
S
Shatty

ICMP在三层和四层之间?老大你又忽悠了.

返回顶部
顶部