CDN及CDN加速原理
本想自己写这个主题的文章,但网上已经有人写了一篇非常好的文章,觉得难以望其项背。就没有必要再写,直接转载如下:
在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN. 使用户能以最快的速度,从最接近用户的地方获得所需的信息,彻底解决网络拥塞,提高响应速度,是目前大型网站使用的流行的应用方案.
1. CDN 概述
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。
CDN网络节点
Cache层的技术,消除数据峰值访问造成的结点设备阻塞。Cache服务器具有缓存功能,所以大部分网页对象(Web page object),如html, htm, php等页面文件,gif,tif,png,bmp等图片文件,以及其他格式的文件,在有效期(TTL)内,对于重复的访问,不必从原始网站重新传送文件实体, 只需通过简单的认证(Freshness Validation)- 传送几十字节的Header,即可将本地的副本直接传送给访问者。由于缓存服务器通常部署在靠近用户端,所以能获得近似局域网的响应速度,并有效减少广域带宽的消耗。不仅能提高响应速度,节约带宽,对于加速Web服务器,有效减轻源服务器的负载是非常有效的。
根据加速对象不同,分为客户端加速和服务器加速
- 客户端加速 : Cache部署在网络出口处,把常访问的内容缓存在本地,提高响应速度和节约带宽;
- 服务器加速 : Cache部署在服务器前端,作为Web服务器的代理缓存机,提高Web服务器的性能,加速访问速度。 如果多台Cache加速服务器且分布在不同地域,需要通过有效地机制管理Cache网络,引导用户就近访问(比如通过DNS引导用户),全局负载均衡流量,这是CDN内容传输网络的基本思想。
CDN对网络的优化作用主要体现在如下几个方面
- 解决服务器端的“第一公里”问题
- 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
- 减轻了各省的出口带宽压力
- 缓解了骨干网的压力
- 优化了网上热点内容的分布
2. CDN 的工作原理
2.1. 传统访问过程(未加速缓存服务)
我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:
传统访问过程
由上图可见,用户访问未使用CDN缓存网站的过程为:
- 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
- LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
- ROOT DNS将域名授权dns记录回应给 LocalDns
- LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
- 域名授权dns 查询域名记录后,回应给 LocalDns
- LocalDns 将得到的域名ip地址,回应给 用户端
- 用户得到域名ip地址后,访问站点服务器
- 站点服务器应答请求,将内容返回给客户端.
2.2. CDN访问过程(使用缓存服务)
CDN网络是在用户和服务器之间增加Cache层,主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据。下面让我们看看访问使用CDN缓存后的网站的过程:
CDN访问过程
通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:
- 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
- LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
- ROOT DNS将域名授权dns记录回应给 LocalDns
- LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
- 域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
- LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
- 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
- LocalDns 将得到的域名ip地址,回应给 用户端
- 用户得到域名ip地址后,访问站点服务器
- CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)
通过以上的分析我们可以得到,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,需要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 由于用户访问网站的第一步就是域名解析,所以通过修改dns来引导用户访问是最简单有效的方式.
2.3. CDN网络的组成要素
对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器. 通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求. 由于它离用户更近,因而响应时间必然更快.
从上面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器 之间.
- 智能调度DNS(比如f5的3DNS)
智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上. - 缓存功能服务
负载均衡设备(如lvs,F5的BIG/IP)
内容Cache服务器(如squid)
共享存储(根据缓存数据量多少决定是否需要)
3. CDN 智能调度Dns 实例分析
3.1 分析img.alibaba.com域名
在系统中,执行dig命令,输出如下:
#dig img.alibaba.com ; 部分省略 ;; QUESTION SECTION:
;img.alibaba.com. IN A ;; ANSWER SECTION:
img.alibaba.com. IN CNAME img.alibaba.com.edgesuite.net.
img.alibaba.com.edgesuite.net. IN CNAME img.alibaba.com.georedirector.akadns.net.
img.alibaba.com.georedirector.akadns.net. IN CNAME a1366.g.akamai.net.
a1366.g.akamai.net. IN A 204.203.18.145
a1366.g.akamai.net. IN A 204.203.18.160 ; 部分省略
从上面查询结果可以看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服务商) 去跳转到 智能调度器上的.
3。2 分析www.discovery.com域名
在系统中,继续执行dig命令,输出如下:
#dig www.discovery.com ; 部分省略 ;; QUESTION SECTION:
;www.discovery.com. IN A ;; ANSWER SECTION:
www.discovery.com. IN CNAME www.discovery.com.edgesuite.net.
www.discovery.com.edgesuite.net. IN CNAME a212.g.akamai.net.
a212.g.akamai.net. IN A 204.203.18.154
a212.g.akamai.net. IN A 204.203.18.147 ; 部分省略
从上面查询结果可以看出 www.discovery.com. IN CNAME www.discovery.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服务商) 去跳转到 智能调度器上的.
总结:一般来说,网站需要使用到CDN服务时,一般都是将需要加速访问的域名 CNAME到 CDN服务商的域名上。缓存服务和调度功能都是由服务商来完成。
4. CDN的 智能调度Dns 简化实现
4.1. 调度策略说明
在用户请求解析域名的时候,智能DNS判断用户的LocalDns的IP,然后跟DNS服务器内部的IP表范围匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址。这里使用的是静态拓扑的方法,只是判断LocalDns的IP.要想使用更复杂的调度算法可以考虑商业产品,如F5的3DNS。
4.2. 假设CDN节点规划
在这里我们将使用 BIND 的View功能来实现运营商的区分,假设我们在每个运营商的机房都放有一个CDN节点,列表如下:
域名 | 运营商(view) | 服务地址 |
---|---|---|
www.cdntest.com | 网通(CNC) | 192.168.0.1 |
www.cdntest.com | 电信(TELECOM) | 192.168.0.2 |
www.cdntest.com | 教育网(EDU) | 192.168.0.3 |
www.cdntest.com | 默认(ANY) | 192.168.0.4 |
4.3. bind view 配置
以下是named.conf配置文件的部分截取,只是涉及到 View 的部分,其他细节可参考互联网.
acl "cnc_iprange"{ //定义ip范围(网通)
192.168.1.0/;
192.168.2.0/;
//此处只是示例,其他省略
}; acl "tel_iprange"{ //定义ip范围(电信)
192.168.3.0/;
192.168.4.0/;
//其他省略
}; acl "edu_iprange"{ //定义ip范围(教育网)
192.168.5.0/;
192.168.6.0/;
//其他省略
}; acl "default_iprange"{ //定义ip范围(默认)
192.168.7.0/;
192.168.8.0/;
//其他省略
}; view "CNC" {
Match-clients{cnc_iprange};
zone "." IN {
type hint;
file "named.root";
}; zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
}; zone "cdntest.com" IN {
type master;
file "cnc_cdntest.zone";
};
}; view "TEL" {
Match-clients{tel_iprange};
zone "." IN {
type hint;
file "named.root";
}; zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
}; zone "cdntest.com" IN {
type master;
file "tel_cdntest.zone";
};
}; view "EDU" {
Match-clients{edu_iprange};
zone "." IN {
type hint;
file "named.root";
}; zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
}; zone "cdntest.com" IN {
type master;
file "edu_cdntest.zone";
};
}; view "DEFAULT" {
Match-clients{default_iprange};
zone "." IN {
type hint;
file "named.root";
}; zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
}; zone "cdntest.com" IN {
type master;
file "default_cdntest.zone";
};
};
zone文件的配置说明
这4个zone配置文件(cnc_cdntest.zone,tel_cdntest.zone,edu_cdntest.zone,default_cdntest.zone)中,只有www.cndtest.com的A记录不一样,其他的都是一样.
域名 | zone配置文件 | A记录地址 |
---|---|---|
www.cdntest.com | cnc_cdntest.zone | 192.168.0.1 |
www.cdntest.com | tel_cdntest.zone | 192.168.0.2 |
www.cdntest.com | edu_cdntest.zone | 192.168.0.3 |
www.cdntest.com | default_cdntest.zone | 192.168.0.4 |
以上只列出了 www.cdntest.com 的A记录地址,其他关于zone的语法 请参考互联网.
域名解析流程简要说明
- 用户向 LocalDns 查询域名 www.cdntest.com
- LocalDns 向 授权DNS 查询www.cdntest.com
- 授权DNS 判断用户使用的 LocalDns的ip地址,匹配上述设置的ip范围,如果范围在网通,就将网通对应的ip地址(192.168.0.1),回应给LocalDns(其他依此类推)
- LocalDns 将得到的域名ip地址,回应给 用户端 (域名解析完成)
说明:再此过程中,我们简化了主DNS 到 智能DNS 之间的CNAME过程(为了简要说明问题).
这里使用的是静态拓扑(根据ip范围)的方法,也称为地域化方法,只是判断LocalDns的IP.
此简化方案中的存在的问题
- 如果用户设置错误的dns,可能会导致用户访问比原来慢(比如网通用户设置了电信的DNS)
- 不能判断CDN节点服务器的健康状态和容量状态,可能会把用户定向到不可用的CDN节点
- 由于静态拓扑方法,可能存在用户访问的CDN节点不是最优化和最快的
- …..可能还有其他想不到的….
5. 总结(Summary)
- 在建立CDN网路时,最关键的就是 智能调度DNS,这个是CND网络总协调,通过高效的调度算法,可以使用户得到最佳的访问体验.
- 其次就是 CND节点的管理,比如涉及到 内容的同步机制,配置文件的更新等等,都需要有一套机制来保证.
- 当然在大型网站中,也要考建设CDN体系的成本和回报率.
参考:http://blog.csdn.net/luoweifu/article/details/51031099
CDN及CDN加速原理的更多相关文章
- Linux就业技术指导(四):企业CDN缓存加速原理解密
1.1 CDN(网站加速) 1.1.1 什么是CDN CDN的全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和 ...
- MIP缓存加速原理 MIP不仅仅只是CDN
什么是MIP?我想我们现在都知道.可是你真的了解MIP吗?MIP加速原理是什么?MIP 是用 CDN 做加速的么?准确答案是:是,但不只是. 很多人并认为MIP百度排名会靠前,甚至权重会提高?作为一个 ...
- 什么是网站CDN服务,CDN加速原理?
转载:http://server.zzidc.com/fwqcjwt/728.html 摘要:在为您的网站打开速度发愁吗?您有没有发现有些大网站每天拥有几十万或者上百万,甚至几亿用户的访问,而且不同用 ...
- 一文搞懂CDN加速原理
开源Linux 长按二维码加关注~ 一.什么是 CDN CDN的全称是(Content Delivery Network),即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE ...
- CDN和CDN加速原理
随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从 而使用户的访问质量受到严重影响.特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异 ...
- 什么是CDN及CDN加速原理
目录 CDN是什么? CDN的相关技术 负载均衡技术 动态内容分发与复制技术 缓存技术 谁需要CDN? CDN的不足 随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激 ...
- CDN和智能DNS原理和应用 (原)
CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络. CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...
- CDN对于动态加速是否有效
CDN对于动态加速是否有效的问题.关于这个问题,一直存在一些分歧,部分人认为有效,部分人认为无效,主要是CDN技术也在更新,而且是比较低调的进行着更新,所以并不是所有人都清楚CDN对动态加速的效果.其 ...
- CDN存储和加速静态文件是什么回事(整理)(CDN是什么)
CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...
随机推荐
- visual svn使用教程
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什 ...
- 寻找春天 九宫格日记-2014.04.26
写九宫格日记 总会在听到某一首歌的时候泪流满面:总会在看到某个似曾相识的背影的时候惆怅莫名,总会在嗅到某种香味的时候默默发呆,总会在经过某个地方的时候频频回首.生命有限,不要把它浪费在重复别人的生活上 ...
- 优雅的App完全退出方案(没有任何内存泄漏隐患)
在Android开发过程中,特别是界面比较多的情况下,用平常的退出方式往往是不能完全退出这个应用,网络上也好多各种退出方案.其中一种应该是被广大开发者采纳使用,也非常的清晰方便,就是在Applicat ...
- Java开发机器上的配置及zookeeper配置
Java开发机器上的配置及zookeeper配置 /etc/profile 文件的后面加入下面的内容: # jdk, zookeeper, kafka, ant, maven export APACH ...
- OpenCV——PS 图层混合算法 (三)
具体的算法原理可以参考 PS图层混合算法之三(滤色, 叠加, 柔光, 强光) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ ...
- PS 滤镜算法原理——拼贴
%%%% Tile %%%%% 实现拼贴效果 %%%%% 将原图像进行分块,然后让图像块在 %%%%% 新图像范围内进行随机移动,确定移动后的边界 %%%%% 将移动后的图像块填入新图像内 clc; ...
- SharePoint 2013配置启用搜索服务
1.安装完毕SharePoint 2013,新建网站集,点击搜索,出现如下错误(因为没配置,别激动). 2.尝试启动服务器场中的服务之SharePoint Server Search,提示新建搜索应用 ...
- getContext在谷歌浏览器中,使用时要先加载canvas对象,否则会提示'getContext is null'
<body> <canvas id=" style="border:1px solid #c3c3c3;"> Your browser does ...
- IT咨询顾问:一次吐血的项目救火
年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登录,对方技术人员一头雾水不知道什么原因 ...
- search for a range(找出一个数在数组中开始和结束位置)
Given an array of integers sorted in ascending order, find the starting and ending position of a giv ...