第七章 简单cdn
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者:田逸(sery@163.com)
7.1 cdn
概述
Cdn是Content Delivery Network首字母缩写,译成中文就是内容分发网络。使用cdn技术的主要目的在于增加访问速度、解决南北互联(中国适用)、提高用户体验等等。Cdn历史上最有名的事件:当属关于克林顿丑闻的斯塔尔报告被放在互联网,因下载该报告的人太多,最终导致服务器瘫痪。该事件直接促使cdn的诞生。
最早的商业cdn服务可能诞生于1999年,但本人闻之cdn这个业务则是2005年的事情了。到了2006年的春天,我有幸得到一个cdn设计方面的工作,这才有机会全面了解cdn原理、设计、部署以及运营等。
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />
7.1.1
为什么需要使用
cdn
1、
解决网站高流量、大并发的问题。我们知道,任何一个物理设备,其负载都有一个极限。为了应对访问量突增,使用cdn服务是一个好的系统扩容方案。
2、
解决南北互联问题。我国的网络是划江而治的格局,因为利益之争,各网络服务商之间并不是通力协作,而是采取各种手段相互限制。这就导致各网之间的互联互通存在很大的问题,具体表现为:电信的用户访问放置在网通机房的服务器,响应时间特别长,反之亦然。使用cdn技术,可以让电信的用户访问电信的内容缓存服务器,网通的用户访问网通的内容缓存服务器。通过这样一种策略,绕开了运行商之间人为设置的障碍。
3、
访问加速。Cdn采用缓存技术,把访问对象缓存起来,有的技术甚至能把对象缓存到内存(如varnish),这在效果上表现出来就是访问加速。
4、
降低总体运营成本。在一些互联互通比较好的第三方BGP机房,其带宽费高达300-400元/兆/月,而二、三线城市单线接入的带宽费100M一年的费用才5万左右。使用cdn运营方案,我们把源站放在BGP机房,而把缓存服务器放置在带宽费用较低的其它地方。因为cdn的大部分流量被转移到缓存服务器上,源站只有较小的访问请求,因此总体运营成本大幅降低。
5、
提高网站的可用性。源站的访问量变得很小,这意味着源站系统有更低的负载,更低的磁盘i/o,除故障的几率大大降低。对于缓存服务器,多个服务器做成集群,保证整个系统的高可用。
6、
防ddos***。***负载被分配到不同的物理服务器,客观上起到防ddos的作用。
7.1.2
cdn
适用的场合
任何一门技术,都有一定的适用范围,cdn也不另外。实践证明,cdn对于静态对象的加速和发布具有很好的效果,但对于动态的网站,则效果不佳。为了使用cdn技术所带来的好处,我们可以通过动态内容静态化、静态内容分离(如动态站点里的图片)等方式,来加速访问和增强用户体验。
有哪些对象是静态可缓存的呢?这包括html页面文件、视频文件、js文件、css文件、exe文件、图片文件(jpeg、gif、png等)等。
7.1.3
cdn
的组成
Cdn是一种组合技术,它包括源站、缓存服务器、智能dns、客户端等几个部分。
源站指发布内容的原始站点。新增、删除和更改网站的文件,都是在源站上进行的;缓存服务器抓取的对象也全部来自于源站。
缓存服务器是直接提供给用户访问的站点资源,有一个或数个服务器组成;当一个用户发起访问时,他的访问请求被智能dns定位到离他较近的缓存服务器。如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户;如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户。
智能dns是整个cdn的核心,它负责根据用户的来源,将其访问请求转向到离用户较近或较合适的缓存服务器—如把长沙电信的用户请求转向到长沙电信机房的缓存服务器。实现智能dns的一种技术是:bind view,在bind 9以后的版本,都应该支持view 视图这个功能。另外还有一个次一点的方案,即dns轮询方式。
客户端即普通发起访问的用户,一般的访问方式是浏览器。这个不再做说明。
除了前面列举的组件外,还有一个可选项目,即用来进行内部域名以及源站的域名解析。因为是可选的,因此也可以通过使用本地hosts指定主机名来代替。不过有一点需要注意,内部域名系统不能使用合法注册的域名服务器,也即在互联网上,找不到这个域名系统的NS记录。为什么呢?请继续往下看。
接下来,我们以图示来总结一下cdn各组件间的关系。
![](https://i-blog.csdnimg.cn/blog_migrate/889d063d084111daf3f24e31c37534a0.png)
图7-1展示了两种比较典型的访问场景,这两种场景,基本上能反应这个cdn的工作全貌:
场景一:当“A网用户”访问被cdn加速的站点 http://www.formyz.cn时,从本地的dns查询域名,最终可能在全局智能dns服务器得到域名所对应的ip地址,即本图所示“A网的缓存服务器”的ip;接着“A网用户”浏览器向“A网的缓存服务器”发起访问请求,幸运的是所需的默认页面文件index.htm正好被缓存在“A网的缓存服务器”里,于是缓存服务器立即返还数据,完成一次访问请求。
场景二:当“B网用户”访问被cdn加速的站点 http://www.formyz.cn时,从本地的dns查询域名,最终可能在全局智能dns服务器得到域名所对应的ip地址,即本图所示“B网的缓存服务器”的ip;接着“B网用户”浏览器向“B网的缓存服务器”发起访问请求,但是缓存服务器并没有缓存默认页面文件index.html,它需要先从源站取得这个对象,缓存并把内容返还给“B网用户”。“B网缓存服务器”通过“内部dns”知道源站在哪里。