CDN原理介绍(转)

内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。

为什么需要CDN

根本上的原因是,访问速度对互联网应用的用户体验、口碑、甚至说直接的营收都有巨大的影响,任何的企业都渴望自己站点有更快的访问速度。而HTTP传输时延对web的访问速度的影响很大,在绝大多数情况下是起决定性作用的,这是由TCP/IP协议的一些特点决定的。物理层上的原因是光速有限、信道有限,协议上的原因有丢包、慢启动、拥塞控制等。

要提高访问速度,最简单的做法当然就是多设置几个服务器,让终端用户离服务器“更近”。典型的例子是各类下载网站在不同地域不同运营商设置镜像站,或者是像Google那样设置多个数据中心。但是多设几个服务器的问题也不少,一是多地部署时的困难,二是一致性没法保障,三则是管理困难、成本很高。实际上,在排除多地容灾等特殊需求的情况下,对大多数公司这种做法是不太可取的。当然,这种方案真正做好了,甚至是比后续所说的使用CDN要好的。

CDN是一种公共服务,他本身有很多台位于不同地域、接入不同运营商的服务器,而所谓的使用CDN实质上就是让CDN作为网站的门面,用户访问到的是CDN服务器,而不是直接访问到网站。由于CDN内部对TCP的优化、对静态资源的缓存、预取,加上用户访问CDN时,会被智能地分配到最近的节点,降低大量延迟,让访问速度可以得到很大提升。

CDN的原理

CDN做了两件事,一是让用户访问最近的节点,二是从缓存或者源站获取资源

CDN有个源站的概念,源站就是提供内容的站点(网站的真实服务器), 从源站取内容的过程叫做回源。

每次访问的具体流程如图(以最普通的CDN为例)

具体举个例子:

用户在首次访问 https://assets-cdn.github.com/pinned-octocat.svg , 假设不委托local DNS服务器递归查询,会经历以下几个过程

  1. 浏览器检查本地有没有这个东东的有效缓存,有则使用缓存,没有有效缓存则进行对assets-cdn.github.com的DNS查询,获得一个 CNAME记录, igithub.map.fastly.net,值得注意的是,多个加速域名可以解析到同一个CNAME,CDN回源和缓存的时候考虑到了hostname,
  2. 进行对github.map.fastly.net的DNS查询,获得一个A/AAAA记录,给出地址103.245.222.133(视网站不同返回的不一样,可以有多个), 这一步对CDN来说时十分重要的,它给出了离用户最近的边缘节点;
  3. 浏览器选一个返回的地址,然后进行真正的http请求,开始向103.245.222.133握手,握手完了把http请求头也发给了该边缘服务器;
  4. 边缘服务器检查自己的cache里面有没有https://assets-cdn.github.com/pinned-octocat.svg这个资源,有则返回给用户,如果没有,向CDN中心服务器发起请求;
  5. CDN中心服务器检查自己的cache里面有没有这个资源,有则返回给边缘服务器,没有则回源;
  6. 中心服务器发现客户配置了github.map.fastly.net的回源地址(这个只有cdn会知道,假设是xxx.xxx.xxx.xxx),就把http请求发到源站地址上,源站返回后返回给请求方;

可以看出CDN加速的原理很大部分是跟DNS挂钩在一起的,CDN供应商几乎一定需要一个智能DNS服务器。CDN可以拿到所有的明文数据,所以对数据安全性、保密性要求比较高的企业会选择自建CDN或者设置NS记录,指向自建的智能DNS服务器。

上述步骤每一步都可以缓存,注意是每一步! 所以CDN要清除缓存很难,因为有很多服务器上的缓存要清除。无论是用户对边缘服务器的请求,还是CDN服务器的回源都可以使用https。

注意,实际环境中图中每个服务器都可以是集群,甚至CDN分区域中心和总中心。

转自:https://github.com/renaesop/blog/issues/1

时间: 2024-10-08 18:19:28

CDN原理介绍(转)的相关文章

CDN技术介绍

什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接.负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上.其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的

Traceroute原理介绍

一.路由追踪 路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. 二.ICMP协议 Internet控制报文协议(internet control message protocol),它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. 日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下

【spine】原理介绍和程序实现

突然间,微博上被@了,一看原来是之前的关于介绍 spine 的文章引起的.然后就是一阵惭愧,又开了一坑,然后就木有了.虽然,一直在研究 spine,但是的确没写下来相关的内容.于是,赶紧,补了一些内容. 官网内容转发,没啥技术含量.我自己写的运行库也完成了,虽然还需要打磨,但是比官方的更符合2dx 的风格.做了许久之后,对 spine 的理解更深了一点,然后就胡乱介绍下设计思路和为什么这么做. 概念 先来介绍下 spine 中的一些术语和概念 Bone 骨骼 spine 是骨骼编辑器,所以骨骼是

内存分析_.Net内存原理介绍

内存原理介绍 1.       .Net应用程序中的内存 1.1.Net内存类型 Windows使用一个系统:虚拟寻址系统.这个系统的作用是将程序可用的内存地址映射到硬件内存中的实际地址上.其实际结果是在32位的Windows操作系统中,每个进程都可以使用4GB的内存,当然,64位机这个数字就更大了,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,这4GB的内存成为虚拟地址空间或虚拟内存.在.Net中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆. C#将数据分为2

一、CDN网络介绍

一.概念 CDN的全称是Content DeliveryNetwork,即内容分发网络.主要包括:内容分发到CDN节点:就近为客户提供服务. 二.CDN原理 1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求: 2.网站的DNS域名解析器设置了CNAME,指向了www.web.51cdn.com,请求指向了CDN网络中的智能DNS负载均衡系统: 3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户: 4.用户

03 Yarn 原理介绍

Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的时延,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题. 包含两层: Namespace l 包含目录.文件以及块的信息 l 支持对Namespac

04 MapReduce原理介绍

大数据实战(上) # MapReduce原理介绍 大纲: * Mapreduce介绍 * MapReduce2运行原理 * shuffle及排序 定义 * Mapreduce 最早是由google公司研究提出的一种免息nag大规模数据处理的并行计算模型和方法.是hadoop面向大数据并行处理的计算模型.框架和平台 * Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(

分布式文件系统FastDFS原理介绍

在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储:2.数据高可用(冗余备份):3.读/写高性能:4.海量数据计算.最好还得支持多平台多语言,支持高并发. 由于单台服务器无法满足以上要求,这就迫使开发者不得不考虑使用其他方式解决此类问题.分布式文件系统就在这样迫切的需求下孕育而生. 今天为什么把标题定为“分布式文件系统”呢?是因为我想通过此次分享(FastDFS原理介绍),和大家去做更多关于分布式文件系统的研究和分享.我想这项研究应该会是一个“系列”性的专题.在本文之后还计划

DNS原理介绍和具体搭建DNS

DNS (Domail Name Server,域名服务) 一.DNS概述     DNS 是一种 C/S 架构,实现域名解析.服务端监听在 UDP/53 和 TCP/53 号端口.主要主机名与 IP 地址之间的名称解析. 所谓的名称解析:简单的来说是将一种名称转换为另一种名称.通常是用户名和 IP 地址之间的转换.它们之间是通过解析库来实现的.像 /etc/passwd 文件就是一种用户名和UID之间的一种解析库. 在 Linux 操作系统中,服务端协议的实现是 bind 软件,客户端通过调用