高性能web站点的优化(二)-- 数据的网络传输

来源:互联网 发布:android项目实例源码 编辑:程序博客网 时间:2024/05/01 18:11

       在这一节里,作者主要讲了几个问题;

       1. 带宽

       2. 数据是如何发送到网络上的

       3. 响应时间的计算


        按照上一节里面讲到的,用户等待时间的分类里面,第一部分时间就是数据在网络上传输的时间,网络传输,自然离不开带宽的概念,带宽的描述单位是bit/s,比特每秒,意思就是在网络上,一秒钟能够传输多少bit的数据,而我们平时说的100M的带宽,实际上都省略了后面的“/s”,100M带宽实际上就是在一秒内可以传输100Mbit的数据;那么这个带宽和什么有关系呢?

       这里你可以先想象一下,把网线比作水管,把传输的数据比作水流,不难想象,如果想让水流更快速的通过水管,只有两个办法,一,增加水压,让水流在水管里面的流动速度更快,二,换一根更粗一点的水管,增加并行度;同理,如果想要增加带宽,办法有两个,第一是增加数据发送装置的发送能力,也称为传输频率,这里需要注意的是,单单提高数据发送装置的发送能力的不行的,同时要提高数据接收装置的接收能力,原因不难想象,如果数据接收装置的接收能力跟不上,数据全部堆积在网络上,网络传输速度仍然不能提高,第二是增加传输介质的并行度;比如在光纤传输中,让多根光纤绑在一起并行,形成光缆;


       好了,研究完带宽的问题,接下来,我们要研究一下应用程序是如何将数据发送到网络上的?这主要分为四个步骤:
第一步,应用程序会将想要发送的数据写入进程的内存地址当中,

第二步,应用程序会调用系统函数库,由系统内核将数据从进程的内存中复制到内核缓冲区(即一段由内核维护的内存地址空间)中,

第三步,系统内核会通知网卡控制器来取走需要发送的数据,网卡控制器就会到内核缓冲区找到需要发送的数据,将它复制到网卡缓冲区中;

第四步,网卡会将需要发送的数据发送到网络中去,在这个过程中,网卡会对要发送的数据进行转码,因为只有二进制的数字信号才在网络中可以进行传输,所以这里进行的转换是由字节到位的转换,另外,网卡还会根据实际的设备不同,将传播信号转换成不同种类的信号,比如:光信号,电信号等。


      响应时间,什么是响应时间呢?我们认为数据从服务器开始发送直到完全到达用户PC的这段时间,我们称之为响应时间;所以:

                  响应时间 = 发送时间 + 传播时间 + 处理时间

      发送时间比较容易计算:发送时间 = 数据量 / 带宽;

      传播时间主要依赖于传播距离,传播时间 = 传播距离 / 2.0 * 10^8;如果要问光速不应该是3 * 10^8m/s么?可能你忘记了,无论是光信号还是电信号在网络中都是曲线传播的,所以他的直线速度一定比3*10^8要慢;大约等于2.0 * 10^8m/s;

      处理时间是什么呢?简单的说,处理时间就是指数据在交换节点中为存储转发而进行的一些必要的处理所花费的时间;

      所以,响应时间 = ( 数据量 / 带宽) + (传播距离 / 传播速度) + 处理时间

      当然,这里计算响应时间的公式只是个理论值,实际的生产环境中,还有许多影响响应时间的因素,比如:

1.大家都知道浏览器请求都是基于HTTP协议的,所以发送的数据包中除了需要发送的数据信息之外,还会包括一些网络协议的附件信息;因为这些信息的存在,使我们计算出来的响应时间要小于实际的响应时间

2.在通信数据量过大的时候,数据会堆积在各个交换节点队列中,数据在这些交换队列中的等待时间也会影响响应时间;

3.有时候我们下载数据文件的时候,需要将数据写入内存,甚至写入磁盘,这部分写入时间也会影响用户的响应时间

4.一些长距离传输,必须要使用中继器来放大信号以防止电磁干扰,信号衰减等因素导致的传输错误,而这个过程中中继器对数据的接收和发送也会影响响应时间

种种的影响响应时间的因素这里就不一一列举了,总之,影响到响应时间的因素有很多,在我们实际的工作过程中,并不能忽略这些因素


最后,作者还介绍了我国当前互联网络的现状,并阐述了一些网络传输瓶颈问题多数都出在了各个运营商之间的网络互联上,我觉得这些了解就好,毕竟我们不能督促运营商们去做一些什么什么,当然这些内容对于web站点在网络上的接入点选择会有一部分帮助,但是我不打算详说;


0 0
原创粉丝点击