最近想了解下CDN,从网上找了一些文档看了下,有的配合dig命令解释得蛮复杂的,但总感觉缺乏一些形象的例子供初学者掌握。首先,有几个概念需明确:

1、GSLB全局负载均衡和iDNS智能DNS是一个意思,并不是两个东西。在实现方式上,有F5 GTM等成熟的厂家产品,也可以自己用开源软件,比如bind去实现。

2、CDN包括GSLB+缓存,这里面的缓存又包括本地负载均衡(lvs/nginx/haproxy)、缓存服务器(squid或者varnish)等东西,都是开源软件。

3、目前CDN主要有蓝汛和网宿两个内地厂家,但一线互联网公司也开始自己搞CDN了。


任何一个介绍CDN的文档里面都会提到CDN的两个核心理念:

1、根据一定策略优化网站访问(就近访问是最基本的)

2、通过在传统DNS里面把要加速的域名NS或者CNAME到GSLB,实现对传统DNS过程的接管


OK,问题来了,我们如何知道一个互联网域名是否用到了CDN,用了几个,部署在哪里?

以www.163.com作为例子分析下:

公司内网宽带用的是深圳电信的,我们来看看nslookup结果:

Server:  dc01.delcomhk.com
Address:  192.168.1.26

Non-authoritative answer:
Name:    163.xdwscache.glb0.lxdns.com
Addresses:  113.107.112.214, 219.128.78.74, 113.107.56.96
Aliases:  www.163.com, www.163.com.lxdns.com


这里解析出了3个地址,很容易查到,这三个地址分别属于广东湛江电信、广东佛山电信和广东揭阳电信。

关于CDN原理的一个形象例子_第1张图片

这三个地级市,正好横跨整个广东省。由此可见,网易在广东电信的CDN就在这三个地方。


我们再在一台北京联通机房的生产系统上看看:

[root@BJ-MSPRG-AP2 /]#nslookup www.163.com
Server:         202.106.0.20
Address:        202.106.0.20#53

Non-authoritative answer:
www.163.com     canonical name = www.163.com.lxdns.com.
www.163.com.lxdns.com   canonical name = 163.xdwscache.glb0.lxdns.com.
Name:   163.xdwscache.glb0.lxdns.com
Address: 111.202.57.27
Name:   163.xdwscache.glb0.lxdns.com
Address: 125.39.1.138


111.202.57.27和125.39.1.138,一个是北京联通的地址,一个是天津联通的地址。

与前面在广东电信下解析出的三个地址完全不同,这就实现了所谓的CDN就近访问。