CDN架构以及原理分析

详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 

在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN. 使用户能以最快的速度,从最接近用户的地方获得所需的信息,彻底解决网络拥塞,提高响应速度,是目前大型网站使用的流行的应用方案.

1. CDN 概述

  • CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络"边缘"的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

     

    cdn_overview.gif

     

  • Cache层的技术,消除数据峰值访问造成的结点设备阻塞。Cache服务器具有缓存功能,所以大部分网页对象(Web page object),如html, htm, php等页面文件,gif,tif,png,bmp等图片文件,以及其他格式的文件,在有效期(TTL)内,对于重复的访问,不必从原始网站重新传送文件实体, 只需通过简单的认证(Freshness Validation)- 传送几十字节的Header,即可将本地的副本直接传送给访问者。由于缓存服务器通常部署在靠近用户端,所以能获得近似局域网的响应速度,并有效减少广域带宽的消耗。不仅能提高响应速度,节约带宽,对于加速Web服务器,有效减轻源服务器的负载是非常有效的。

     

  • 根据加速对象不同,分为 客户端加速 和 服务器加速

     

    • 客户端加速 : Cache部署在网络出口处,把常访问的内容缓存在本地,提高响应速度和节约带宽;
    • 服务器加速 : Cache部署在服务器前端,作为Web服务器的代理缓存机,提高Web服务器的性能,加速访问速度 
      如果多台Cache加速服务器且分布在不同地域,需要通过有效地机制管理Cache网络,引导用户就近访问(比如通过DNS引导用户),全局负载均衡流量,这是CDN内容传输网络的基本思想.

       

  • CDN对网络的优化作用主要体现在如下几个方面  - 解决服务器端的“第一公里”问题  - 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响  - 减轻了各省的出口带宽压力  - 缓解了骨干网的压力  - 优化了网上热点内容的分布

2. CDN 的工作原理

2.1. 传统访问过程(未加速缓存服务)

我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

normal.png

由上图可见,用户访问未使用CDN缓存网站的过程为:

  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
  2. LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
  3. ROOT DNS将域名授权dns记录回应给 LocalDns
  4. LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
  5. 域名授权dns 查询域名记录后,回应给 LocalDns
  6. LocalDns 将得到的域名ip地址,回应给 用户端
  7. 用户得到域名ip地址后,访问站点服务器
  8. 站点服务器应答请求,将内容返回给客户端.

2.2. CDN访问过程(使用缓存服务)

CDN网络是在用户和服务器之间增加Cache层,主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据
下面让我们看看访问使用CDN缓存后的网站的过程:

cdn.png

通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:

  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
  2. LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
  3. ROOT DNS将域名授权dns记录回应给 LocalDns
  4. LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
  5. 域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
  6. LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
  7. 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
  8. LocalDns 将得到的域名ip地址,回应给 用户端
  9. 用户得到域名ip地址后,访问站点服务器
  10. CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)

通过以上的分析我们可以得到,为了实现对普通用户透明(使用缓存后用户客户端无需进行任何设置)访问,需要使用DNS(域名解析)来引导用户来访问Cache服务器,以实现透明的加速服务. 由于用户访问网站的第一步就是 域名解析 ,所以通过修改dns来引导用户访问是最简单有效的方式.

2.3. CDN网络的组成要素

对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器. 
通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求. 
由于它离用户更近,因而响应时间必然更快.

从上面图中 虚线圈起来的那块,就是CDN层,这层是位于 用户端 和 站点服务器之间.

  • 智能调度DNS(比如f5的3DNS)

     

    智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析请求将最终由 智能调度DNS 负责处理.
    它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务.
    同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态,容量等,确保将用户的请求分配到就近可用的节点上.

     

  • 缓存功能服务
    • 负载均衡设备(如lvs,F5的BIG/IP)
    • 内容Cache服务器(如squid)
    • 共享存储(根据缓存数据量多少决定是否需要)

3. CDN 智能调度Dns 实例分析

  • 分析img.alibaba.com域名

     

    在系统中,执行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.145a1366.g.akamai.net.	12	IN	A	204.203.18.160; 部分省略
    
    从上面查询结果可以看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服务商) 去跳转到 智能调度器上的.

     

  • 分析www.discovery.com域名

     

    在系统中,继续执行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.154a212.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服务商的域名上.
    缓存服务和调度功能都是由服务商来完成.

4. CDN的 智能调度Dns 简化实现

4.1. 调度策略说明

在用户请求解析域名的时候,智能DNS判断用户的LocalDns的IP,然后跟DNS服务器内部的IP表范围匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址 
这里使用的是静态拓扑的方法,只是判断LocalDns的IP.要想使用更复杂的调度算法可以考虑商业产品,如F5的3DNS.

4.2. 假设CDN节点规划

在这里我们将使用 BIND 的View功能来实现运营商的区分,假设我们在每个运营商的机房都放有一个CDN节点,列表如下:

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

4.3. bind view 配置

  • 以下是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记录不一样,其他的都是一样.

     

www.cdntest.comcnc_cdntest.zone192.168.0.1
www.cdntest.comtel_cdntest.zone192.168.0.2
www.cdntest.comedu_cdntest.zone192.168.0.3
www.cdntest.comdefault_cdntest.zone192.168.0.4

以上只列出了 www.cdntest.com 的A记录地址,其他关于zone的语法 请参考互联网.

  • 域名解析流程简要说明

     

  1. 用户向 LocalDns 查询域名 www.cdntest.com
  2. LocalDns 向 授权DNS 查询www.cdntest.com
  3. 授权DNS 判断用户使用的 LocalDns的ip地址,匹配上述设置的ip范围,如果范围在网通,就将网通对应的ip地址(192.168.0.1),回应给LocalDns(其他依此类推)
  4. LocalDns 将得到的域名ip地址,回应给 用户端 (域名解析完成)

     

    说明:再此过程中,我们简化了主DNS 到 智能DNS 之间的CNAME过程(为了简要说明问题). 
    这里使用的是静态拓扑(根据ip范围)的方法,也称为地域化方法,只是判断LocalDns的IP.

     

  • 此简化方案中的存在的问题

     

  1. 如果用户设置错误的dns,可能会导致用户访问比原来慢(比如网通用户设置了电信的DNS)
  2. 不能判断CDN节点服务器的健康状态和容量状态,可能会把用户定向到不可用的CDN节点
  3. 由于静态拓扑方法,可能存在用户访问的CDN节点不是最优化和最快的
  4. .....可能还有其他想不到的....

5. 总结(Summary)

在建立CDN网路时,最关键的就是 智能调度DNS,这个是CND网络总协调,通过高效的调度算法,可以使用户得到最佳的访问体验.
其次就是 CND节点的管理,比如涉及到 内容的同步机制,配置文件的更新等等,都需要有一套机制来保证.
当然在大型网站中,也要考建设CDN体系的成本和回报率.

转自:http://www.51know.info/system_performance/cdn/cdn.html

转载于:https://www.cnblogs.com/grefr/p/5046310.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于VS2019的Eigen库安装详解

概念 Eigen是一个C开源线性代数库,以提供有关矩阵的的线性代数运算,解方程等功能。Eigen在很多领域如信号处理,图像处理,深度学习等起到重要作用,学习其操作方法,可以灵活的对线性代数、矩阵和矢量将进行计…

【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

目录 一、二阶算子简介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常见的运算符功能汇总

介绍 C#有很多运算符,可分为以下几种:算数运算符,比较运算符,条件运算符,赋值运算符,逻辑运算符。下面对不常见的运算符进行汇总。 概念 条件运算符 ?(可空类型修饰符) 引用类型可以使用空引用表示一…

SQL Server2012中如何通过bak文件还原SQL Server2012数据库

1 登陆完数据库后,不要新建数据库,直接点击“数据库”然后右击"还原数据库"。 2 在"源"选项中选择"设备"。 3 选择相应的bak文件并进行添加。 4 添加完之后点击确定,注意在目标这一栏中数据库名称都可以不用写…

【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

转载博客请注明详细地址,谢谢本文讲了形态学基本操作膨胀腐蚀开闭操作的原理本文讲解了用OpenCV-Python实现形态学操作目录 一、形态学简述 1、简介 2、一些基本定义 3、结构元素

thrift服务windows环境编译失败

为什么80%的码农都做不了架构师&#xff1f;>>> 修改maven的pom文件 <!--thrift服务 api 层&#xff0c;开发时 windows系统需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

编译包含Google Play服务App的SDK版本问题

编译包含Google Play服务App的SDK版本问题 错误信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’这个错误通常是App引用了Google Play时候发生。Xamarin编译该类App&#xff0c;需要目标SDK版本必须是21或者更高…

《第一行代码》学习笔记35-服务Service(2)

1.Android的UI线程不安全&#xff0c;想要更新应用程序里的UI元素&#xff0c;则须在主线程中进行&#xff0c;否则会出现异常。 2.Android不允许在子线程里进行UI操作&#xff0c;对于该情况&#xff0c;Android提供了一套异步消息处理机制&#xff0c;完美解决在子线程中进行…

C#中HP-Socket通信组件详解

概念 HP-Socket 是国产的TCP、UDP和HTTP 通信框架&#xff0c;包含服务端、客户端和 Agent 组件&#xff0c;提供 C/C、C#、Java、Python 等多种编程语言接口。 与传统TCP通讯区别的是HP-Socket 对通信层做到了完全封装&#xff0c;程序不必关注通信层的任何细节&#xff1b;H…

mail发送的内容显示为附件的解决办法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 发送的内容在收件箱中显示为附件tcmimi.xxx.bin. 这是因为mail期望文件输入的是unix格式的文本,也就是说换行符使用\n而不是\r\n,如果文本中包含\r(使用set list,显示为^M),这种情况下mail会认为该文件…

【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

目录 一、函数 cv.findContours 二、轮廓层级(返回参数hierarchy) 三、轮廓寻找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico图标制作与应用

一、简介 ICO是什么 ICO 是 Windows 开发的一种图标格式&#xff0c;是一种可以存储多张图案、多尺寸、多色板的图标文件。 一般用IcoFX软件来创建或修改ico文件。 点击下载 Ico文件创建与应用 1.单击打开按钮&#xff0c;选择一个图像文件&#xff0c;确定后一般出现以下…

第5章--高级数据管理

5.1 数值和字符处理函数 常用的数学函数 统计函数 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默认情况下&#xff0c;函数scale()对矩阵或数据框的指定列进行均值为0、标准差为1的标准化&#xff1a; newdata <- scal…

在思科无线控制器上查看5GHz和2.4GHz的客户端数量

在图形界面下找了好长时间也没有看到在哪里&#xff0c;在CLI界面下找到了相应的命令&#xff0c;命令如下&#xff1a; (Cisco Controller) >show client ap 802.11a allMAC Address AP Id Status WLAN Id Authenticated ----------------- ------ -…

【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)

目录 一、cv2.connectedComponents() 函数原型: 输入参数解析: 返回参数解析: 二、cv2.connectedC

Halcon阈值分割方法简析

1. 基于直方图的自动阈值分割 1.1 关键算子 auto_threshold(Image : Regions : Sigma : )&#xff1a;使用多阈值分割单通道图像。 首先&#xff0c;计算图像的灰度直方图。 然后&#xff0c;使用标准差为Sigma的一维高斯滤波器对直方图进行滤波。 进而&#xff0c;从直方图中…

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站 引文 如果你已经购买了Nuand&#xff08;官方&#xff09;BladeRF x40&#xff0c;那么就可以在上面运行OpenBTS并可以输入一些指令来完成一些任务。一般来说HackRF&#xff0c;是一款覆盖频率最宽的SDR板卡。它几乎所有的信息…

夜深人静,想规划一下短期

截止写到这里的时候&#xff0c;已经是农历的十一月初六了&#xff0c;算算时间&#xff0c;距离过年也不太遥远了。就只有短短50多天左右。 很多事想做没有时间&#xff0c;很多程序要改&#xff0c;没有时间&#xff1b;很多想法想付诸行动&#xff0c;总是半途而废。时间久这…

【图像处理】——Python+opencv实现提取图像的几何特征(面积、周长、细长度、区间占空比、重心、不变矩等)

转载请注明详细地址本文简单介绍了图像常见几何特征的概念以及求解方法本文介绍了Python和opencv求解几何特征的常用方法目录 其他形状外接轮廓的方法可以参考:《OpenCV-Python——第17.3章:轮廓形状拟合(边界矩形,最小外接圆...)及性质》 一、获得轮廓 二、面积 1、c…

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想. 于是整理一下~第一阶段&#xff0d;&#xff0d;获取中断号每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核…