本想本身写这个主题的文章,但网上已经有人写了一篇很是好的文章,以为难以望其项背。就没有必要再写,直接转载以下:php
在不一样地域的用户访问网站的响应速度存在差别,为了提升用户访问的响应速度、优化现有Internet中信息的流动,须要在用户和服务器间加入中间层CDN. 使用户能以最快的速度,从最接近用户的地方得到所需的信息,完全解决网络拥塞,提升响应速度,是目前大型网站使用的流行的应用方案.html
CDN的全称是Content Delivery Network,即内容分发网络。其目的是经过在现有的Internet中增长一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户能够就近取得所需的内容,提升用户访问网站的响应速度。从技术上全面解决因为网络带宽小、用户访问量大、网点分布不均等缘由,提升用户访问网站的响应速度。前端
Cache层的技术,消除数据峰值访问形成的结点设备阻塞。Cache服务器具备缓存功能,因此大部分网页对象(Web page object),如html, htm, php等页面文件,gif,tif,png,bmp等图片文件,以及其余格式的文件,在有效期(TTL)内,对于重复的访问,没必要从原始网站从新传送文件实体, 只需经过简单的认证(Freshness Validation)- 传送几十字节的Header,便可将本地的副本直接传送给访问者。因为缓存服务器一般部署在靠近用户端,因此能得到近似局域网的响应速度,并有效减小广域带宽的消耗。不只能提升响应速度,节约带宽,对于加速Web服务器,有效减轻源服务器的负载是很是有效的。算法
根据加速对象不一样,分为客户端加速和服务器加速缓存
CDN对网络的优化做用主要体如今以下几个方面 服务器
咱们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差异: 网络
由上图可见,用户访问未使用CDN缓存网站的过程为:负载均衡
CDN网络是在用户和服务器之间增长Cache层,主要是经过接管DNS实现,将用户的请求引导到Cache上得到源服务器的数据。下面让咱们看看访问使用CDN缓存后的网站的过程: 性能
经过上图,咱们能够了解到,使用了CDN缓存后的网站的访问过程变为:优化
经过以上的分析咱们能够获得,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,须要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 因为用户访问网站的第一步就是域名解析,因此经过修改dns来引导用户访问是最简单有效的方式.
对于普通的Internet用户,每一个CDN节点就至关于一个放置在它周围的网站服务器. 经过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器同样,响应用户的请求. 因为它离用户更近,于是响应时间必然更快.
从上面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器 之间.
在系统中,执行dig命令,输出以下:
#dig img.alibaba.com ; 部分省略 ;; QUESTION SECTION: ;img.alibaba.com. IN A ;; ANSWER SECTION: img.alibaba.com. 600 IN CNAME img.alibaba.com.edgesuite.net. img.alibaba.com.edgesuite.net. 7191 IN CNAME img.alibaba.com.georedirector.akadns.net. img.alibaba.com.georedirector.akadns.net. 3592 IN CNAME a1366.g.akamai.net. a1366.g.akamai.net. 12 IN A 204.203.18.145 a1366.g.akamai.net. 12 IN A 204.203.18.160 ; 部分省略
从上面查询结果能够看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服务商) 去跳转到 智能调度器上的.
在系统中,继续执行dig命令,输出以下:
#dig www.discovery.com ; 部分省略 ;; QUESTION SECTION: ;www.discovery.com. IN A ;; ANSWER SECTION: www.discovery.com. 1077 IN CNAME www.discovery.com.edgesuite.net. www.discovery.com.edgesuite.net. 21477 IN CNAME a212.g.akamai.net. a212.g.akamai.net. 20 IN A 204.203.18.154 a212.g.akamai.net. 20 IN A 204.203.18.147 ; 部分省略
从上面查询结果能够看出 www.discovery.com. IN CNAME www.discovery.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服务商) 去跳转到 智能调度器上的.
总结:通常来讲,网站须要使用到CDN服务时,通常都是将须要加速访问的域名 CNAME到 CDN服务商的域名上。缓存服务和调度功能都是由服务商来完成。
在用户请求解析域名的时候,智能DNS判断用户的LocalDns的IP,而后跟DNS服务器内部的IP表范围匹配一下,看看用户是电信仍是网通用户,而后给用户返回对应的IP地址。这里使用的是静态拓扑的方法,只是判断LocalDns的IP.要想使用更复杂的调度算法能够考虑商业产品,如F5的3DNS。
在这里咱们将使用 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 |
如下是named.conf配置文件的部分截取,只是涉及到 View 的部分,其余细节可参考互联网.
acl "cnc_iprange"{ //定义ip范围(网通) 192.168.1.0/24; 192.168.2.0/24; //此处只是示例,其余省略 }; acl "tel_iprange"{ //定义ip范围(电信) 192.168.3.0/24; 192.168.4.0/24; //其余省略 }; acl "edu_iprange"{ //定义ip范围(教育网) 192.168.5.0/24; 192.168.6.0/24; //其余省略 }; acl "default_iprange"{ //定义ip范围(默认) 192.168.7.0/24; 192.168.8.0/24; //其余省略 }; 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的语法 请参考互联网.
域名解析流程简要说明
说明:再此过程当中,咱们简化了主DNS 到 智能DNS 之间的CNAME过程(为了简要说明问题).
这里使用的是静态拓扑(根据ip范围)的方法,也称为地域化方法,只是判断LocalDns的IP.
此简化方案中的存在的问题
参考:http://blog.csdn.net/luoweifu/article/details/51031099