网络加速技术研究

网络加速技术研究

一、网络加速技术的现状

1995年因特网商业化后,各种网站如雨后春笋般涌现,数量剧增,网络带宽总是不够用,所以,HTTP协议中引入了缓存机制,网页被缓存在用户的硬盘上,当用户再次打开相同的网页时,如果查询服务器后得知该网页没有被修改过,会直接从本地硬盘读取以前缓存的网页,从而极大的减少了网络数据量。其缺点是缓存只对HTTP协议有效,其它应用无法享受其好处。

2003年BitTorrent(比特洪流)的普及把网络加速技术带入到一个新的水平,开创了P2P网络加速时代,P2P网络加速技术鼓励了人们的创造性和分享精神,得到了广泛的应用。但它们采用的都是应用层加速技术,最后都发展为各自专用的封闭软件体系。

2007年SteelHead发布了独有的数据包级别的加速技术,只要发现数据包的内容是重复的,会自动从缓存中读取数据包的内容,理论上可以加速任何网络应用,但这项技术没有得到普及,只在本公司的商业产品中使用。

目前最热门的P4P技术只是P2P技术的改良,其原理是让同一网络区域的用户优先配对,从而减少网间数据量,缓和P2P软件与网络运营商之间的矛盾,达到共赢的目的。

二、终极目标——加速整个因特网

本文研究的主题是怎样加速整个因特网,我发现,改造现有的网络协议是个好办法。比如,现有的TCP/IP协议没有缓存机制,如果为它增加缓存机制,数据包传输时沿途缓存,当需要传输相同的数据包时,就可以从离用户最近的地方获得数据包内容,最大限度的减少整个网络的数据量。

为此,我研究了一个简单有效的数学算法,可以用一系列的XOR(异或)操作得到任意数据包的惟一定长的特征码,因为其算法极其简单,理论上可以很容易用FPGA芯片实现该算法。

然后,我重新封装了TCP/IP的Send和Receive函数,换成新的带缓存机制的Send和Receive函数,奇迹发生了,所有数据包的内容,只要是重复的,沿途只传输一次,我计算了一下,如果传送4096字节的重复内容的数据包,只要传送16字节的特征码即可,整个网络被加速256倍。

开源项目网址:http://kenai.com/projects/acceler256

三、数据包级别网络加速原理

把数据包用散列算法生成一个散列值,这个散列值可以惟一的代表数据包的内容,我们把它称作数据的指针。

传输数据时只传输数据的指针,接收方首先在本地缓存中查找是否存在指针对应的数据,如果找到,则直接从本地缓存中得到数据,无须发送方发送数据;如果找不到,再请求发送方发送数据,发送方收到发送数据请求后发送数据,这样,重复的数据只发送一次,从而减少了网络数据量。

实际设计时要考虑很多问题,比如,散列算法必须速度很快才能实时计算数据指针;沿途的中间节点也要缓存流经的数据,并且拦截下游的数据请求并代替上游发送数据,实现数据的就近获取;用指针滑动窗口批量发送指针来减少交互次数;用通道复用技术实现两个方向的数据同时流动。

实现了数据包级别的网络加速后,最好采用瀑布方式数据分发,为每个下载资源维护一个动态的由当前的下载节点构成的瀑布结构,每个新节点挂在几个早些的节点下面,形成节点瀑布,数据在节点之间按瀑布方式有序流动,瀑布的宽度根据原始资源的带宽决定,如果带宽高可以把瀑布的宽度设置的大一些,让数据的同时流动更多一些,瀑布方式在理论上支持无限多的用户同时下载。

四、现存问题及未来展望

ADSL上行与下行带宽不对称限制了这个技术的普及,因为瀑布下载方式要求上行与下行带宽相同,如果带宽不同则降速到较小的带宽,所以只能使用1/4或1/8的ADSL全速带宽。所以对于视频直播这样的实时性强的应用,降低视频流的码率到600位每秒以下才能流畅播放。

最近准备把它封装成Apache服务器插件和浏览器插件,实现Web级别的内容分发加速,网站带宽相当于扩容256倍,能支持更多的用户。

让网站直接支持内容分发加速的意义基于这样一个事实:每多一个操作步骤,用的人就少30%,所以,把东西放在网站上直接分发比放在P2P平台分发对用户会更有吸引力,所以是值得实现的。

所有使用浏览器的用户会自动形成一个简洁松散的P4P网络,这是因为每下载一个通过这项技术发布的资源时就会获得几个正在下载同一资源的其它用户节点,不知不觉的就会得到许多分散在世界各地的其它在线用户节点,这样,就自动形成了世界范围的超巨规模的网状结构的P4P网络,规模越大加速效果越好。

更神奇的是,这个P4P网络的节点之间没有通信,也不用考虑资源的发布与搜索问题,简约至极,即使是节点数量达到几十亿的规模也没有问题。

如果放开节点之间只能互相加速下载同一资源的限制,允许下载不同的资源,虽然不能获得加速,但可以用来建立冗余线路,每个节点可以选择不同的路径以冗余线路连接到网站上的资源。

五、Apache服务器加速模块的实现方案

2012年4月17日,Apache基金会发布了Apache2.4.2版本,这个版本中Event MPM模块不再是试验性的模块,成为正式模块,能够响应海量并发用户请求,为实现Apache服务器加速模块提供了理想的支撑平台。

Apache服务器加速模块参考Apache网站上的第三方模块mod_pop3实现,实现非常容易,功能只有两个:

1、响应客户端请求中间节点的请求。

为实现客户端之间互相加速,客户端需要通过已经下载了部分数据的其它客户端节点作为中间节点连接服务器。

服务器端根据不同的情况处理:

如果当前直接下载的用户数未达到了设定的数值,则回答让客户端不经过任何中间节点直接连接服务器并下载内容,这样可以充分发挥服务器端的带宽优势,形成很宽的下载瀑布。

如果当前直接下载的用户数已经达到了设定的数值,则挑选出一个空闲的并且其IP与客户端IP最接近的用户节点回答客户端,让客户端通过该节点作为中间节点连接服务器,这有什么好处呢?因为中间节点已经缓存了部分数据了,客户端可以从中间节点获取数据,从而节省服务器的带宽。

2、响应客户端发送数据的请求

客户端无论是直接连接服务器还是通过中间节点连接服务器,对服务器端来讲是透明的,发送数据的方式是一样的。

发送数据的请求包括要下载资源的URL和数据偏移量,与HTTP协议的指定偏移量下载部分数据的请求相同,但发送数据的方式不同,加速模块只发送数据指针,客户端根据数据沿途缓存情况就近获取数据,从而实现大规模网络加速。

数据包级别的网络加速技术比其它网络加速技术显示出的优势是可以对任何数据加速,无论是静态的文件,还是动态的直播,只要数据包的内容有重复性就能得到加速,并且编程极其简单,用带缓冲的发送接收函数替换不带缓冲的发送接收函数即可。

六、浏览器插件的实现方案

浏览器只支持微软的IE浏览器,采用微软公司的BHO技术开发IE浏览器插件,微软公司的技术文档中提供了很好的BHO参考例子,采用Visual C++6.0即可开发,最后向数字证书发布权威机构登记购买数字证书,签名插件,在网站上提供给IE自动下载安装,IE浏览器识别签名安全合法后允许下载安装并运行。

浏览器插件拦截加速协议的超链接点击,例如:

waterfall://www.mysite.com/webcast.rmvb

首先,浏览器插件向服务器发送请求中间节点的请求,如果服务器回答可以直接连接服务器,则直接连接服务器;如果服务器回答一个中间节点,则通过该中间节点连接服务器。

连接成功后,浏览器插件向服务器发送发送数据的请求,根据收到的数据指针沿途就近接收数据。

浏览器插件向浏览器怎样返回数据?比较巧妙的方法是浏览器插件模拟一个本地HTTP服务器,打开一个浏览器窗口把接收到的数据以HTTP协议返回给浏览器,浏览器则按照扩展名决定是该弹出一个窗口另存为本地文件(例如zip)还是直接在浏览器中播放(例如rmvb)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值