您的位置:首页 > 理论基础 > 计算机网络

Content Delivery Networks CDN 内容分发网络

2009-02-05 13:29 281 查看
Bidirectional Content Delivery Networks
BCDN 双向内容分发网络

1、 中国网络现状:南北电信问题
 a) 南北电信分拆导致不同网络间访问瓶颈
 b) 地域之间的差距导致网络访问速度不一致
2、 解决南北电信问题的方法
 a) 镜像服务器方案 b) 双链路接入解决方案
 c) CDN解决方案
3、 详解方案实现机理
 a) 双链路方案
  i. 优点
  ii. 不足
 b) CDN方案
  i. 优点
  ii. 不足
  c) 镜像服务器方案
 i. 优点
 ii. 不足
 d) 结合方案
  i. 优点
  ii. 不足
4、 在实践中进一步发现的cdn不能解决的问题
 a) 跨地域、多网间上传问题
 b) 多网间数据传递问题
5、 解决cdn不足的方法: BCDN概念的提出
6、 BCDN详解
  a) 构架方法
  b) 技术原理与概念
  c) BCDN在实际应用中的效果: cdn联盟网络现状
7、 总结
  a) CDN联盟介绍
  b) Free精神宣言:自由的技术,任何人都可以使用的技术
  c) Q&A

 

1、 中国网络现状:南北电信问题
 a) 南北电信分拆导致不同网络间访问瓶颈
在中国,你可以拥有廉价的方式接入互联网,例如ADSL,价格为人民币120元/月,不限流量;某些地区的网络更加便宜,据我所知最便宜的为人民币50元/月,不限流量。
为何如此廉价? 因为有行业壁垒,有市场的竞争。 
早些时候,电信业在中国是垄断的地位---- 中国电信,只此一家,别无分号。 为了适应市场经济的环境,为了进入WTO,政府管理部门将这个庞然大物一份为二,于是就有了南方电信与北方网通两个一母所生,但相互竞争的大家伙。此后,又有另外一个背景强硬的家伙,中国铁通加入了这场角力,这个家伙也不简单,依靠着整个铁道部在全国的网络,以及低廉的线路成本,在市场竞争上非常有力;因为中国的法律明文规定: 铁路沿线周边10米均属于铁道部所有,这就意味着大量的长途传输布线所需要土地征用费都节省了-----全中国都有铁路。(铁通各地分公司与母公司之间的结算方式有特点)
此外,中国还有一个教育网和一个广电网。前者是有全中国的高校之间组建的网络,主要用于传输教育资源。(实际主要被大量的学生用于玩on line game以及各种p2p应用);后者是全中国广播电视总局麾下的网络。
那以上这些跟本文有什么关系呢? 有的,因为假如你是一个网通的用户,你会发现自己访问电信的服务器简直就是龟速,实在让人无法忍受;同样,假如你是一个电信的用户,你访问网通一样困难。
Why? 问得好,因为行业的壁垒就在这里体现了出来。各个以上各个网络之间,想要相互接入是非常得困难的,例如某省的广电,想与电信网络互通,那么恭喜你,全中国的电信都不会给你做接入,那广电的用户怎么办?想要访问电信的各种花样繁多的服务器,那就请你改用电信的endpoint,成为电信用户吧!这就是行业壁垒。

 b) 地域之间的差距导致网络访问速度不一致
中国地大物博…… 从我上小学开始,就被祖国的园丁们灌输这句话,不过这句话用在电信业,特别是传输上,可就非常的郁闷了.... 从中国的最东到最西边,火车要走好几天, 同样从最北到最南边,也得做好几天的火车(PS:铁通发达了)。
所以,在南电信北网通的战国群雄时代,一个南边的用户想要访问北边的服务器,其速度肯定不会好到哪里去。
2、 解决南北电信问题的方法
如果一个内容提供商,如SINA,SOHU之类的企业, 想要解决这些问题,他们怎么办呢? 
在早期的时候, 许多企业使用过镜像服务器的方法,不过这种方法有很多问题; 现在, 大多数的企业, 都采用了cdn的方式, 也就是所谓"内容分发网络".-----
 a) 镜像服务器方案
自然而然,所有的人都会想到,既然南北不容易通,那我就在电信和网通各放一台服务器,然后让两台服务器之间进行数据同步,保证用户不论访问谁,内容都是一样的,这总可以了吧?
  i. 优点
该方法可以从一定程度上解决问题,而且也有着其有用的一面。
  优点很多了,这里只说一个小小的例子:
  比如,在某些软件下载的网站,可以对同一软件提供2个下载点,让用户自己选择网通下载或者电信下载,that's so good。  
  ii. 不足
  该方案的不足之处也是显而易见的,首先,用户要访问的你网站才能去选择到哪里下载,那么你如何确定用户在访问你的web服务器时,第一次会访问得是哪一个服务器呢?
其次,问题又回来了,如果2台服务器一个在网通一个在电信,它们之间的数据同步如何来做呢? 难道拉一根专线?
很显然,其核心问题在于,需要一个判断的程式,将用户区分开来,让网通用户访问网通的服务器,让电信用户访问电信的服务器;此外还需要解决服务器数据同步问题,特别是在拥有多台镜像服务器的情况下。
  b) 双/多链路方案
  双/多链路是目前业界比较流行的一个解决方案。所谓双/多链路,其核心的解决思想就是通过接入多条不同isp的接入线路,从而达到避开多isp之间带宽瓶颈的问题。

  在双链路的方案中,后台的服务器可以使用双ip,因为IDC机房在接入isp时,会从多个isp拿到不同的ip段,这样就给与后台服务器不同isp的ip地址,从而可以根据需要来确定服务器使用何种ip;当然,双ip最好。

  i. 优点
  这个解决方案最大的优点就是避开了南北电信的多isp之间的瓶颈,从而达到了不论哪个isp的用户访问,都能有一个良好的带宽的目的。
  此外,它与镜像服务器的方案比较起来,还有一个优点是减少了服务器的数量。 因为这个方案只需要在同一个机房放置1组服务器,而不需要在多个机房放置多组服务器。
  ii. 不足
  当然,这个方法也存在首次命中问题。 其实多链路与镜像服务器本质都是一样的。
  首先也存在首次命中问题, 就是说,用户第一次访问服务器时, 会通过那条线路来访问? 假定一个广州网通的用户,访问你的服务器,你给他返回一个北京电信的ip,那这个用户就会痛哭了,用网站开发人员的话来说, 网站的粘度不够(不知道形容得准不准,搞开发的兄弟给指点一下专业术语)。
  解决这个问题的方法是使用一个智能dns的解析。目前bind9就支持该功能,简单而言就是根据客户端的源ip属于某一个isp或地区,来决定给客户端返回相应的服务器ip地址,从而解决首次访问问题。

 c) CDN解决方案
 
3、 详解方案实现机理
a) 双链路方案
i. 优点
ii. 不足
b) CDN方案
i. 优点
ii. 不足
c) 镜像服务器方案
i. 优点
ii. 不足
d) 结合方案
i. 优点
ii. 不足
4、 在实践中进一步发现的cdn不能解决的问题
a) 跨地域、多网络间上传问题
b) 多网间数据传递问题
5、 解决cdn不足的方法: BCDN概念的提出
6、 BCDN详解
a) 构架方法
b) 技术原理与概念
c) BCDN在实际应用中的效果: cdn联盟网络现状
7、 总结
a) CDN联盟介绍
b) Free精神宣言:自由的技术,任何人都可以使用的技术
c) Q&A

假设某网站 ,如www.a.com, 上海有服务器一台,给的IP是1.1.1.1 ,北京有一台,给的是2.2.2.2 处于不同IDC,要求实现上海的用户访问在上海的服务器, 而北京的用户访问到北京的服务器.

角色1 Client 上海电信用户5.5.5.10

角色2 Client的DNS服务器 5.5.5.1 根据Client的网络接入的方式不同,DNS服务器的IP地址是
  不一样的

角色3 a.com的soa dns,ip 3.3.3.3 由com. 授权,  

角色4 www.a.com的2台服务器, 上海的IP1.1.1.1 北京的2.2.2.2

角色5 上海的DNS服务器 1.1.1.10

角色6 北京的DNS服务器 2.2.2.10

在确定好所有的角色后,我们来看看这个工作过程以及解决方案

DNS解析分为递归与跌代.

假定上海电信dns 是递归查询, 通过一个图我们来说明智能解析过程. (请把该图放大再看比较清楚)



  因为递归查询,那么情况比较复杂,因为 最终访问到a.com dns 服务器的是上海电信dns服务器, 是Client DNS. 这样只能判定Client DNS比较距离 上海或者北京比较近,而无法断定Client
是距离那里比较近。 
  不过,由于网络接入的方式不一样,例如 网通的ADSL方式,其IP、DNS地址均由动态获取,这样此时 Client DNS服务器与Client应该是属于相同运营商IP,这样就能够通过判定Client DNS地址来大约断定Client所属运营商所处地区,从而给予Client一个正确的IP地址解析。
  但是假如某上海用户手工指定DNS,恰好又指定了一个北京的递归查询DNS服务器,这个时候,就比较麻烦了,因为没有办法得知Client的实际位置。
  考虑此时是递归查询,所知Client DNS的IP地址为北京IP,则a.com会解析北京服务器地址给该 Client DNS,那么Client作为上海用户最终得到的IP将是 www.a.com = 2.2.2.2 (该地址为北京地址) ,这样就会导致此用户得到错误的服务器地址。
  不过,好运的是,现在的大多数DNS服务器都是迭代查询,因为没有多少DNS服务器可以承受递归的流量,所以对于99%的用户来说,都能得到正确的地址解析,从而正确的访问服务器。

那么迭代查询的情况又会如何呢?因为最终向a.com询问谁是 www.a.com的 ,将是Client.
  这样,a.com的DNS服务器将得到Client 的IP,再根据Client IP地址距离那里的边缘节点比较近,就可以决定返回www.a.com 的IP 1.1.1.1 还是 2.2.2.2; 但是这种工作模式的问题是必须选择一个好的算法。为什么呢?
  因为需要考虑到中国网络的实际情况,中国南北电信分拆后,telecom与cnc之间的互相访问非常慢, 例如 某北京网通用户访问位于北京电信的www.a.com.,其速度可能还不如去访问位于上海网通的www.a.com. 
解决该问题举例如下
  某网站 ,如www.test.com, 电信接入链路一条, 网通一条, 电信给的IP是1.1.1.1 ,网通给的是2.2.2.2 处于不同网段
  要求实现 网通的用户从网通的链路 访问到 服务器, 而电信的用户用电信的链路访问到服务器.

解决方案:
  要从DNS下手
  某个用户从电信发起访问,过程如下
1 Client  
2 Client所指定的DNS服务器 根据Client的网络接入的方式不同,DNS服务器地址未知
3 test.com的Client 问自己的DNS www.test.com的IP是多少
  Client DNS 服务器通过递归或则迭代,访问到test。com的soa dns服务器。
  a, 如果是迭代,则最终向test。com询问谁是 www.test.com的 ,将是Client.
  这样,test.com的DNS服务器将得到Client的IP,再根据IP地址是网段是属于
  电信还是CNC的,决定返回www.test.com 的IP 1.1.1.1 还是 2.2.2.2
  如果是电信用户,则返回1。1。1。1,这样该电信Client最终得到www.test.com = 1.1.1.1 的A记录解析,从而通过电信网络访问www.test.com,这样就能达到我们所预期的目的。
  b,如果是递归查询,则比较麻烦, 因为最终向test.com 的dns服务器询问谁是www.test.com的,是Client DNS. 这样只能判定Client DNS是电信还是网通,而无法断定Client
是电信还是网通。 不过,由于网络接入的方式不一样,例如 网通的ADSL方式,其IP、DNS地址均由动态获取,这样此时 Client DNS服务器与Client应该是属于相同运营商IP,这样就能够通过判定Client DNS地址来大约断定Client所属运营商。
  但是假如某网通用户手工指定DNS,恰好又指定了一个电信的DNS服务器,这个时候,就比较麻烦了,因为将会从电信的链路上收到一个TCP连接,其源地址为网通IP。
  考虑此时是递归查询,所知Client DNS的IP地址为电信IP,则会返回1。1。1。1地址给与该 Client DNS,那么Client作为网通用户最终得到的IP将是 www.test.com=1.1.1.1 (该地址为电信地址) ,这样就会导致此用户得到错误的服务器地址。
  不过,好运的是,现在的大多数DNS服务器都是迭代查询,因为没有多少DNS服务器可以承受递归的流量,所以对于99%的用户来说,都能得到正确的地址解析,从而正确的访问服务器。

  目前手工配置DNS服务器来实现以上目的,好象只能有BIND能做到,不过需要自己开发一些相关工作流程,以及收集电信、网通IP地址段,工作内容比较复杂。

另外也可以使用静态算法,通过收集Client IP是属于某个地区的(上海还是北京),就可以决定返回某个IP地址,不过需要收集所有IP所处实际地区;目前网上已经有很多查询ip地址是属于某个地区的技术,看来这种方法还是有可能实现的。
  目前手工配置DNS服务器来实现以上目的,好象没有什么现成的程序能做到,需要自己开发一些相关工作流程脚本程序,以及收集电信、网通IP地址段,所处地区等,工作内容比较复杂。

有一个问题是,cdn能够使得所有的访问都到达边缘节点,假如某用户访问到了某边缘节点后,上传一个文件,希望能够存储到服务器上,那么此时,cdn网络就显得无能为力。
因此,我们提出一个新的概念: BCDN 双向多层内容分发网络 ,作为cdn网络的一个完善与补充。

目前的cdn网络多是采取 1个中心节点 加上若干个cdn节点组成,所有cdn节点都会直接到中心服务器上去同步数据。

让我们来看一个案例。
沈阳市某商务网站,提供网络存储业务,其业务特性是 上传流量大,下行流量少。
现在的问题是: 该网站核心存储服务器采取沈阳电信接入,在广州的某网通客户访问到位于广州网通的一个cdn边缘节点的时候,速度很快,一切都很正常,显示了cdn的效用。
但是,由于其业务特色,该客户上传某个文件时,其速度受到明显限制,速度非常缓慢。
为什么呢? 第一,由于中国的南北电信问题,导致网通用户 访问电信慢,第二是地域问题,比如广州访问沈阳也比较慢。
  现在的问题是,如何才能有效提高上行速度呢?
首先我们提出几个概念: 

personal routing
私密路由

由于所有的cdn节点,并不能主动的判断通过那条3层路由到达源节点的速度是最高的,所以,我们可采取分层的设计模型:

一个源节点 若干个交换节点 ,较多地边缘节点

所有的边缘节点都将通过交换节点去获取数据,而不是通过源节点

通过创建一个类似于路由表的信息表,我们称之为Personal route diagram 私密路由图表。
该表的作用主要是让每一个cdn节点都知道整个网络的源、核心、交换节点以及周围其它边缘节点的情况,以及自己到达到其中某一个节点的速度。
通过读区该表中的信息,一个cdn边缘节点将能够决定从其中某一个交换或者核心节点或者源节点去获取数据。
在目前,已经得到实际应用的是静态方式配置的私密路由,这种方式下,一个cdn边缘界将不会直接通过源节点去获取数据,而是根据私密路由得配置,到指定的交换节点去获取数据。
而交换节点得布置则需要选择在拥有双链路接入的环境中,以便达到良好的数据传输速度。

personal route
私密路由
route diagram
路线图
route survey
线路测量 
route diversion
路径变更 
personal route setting principle
私密路由排列原则  

本文出自 “王懿” 博客,请务必保留此出处http://wangyi.blog.51cto.com/474226/128743
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: