学习链接

我为看一张图片,跨过了 2600 公里!(原文)

给网站加速了,再也不怂了!

什么是CDN?| CDN 的工作原理是什么?

CDN 内容分发网络

CDN 概述

CDN 的全称叫 Content Delivery Network,中文名叫「内容分发网络」,它是解决由于长距离而网络访问速度慢的问题。

简单来说,CDN 将内容资源分发到位于多个地理位置机房中的服务器上,这样我们在访问内容资源的时候,不用访问源服务器。

而是直接访问离我们最近的 CDN 节点 ,这样一来就省去了长途跋涉的时间成本,从而实现了网络加速。

加速内容的类型

CDN 加速的是内容资源是静态资源

所谓的「静态资源」是指数据内容是静态不变的,任何时候来访问都是一样的,比如图片、音频。

与之相反的「动态资源」,是指数据内容是动态变化的,每次访问都不一样的,比如用户信息等。

动态资源如果也想被缓存加速,就要使用动态 CDN

其中一种方式就是将数据的逻辑计算放在 CDN 节点来做,这种方式就被称为边缘计算

从源服务器获取资源的方式

CDN 加速策略有两种方式,分别是「推模式」和「拉模式」

「拉模式」属于被动缓存的方式,「推模式」就属于主动缓存的方式。

拉模式

当用户就近访问的 CDN 节点没有缓存请求的数据时,CDN 会主动从源服务器下载数据,并更新到这个 CDN 节点的缓存中。

大部分 CDN 加速策略采用的是「拉模式」。

推模式

如果想要把资源在还没有用户访问前缓存到 CDN 节点,则可以采用「推模式」,这种方式也叫 CDN 预热

通过 CDN 服务提供的 API 接口,把需要预热的资源地址和需要预热的区域等信息提交上去,CDN 收到后,就会触发这些区域的 CDN 节点进行回源来实现资源预热。

找到离用户最近的 CDN 节点

找到离用户最近的 CDN 节点是由 CDN 的全局负载均衡器(Global Sever Load Balance,GSLB负责的。

那 GSLB 是在什么时候起作用的呢?在回答这个问题前,我们先来看看在没有 CDN 的情况下,访问域名时发生的事情。

无 CDN 时

在没有 CDN 的情况下,当我们访问域名时,DNS 服务器最终会返回源服务器的地址。

比如,当我们在浏览器输入 www.xiaolin.com 域名后,在本地 host 文件找不到域名时,客户端就会访问本地 DNS 服务器。

CDN 内容分发网络 - 图1

这时候:

  • 如果本地 DNS 服务器有缓存该网站的地址,则直接返回网站的地址;
  • 如果没有就通过递归查询的方式,先请求根 DNS,根 DNS 返回顶级 DNS(.com)的地址;再请求 .com 顶级 DNS 得到 xiaolin.com 的域名服务器地址,再从 xiaolin.com 的域名服务器中查询到 www.xiaolin.com 对应的 IP 地址,然后返回这个 IP 地址,同时本地 DNS 缓存该 IP 地址,这样下一次的解析同一个域名就不需要做 DNS 的迭代查询了。

加入 CDN

CDN 内容分发网络 - 图2

会在 xiaolin.com 这个 DNS 服务器上(权限域名服务器),设置一个 CNAME 别名,指向另外一个域名 www.xiaolin.cdn.com, 返回给本地 DNS 服务器。

接着继续解析该域名,这个时候访问的就是 xiaolin.cdn.com 这台 CDN 专用的 DNS 服务器,在这个服务器上,又会设置一个 CNAME,指向另外一个域名,这次指向的就是 CDN 的 GSLB

接着,本地 DNS 服务器去请求 CDN 的 GSLB 的域名,GSLB 就会为用户选择一台合适的 CDN 节点提供服务,选择的依据主要有以下几点:

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的 CDN 节点
  • 看用户所在的运营商网络,找相同网络的 CDN 节点
  • 看用户请求 URL,判断哪一台服务器上有用户所请求的资源
  • 查询 CDN 节点的负载情况,找负载较轻的节点

GSLB 会基于以上的条件进行综合分析后,找出一台最合适的 CDN 节点,并返回该 CDN 节点的 IP 地址给本地 DNS 服务器,然后本地 DNS 服务器缓存该 IP 地址,并将 IP 返回给客户端,客户端去访问这个 CDN 节点,下载资源。

补充

CNAME

真实名称记录(Canonical Name Record),即 CNAME 记录,是域名系统(DNS)的一种记录。 CNAME 记录用于将一个域名(同名)映射到另一个域名(真实名称),域名解析服务器遇到 CNAME 记录会以映射到的目标重新开始查询。