CDN网络又叫内容分发网络,是由分散在不同地区、不同运营商机房的服务器、网络组成。其主要作用是实现用户就近原则获取数据。
CDN网络主要是两种应用:静态文件下载(包括视频点播)和直播。以视频点播为例:假如某视频网站的源服务器在北京联通机房,那么按以往的方式,广东电信用户要去访问这台服务器的视频,就必须直接连接到北京联通的这台服务器。但大家知道,在中国,不同运营商间的联通性是不好的,并且从广东到北京的网络延迟也比较大,所以CDN服务商就在全国各地不同的运营商机房里搭建了自己的服务器,服务这些视频网站公司,帮忙将视频缓存到各地的服务器,这样,广东电信用户可以直接从广东电信机房里获取到数据。
一、CDN网络基础架构
一般CDN服务端的网络都是三层网络架构,即边缘节点、区域中心、根节点。
普通用户访问一般就是从边缘节点获取数据(如果区域中心有空闲的话也可以提供让用户获取)
边缘节点的服务器从区域中心的服务器获取数据提供给用户。
区域中心从根节点获取数据提供给边缘节点。
至于根节点的数据来源,则有两种情况:推流和拉流。
推流,是直播商(主播)将直播数据主动推送到CDN的某个节点上,然后这个节点再推送到根节点。
拉流,是指根节点主动去拉取指定位置的数据。
为了达到跨运营商传数据不丢包并且延迟小的目的,根节点肯定是要BGP机房或者多线要房的。即每一台服务器都是同时连接多个运营商,从而实现跨运营商的高质量中转传输。
BGP和多线机房的主要区别在于:BGP机房一般是前端的路由器实现多运营商的路由,服务器上只需要配置一个IP,而多线机房则是将每个运营商的线路都最终接到服务器上,服务器需要配置多个IP。
从价格上讲,BGP和多线机房的租用和带宽费用肯定要高于单线机房的。因此,根节点一般不作为用户直接访问,以降低费用。
二、回源
当用户访问边缘节点,边缘节点如果本地没有缓存用户所要的数据,就要向区域中心请求数据(对于直播的情况,则是肯定没有缓存数据,肯定需要回源)。区域中心如果没有缓存数据则向根节点请求数据,依此类推,这个请求数据逐步回到数据源的过程做回源,经过的路径叫回源路径。
一般情况下,每个边缘节点至少需要配置两个回源的区域中心(一主一备),而最终根节点机房也至少两个。也即整个回源径中,一直到根节点都需要有冗余路径以备机房或中间网络故障导致回源失败。另外,同个机房内部一般也通过lvs+keepalived来实现服务器的负载均衡及故障切换。
三、调度
我们知道,不同地区的用户访问同一个视频时,输入的URL是一样的,为什么广东电信的用户最终访问的是广东电信边缘节点的服务器,其它地方访问的也是其本地的服务器?这就是通过调度技术实现的了。目前,调度技术主要基于两种:智能DNS、HTTP 302跳转。
这里先讲下本地DNS(Local DNS),比如家庭用户拉宽带时,运营商有时会直接给用户IP和DNS服务器地址。当然,现在大部分都是通过用户路由器、或电脑拨号自动获取。这个DNS服务器地址就是本地DNS(注意,如果是路由器拨号,那么电脑再从路由器DHCP获取到的DNS就不再是Local DNS地址了,因为此时电脑上获取到的是路由器的LAN地址了)。
所谓智能DNS,即是DNS源服务器(CDN服务端自己搭建)根据请求者(本地DNS服务器)的IP查询数据库,判断此IP归属的运营商以及地区,从而返回相对应的服务器IP。然而,这种方式存在一些问题,比如当用户把电脑上配置的本地DNS服务器是114.114.114.114、8.8.8.8这类共公服务器时,则无法准确定位(当然,现在8.8.8.8也支持把Local DNS的IP传给DNS源服务器,但用的是其它技术,这里不作详细讨论)。另外一种情况是小运营(比如长城宽带)的本地DNS服务器在向DNS源服务器请求前,判断DNS源服务器为电信(或联通)的IP,为了避免跨网传输的丢包问题,就买了电信的线路接入到自己的DNS服务器上,从而在向DNS源服务器请求数据时,源IP更改为电信(或联通)的IP,此时得到的返回数据自然也就不对了。
HTTP 302跳转,是将所有用户访问的网址解析到同一台http服务器(调度服务器)上,然后服务器根据用户的IP判断用户的地理位置和运营端,从而返回一个http 302跳转页面给用户浏览器,指向相应的服务器。对比于智能DNS服务器的调度方式,这种方式的好处是调度服务器获取到的是用户的IP,不存在因为本地DNS原因导致的问题。但是,这种方式只是针对http方式的访问有效,对于rtmp等协议则无效。
这里顺便提一下其它调度失败的例子:
很多小运营商,采取了网内劫持的方式,将用户的访问劫持到其它服务器。这里劫持有几种:
一是个别运营人员自己的违法操作,将用户访问的资源跳转到广告或下载其它流氓软件之类的,从而获得。当然,这种不仅专门针对CDN而已。
二是小运商为了节省成本,在自己网内搭建缓存服务器。(因为运营商间访问是要向对方运营商付费的,有个流量结算的)。从而当用户访问同一url时,就劫持到自己的缓存服务器了。
三是运营的本地DNS服务器在向源服务器请求解析时,因为中间丢包等原因没有收到,于是替换成一个导航页面的IP返回给用户。
当然,以上说的调度只是提到根据IP来判断地理位置和运营,实际应用中影响因素将更为复杂。 比如,需要根据运营平台的监控数据(机房及服务器带宽使用情况、回源路径的网络质量情况、历史质量情况等)来决定调度。顺便说下,根据中国网络现状主,当某一个机房带宽爆满需要调度到其它机房时,此时调度肯定应该是同运营商优先,而非地理位置优先。
四.附加功能
一般直播系统都会几个附加的功能需求:转点播(保存视频)、切片、定时截图、加水印、转码(转成多种不同清晰度的视频流供选择)、提供api供客户获取数据(比如在线人数)、禁播(比如出现非法内容时可以瞬间全网禁播)、防盗链。
原文出自:
http://blog.too2.net/?p=297
转载请注明转自:辛碌力成【http://blog.too2.net】
发表评论