CDN全称为内容分发网络(Content Delivery Network),它是有美国麻省理工学院的学生发明的,最大的作用的就是缓存用户相对集中的资源,一般这类资源都是不可变的,例如图片、视频、音频文件等。这与我们一般的服务器又有什么区别呢?网络不是四通八达的么?为什么需要CDN呢?
玩游戏的朋友可能知道,有个东西就做延迟,向我们经常说延迟460,延迟是什么意思呢?就是你的手机、电脑上面的资料,发送到服务器,一个来回所需要的时间。我们都知道,网络的传输速度接近光速,从深圳到美国硅谷的距离大概为1万公里,光的速度为30万公里每秒,也就是说,如果你在美国上传一张图片,并且服务器也在美国,你在深圳访问,最少也要60毫秒以上才能拿到数据。

事实上,网络环境是非常复杂的,世界上最远的距离,莫过于我用电信,他用联通,正因为如此,真实从深圳访问美国可能要好几百毫秒。CDN的出现,就是为了解决这个问题。在美国上传的图片,我们也同样保存一份在香港,如果在深圳访问的时候,我们就直接使用香港的数据即可,这样子速度就会快非常多!CDN在全球有非常多的结点,无论你在哪里上传的图片,都可能被缓存到世界各地,以便所有的人都能够快速的访问。

这便是CDN出现的原因跟CDN解决的问题。简单来说,CDN就是一个分布式的缓存服务器,存着非常多文件,并且分布在世界各地,每个人都能就近访问。我们讲个通俗的例子,可乐公司上市了一款新的可乐,本来你要到美国去买,现在可乐公司把可乐运到了你楼下的小卖部,你只要下楼就能买到,更加方便快捷!

CDN相关技术

CDN的实现需要依赖多种网络技术的支持,其中最主要的包括负载均衡技术、动态内容分发与复制技术、缓存技术等。

负载均衡技术

负载均衡技术不仅仅应用于CDN中,在网络的很多领域都得到了广泛的应用,如服务器的负载均衡、网络流量的负载均衡。顾名思义,网络中的负载均衡就是将网络的流量尽可能均匀分配到几个能完成相同任务的服务器或网络节点上,由此来避免部分网络节点过载。这样既可以提高网络流量,又提高了网络的整体性能。在CDN中,负载均衡又分为服务器负载均衡和服务器整体负载均衡(也有的称为服务器全局负载均衡)。服务器负载均衡是指能够在性能不同的服务器之间进行任务分配,既能保证性能差的服务器不成为系统的瓶颈,又能保证性能高的服务器的资源得到充分利用。而服务器整体负载均衡允许Web网络托管商、门户站点和企业根据地理位置分配内容和服务。通过使用多站点内容和服务来提高容错性和可用性,防止因本地网或区域网络中断、断电或自然灾害而导致的故障。在CDN的方案中服务器整体负载均衡将发挥重要作用,其性能高低将直接影响整个CDN的性能。

动态分发与复制技术

众所周知,网站访问响应速度取决于许多因素,如网络的带宽是否有瓶颈、传输途中的路由是否有阻塞和延迟、网站服务器的处理能力及访问距离等。多数情况下,网站响应速度和访问者与网站服务器之间的距离有密切的关系。如果访问者和网站之间的距离过远的话,它们之间的通信一样需要经过重重的路由转发和处理,网络延误不可避免。一个有效的方法就是利用内容分发与复制技术,将占网站主体的大部分静态网页、图像和流媒体数据分发复制到各地的加速节点上。所以动态内容分发与复制技术也是CDN所需的一个主要技术。

缓存技术

缓存技术已经不是一种新鲜技术。Web缓存服务通过几种方式来改善用户的响应时间,如代理缓存服务、透明代理缓存服务、使用重定向服务的透明代理缓存服务等。通过Web缓存服务,用户访问网页时可以将广域网的流量降至最低。对于公司内联网用户来说,这意味着将内容在本地缓存,而无须通过专用的广域网来检索网页。对于Internet用户来说,这意味着将内容存储在他们的ISP的缓存器中,而无须通过Internet来检索网页。这样无疑会提高用户的访问速度。CDN的核心作用正是提高网络的访问速度,所以,缓存技术将是CDN所采用的又一个主要技术。

工作原理

CDN网络是在用户和服务器之间增加Cache层,主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据,从而降低网络的访问时间。
首先,让我们看一下传统的未加缓存服务的访问过程:

如图可以看出,传统的网络访问的流程如下:

  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. 站点服务器应答请求,将内容返回给客户端.

下面让我们看一下使用CDN缓存后的网站的访问过程:

如上图,是使用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地址后,访问站点服务器。

宗上,CDN网络是在用户和服务器之间增加Cache层,主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据,从而降低网络的访问的速度。

CDN 内容分发网络 简介相关推荐

  1. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之CDN内容分发网络

    背景分析 EasyDSS流媒体解决方案提供一站式的转码.点播.直播.录像.检索.时移回放服务,极大地简化了开发和集成的工作,并且EasyDSS支持多种特性,完全能够满足企业视频信息化建设方面的需求.其 ...

  2. 干货!CDN内容分发网络实战技巧

    干货!史上最全的CDN内容分发网络实战技巧 整理自[微学堂]第二十四期课程实录 嘉宾介绍 白金,ChinaUnix 资深版主,曾担任<iptables 高级使用研讨>讲师,精通iptabl ...

  3. 企业运维之 CDN 内容分发网络

    企业运维之 CDN 内容分发网络 1. CDN 是什么? 2. CDN 的工作原理 3. CDN 的组成 4. 部署 5. 负载均衡及健康检查 1. CDN 是什么? CDN 是 Content De ...

  4. 项目笔记:4.引入CDN内容分发网络,实现网站静态元素加速

    项目笔记:4.引入CDN内容分发网络,实现网站静态元素加速 squid 1.在192.168.0.6和192.168.0.7上安装squid 开两台虚拟机ip为0.6,0.7 只需搭建本地系统的yum ...

  5. 深度剖析:CDN内容分发网络技术原理--转载

    1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因 ...

  6. 史上最全的CDN内容分发网络实战技巧

    今天来给大家分享下关于 CDN 的东西,以及我自己的一些发现.一些个人的拙见.总共分为 3 个部分:原理.详解.各种坑. 首先说一下 CDN 的基本原理部分,主要分 4 块来描述:CDN 的由来.调度 ...

  7. CDN内容分发网络(上)

    首先说一下 CDN 的基本原理部分,主要分 4 块来描述:CDN 的由来.调度是怎么做的.缓存是什么.关于安全. 最初刚有互联网的时候,带宽用量不多.用户少,并不存在什么问题,后来随着发展,逐渐出现了 ...

  8. 史上最全的CDN内容分发网络实战技巧(网络优化)

    今天来给大家分享下关于 CDN 的东西,以及我自己的一些发现.一些个人的拙见.总共分为 3 个部分:原理.详解.各种坑. 首先说一下 CDN 的基本原理部分,主要分 4 块来描述:CDN 的由来.调度 ...

  9. Content Delivery Networks CDN 内容分发网络

    Bidirectional Content Delivery Networks BCDN 双向内容分发网络 1. 中国网络现状:南北电信问题  a) 南北电信分拆导致不同网络间访问瓶颈 b) 地域之间 ...

最新文章

  1. AI检测贫血不看血,竟是看眼睛
  2. Qt Style Sheets(qt样式表)
  3. Android开源框架——图片加载与缓存库 Picasso
  4. 【Java开发问题】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
  5. pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
  6. 容器编排技术 -- Kubernetes Labels 和 Selectors
  7. 怎么开启队友无伤_王者荣耀:张飞辅助怎么玩才厉害?出装、打法,为你全面解析...
  8. Java获得中文输入_使用java简单实现根据输入的汉字,得到汉字的首字母
  9. 程序员为什么要关注代码质量?
  10. linux通过光盘安装命令包,RHEL5通过光盘配置本地yum仓库及命令详解
  11. 使用jdk进行数据迁移(sqlite迁移mysql)
  12. Java 设计模式 Factory Method 工厂方法 模式
  13. 华为设备ERPS配置命令
  14. MMDetection2.XX-Necks之FPN源码解析
  15. matlab的s变换,MATLAB - Transforms
  16. 【IDEA双击快捷方式无法打开】
  17. 【C语言】二维数组定义以及引用
  18. 何为相干光通信系统?
  19. TIA博途中进行积分运算的具体方法
  20. C语言中static与extern用法总结

热门文章

  1. servlet文件上传blob_servlet实现从oracle数据库的blob字段中读出文件并显示 | 学步园...
  2. linux redhat 下载_使用Vmware创建Linux(Ubuntu)系统
  3. pythonexcel汇总_用python汇总excel表格数据-怎样用python遍历表格中的内容
  4. etcd — 架构原理
  5. Python Module_Socket_网络编程
  6. arm单片机中函数参数的传递
  7. NR 5G PDCP分组数据汇聚协议
  8. NR 5G 测量与寻呼
  9. Java基础学习总结(20)——基础语法
  10. js进阶 13-6 jquery动画效果相关常用函数有哪些