当前位置: 首页 > news >正文

简单cdn

第七章 简单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文件、图片文件(jpeggifpng等)等。

 

7.1.3 cdn 的组成

 

Cdn是一种组合技术,它包括源站、缓存服务器、智能dns、客户端等几个部分。

 

源站指发布内容的原始站点。新增、删除和更改网站的文件,都是在源站上进行的;缓存服务器抓取的对象也全部来自于源站。

 

缓存服务器是直接提供给用户访问的站点资源,有一个或数个服务器组成;当一个用户发起访问时,他的访问请求被智能dns定位到离他较近的缓存服务器。如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户;如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户。

 

智能dns是整个cdn的核心,它负责根据用户的来源,将其访问请求转向到离用户较近或较合适的缓存服务器如把长沙电信的用户请求转向到长沙电信机房的缓存服务器。实现智能dns的一种技术是:bind view,在bind 9以后的版本,都应该支持view 视图这个功能。另外还有一个次一点的方案,即dns轮询方式。

 

客户端即普通发起访问的用户,一般的访问方式是浏览器。这个不再做说明。

 

除了前面列举的组件外,还有一个可选项目,即用来进行内部域名以及源站的域名解析。因为是可选的,因此也可以通过使用本地hosts指定主机名来代替。不过有一点需要注意,内部域名系统不能使用合法注册的域名服务器,也即在互联网上,找不到这个域名系统的NS记录。为什么呢?请继续往下看。

 

接下来,我们以图示来总结一下cdn各组件间的关系。
 
 
 
 
 
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”知道源站在哪里。

相关文章:

  • 在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架(一)
  • 2003活动目录之域重命名
  • 小黑颠覆之作 ThinkPad Edge 13真机试用
  • 年前要做的事
  • alskdfj
  • 思科中文技术社区
  • tcp wrapper网络服务的搭建和配置
  • Extjs写的后台框架
  • ‘打不开’的文件夹
  • Cisco ap配置手册
  • 软件包管理
  • 我眼里的Exchange 2010 之:1—DAG
  • 现在的小孩,怎么得了!!!!
  • WAP 站点 必读
  • 网管试题合集
  • Angular2开发踩坑系列-生产环境编译
  • CSS实用技巧干货
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • express.js的介绍及使用
  • Java深入 - 深入理解Java集合
  • Joomla 2.x, 3.x useful code cheatsheet
  • js 实现textarea输入字数提示
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • npx命令介绍
  • orm2 中文文档 3.1 模型属性
  • Redux系列x:源码分析
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpringBoot 实战 (三) | 配置文件详解
  • Twitter赢在开放,三年创造奇迹
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • win10下安装mysql5.7
  • 区块链共识机制优缺点对比都是什么
  • 使用Swoole加速Laravel(正式环境中)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • MPAndroidChart 教程:Y轴 YAxis
  • 湖北分布式智能数据采集方法有哪些?
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​【已解决】npm install​卡主不动的情况
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (3)STL算法之搜索
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)elasticsearch 源码之启动流程分析
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net IOC框架入门之一 Unity
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net(C#)中String.Format如何使用
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?