web网站加速之CDN(Content Delivery Network)技术原理

news/2024/5/16 1:16:04/文章来源:https://blog.csdn.net/ddxkjddx/article/details/6276513

在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有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.145
    a1366.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.154
    a212.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节点,列表如下:

域名运营商(view)服务地址
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记录不一样,其他的都是一样.

     

域名zone配置文件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.luyixian.cn/news_show_768802.aspx

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

相关文章

网站性能测试:使用Selenium测试网页加载时间

WebLOAD与用于Web浏览器应用程序的开源测试工具Selenium的集成,使您可以将执行实际活动的真实Web浏览器集成到您的性能测试场景中,并准确识别问题。 使用集成,您可以使用WebLOAD的虚拟用户来压缩系统以生成负载,同时运行用于测量实…

网站性能工具Yslow的使用方法

Yslow是雅虎开发的基于网页性能分析浏览器插件,从年初我使用了YSlow后,改变了博客模板大量冗余代码,不仅提升了网页的打开速度,这款插件还帮助我分析了不少其他网站的代码,之前我还特意写了提高网站速度的秘籍&#xf…

构建ASP.NET网站十大必备工具

最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/)。在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具总结一下,将会是一件十分有趣的事情…

用 IIS 7、ARR 與 Velocity 建设高性能的大型网站

本帖是研讨会中的一些杂记,搭配一些官方的文档,经整合归纳后,介绍 IIS 7 如何搭配新一代的 ARR (ApplicationRequest Routing),建置 Server Farm 并达到比过去 NLB 更优的 LoadBalancing 功能,此外还介绍微软新一代的分…

SignalR简介- 建立realtime 的网站

前言 一早起床后,在消化RSS的过程中,看到Scott Hanselman在Russia TechDays介绍SignalR的影片,一整个让人很惊艳,马上就想动手写写看。 由于我也是初学者,先把相关Reference 列上来,有兴趣的朋友可以直接参…

爬虫保姆级教程3:利用python-Flask框架搭建本地数据可视化网站

成果展示: (1)网站首页: (2)电影表单页 (3) 电影评分页 (4) 词频统计页 (5)团队页面 接下来让我们看看上述网站是如何完成的&#xf…

Nginx修改进入网站时的默认页面

上文写了如何将前端网站使用nginx放到服务器中, [传送门]:Nginx纯前端服务器部署_代码骑士的博客-CSDN博客 但是直接打开后发现默认页并不是登录界面, 所以还要进一步修改nginx里面的配置: vim /etc/nginx/nginx.conf 修改&am…

搜狗五笔输入法官方网站_搜狗五笔输入法新版上线:争渡读屏体验升级,助视障人士便捷沟通...

近日,搜狗五笔输入法更新至V4.1版本,新增微信号登录、手机号登录功能,以此实现了对于皮肤、自定义短语、细胞词库、配置、输入统计等用户个性资产与输入习惯的同步与迁移。另同时解决了多个影响输入体验问题,并针对争渡读屏的兼容…

如果网站的 Cookie 超过 4K,会发生什么情况?

本文一把大部分源码罗列出来了,收录至我的GitHub精选文章,欢迎Star:https://github.com/Java-Ling/Java-Interview-guide 有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,…

下载网站视频_批量下载bilibili视频全集下载

环境: 请先安装Python和you-get 教程: Python:https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624 you-get:打开cmd,输入pip3 install you-get -i https://pypi.tuna.tsinghua.edu.cn/simple即可…

如何搭建自己的网站_如何让别人看到自己编写的网页_IIS创建网站

准备工作: 打开控制面板>卸载程序 点击启用或关闭Windows功能>将图中勾选的项勾选 等待其应用完成即可 建立网站 在开始菜单图标处右键,选择计算机管理 在右侧找到服务和应用程序展开,点击Internet Infomation Services(IIS)管理器…

程序员每天必逛的5个技术网站,你用过几个?

不少程序员小伙伴每天要写几十行代码,偶尔会腾出时间刷一些技术网站。 那么,程序员们每天都刷些什么技术网站呢? w3cschool调查了一些程序员网友,发现他们每天经常刷下面这5大技术网站: 一、InfoQ InfoQ基本上就是日刷&#x…

十个接私活赚外快的网站,你有技术就有钱

大家好,我是尼奥。 前两天在知乎上发了一篇文章「现在程序员的工资是不是被高估了」,有一些网友就私信我说:为什么工资被高估了,我还这么穷,有没有什么兼职平台推荐的。 我一想,还真有,毕竟自…

八个设计师接私活的网站,你有技术就有钱

之前写过一篇文章,给程序员们推荐了十个接私活的平台,很多网友留言问我有没有「设计师接私活的网站」? 我昨天就花了一整天的时间整理了下面这八个网站,送给大家。 1.四个垂直性网站 这一类平台的优点是客单价高,而…

十个高质量自学网站,让你的技术突飞猛进

1、Coursera:https://www.coursera.org/ 最初由美国斯坦福大学两名计算机科学教授创办,国际知名在线教育平台,还可以获得认证的课程证书,可以申请奖学金,也有很多免费的学习资源。 2、EdX:https://www.e…

有程序员专门刷题的网站吗?

废话不多说,直接进入主题。 五个国内五个国外,满足你所有面试和学习需求。 国内 1.LeetCode:https://leetcode-cn.com/ 优点:题型多题目多且经典。在国内绝对是头部的刷题软件了。 2.算法学习 LeetCode:https://…

网站ftp和服务器是什么关系,HTTP和FTP之间有哪些区别

HTTP和FTP之间有哪些区别?本篇文章就给大家介绍HTTP和FTP是什么?让大家了解HTTP和FTP之间的区别,希望对你们有所帮助。HTTP和FTP都是用于在客户端和服务器之间传输数据的文件传输协议,但它们之间还是存在差异的。在介绍HTTP和FTP之…

海洋工作室——网站建设专家:FTP服务与FTP软件基础知识

共享下载站,即我们所说的FTP服务器,FTP是英文File Transfer Protocol的缩写,中文意思是文件传输协议。用户通过FTP协议能够在两台联网的计算机之间相互传递文件,它是互联网上载递文件最主要的方法。FTP服务器是互联网上提供FTP 提…

不错的几个ICON 搜寻网站推荐[转]

應用程式要讓人看了喜歡,覺得漂亮,必少不了一些圖示,而且應用程式中有些地方用文字表達遠沒有圖示好(如ToolBar),相信也有不少開發人跟我一樣,程式要自己寫,美工也有自己用,小弟我的美術細胞不好…

基于ASP.NET MVC2 EntityFramework 实现的分类信息网站的原型!

使用演练代码可以了解以下内容: ASP.NET MVC2 EntityFramework Castle 邮件验证 图片上传 路由监视 单元测试 数据翻页 分层架构 ....... 等 ^_^ 其实都是一些开发常用居家过日子基础功能啊。阅读代码是掌握新技术的就快捷径。由于代…