CDN初探

一,什么是CDN

世界上最遥远的距离不是生与死,而是你在电信,而你所访问的资源服务器却在联通网络;是你在大天朝,而你所访问的资源服务器却远在大洋彼岸的美利坚。为了解决这些由于地址位置,甚至网络环境导致的访问响应漫长的问题,遂有了CDN技术。

CDN全称Content delivery network。是一种内容分发网络技术。其核心点在于通过一个遍及全球的网络来分发内容,使得全球任意一个客户端对内容的请求,都能通过临近客户所在位置的CDN服务器获取内容(当然选定提供内容的服务器可能不仅仅看距离这一个唯度),而无需耗费时间去源服务器获取。同时内容被遍布全球CDN网络分发,能够有效的避免单一服务器提供资源所易遭受的DDOS攻击。

二,CDN获取的两种方式

为了让CDN进行内容分发,需要将原始服务器上的内容缓存至CDN服务器。达到该目的的手段有两种,push和pull

push

提前将内容上传至CDN服务器。然后源站引用CDN的url。

比如在www.example.com上引入百度的jQuery(虚构):

<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>

比如zealer.com上的视频地址url为: http://5069.vod.myqcloud.com/

pull

CDN负责自动拉取源站的内容进行缓存分发。这种方式源站对需要分发的资源url依然使用自己的域名。只是这个域名最终会被DNS解析到CDN服务器。CDN服务器去响应输出该资源,若没有找到该资源,CDN会去源站拉取该资源进行初始化缓存,叫做origin pull。至于如何知道该资源源站所对应的ip,我猜想应该是CDN中配置找不到资源时,初始化的源站ip。这种方式的示意图如下:

案例

知乎网站的静态文件就使用了Akamai的CDN服务。请求static.zhihu.com最终会被解析到akamai的服务器上:

三,两种方式的优缺点

push

优点:内容的更新更可控,上传后CDN可一直缓存不用失效。

缺点:对于更新频繁的资源,主动push方式较为麻烦,每次更新都需要主动push

pull

优点:对源站来说,内容更新到CDN是透明的,该过程会自动进行

缺点:

1、相对不可控,第一次缓存内容时,CDN要去源站拉取,这意味这初始访问的用户并不能体验到速度的提升。
2、CDN服务器一旦拉取某内容,会将其缓存一段时间。此时源站对该内容的更新可能并不能马上被CDN同布到,造成用户访问内容的不一致。