CDN 的工作原理介绍

4,930 阅读6分钟

概念

CDN

CDN 即内容分发网络(Content Delivery Network)的简称,是建立在承载网基础上的虚拟分布式网络,能够将源站内容(包括各类动静态资源)智能缓存到全球各节点服务器上。这样不仅方便了用户就近获取内容,提高了资源的访问速度,也分担了源站压力。

CNAME、A 记录、NS 记录

DNS ( Domain Name System,域名系统)提供了将域名转换为 IP 地址的服务。为了完成这个转化工作,DNS 的数据库中需要维护相关的数据,这些数据被叫做 RR(Resource Record,资源记录)。资源记录有很多种类型,比如 A、NS、SOA、CNAME 和 PTR 记录。

大家接触最多的就是 A(Address)记录。A 记录是一条从域名到 IP 地址的映射记录。而 CNAME(Canonical Name)记录是一条从域名到域名的映射记录。它在 CDN 技术中有举足轻重的作用,很好地实现了业务域名与 CDN 系统域名的解耦。简单理解,如果一个域名配置了 A 记录,DNS 就会把它解析成 A 记录指定的 IP 地址;如果一个域名配置了 CNAME 记录,DNS 就会把它解析成 CNAME 记录指定的另外一个域名;A 记录和 CNAME 记录是互斥的,不能同时存在。

NS (Name Server)记录是和 DNS 服务器相关的一条记录,它指定该域名应该由哪一台 DNS 服务器进行解析。一般把通过 NS 记录指定的 DNS 服务器叫做该域名的权威 DNS 服务器。

加速域名

加速域名指需要使用 CDN 加速的域名。加速域名也是一个域名。加速域名一般配置 CNAME 记录,指向 CDN 网络节点。普通域名一般配置 A 记录,指向提供服务的业务服务器。

源站

提供原始资源(使用 CDN 加速的资源)的业务服务器,可以指定为域名或 IP 地址。

回溯

CDN 节点未缓存资源,或者缓存资源已过期时,回到源站获取资源,返回给客户端。

工作原理

假设我建立了一个网站,域名为 www.tt.com,用户访问的主页链接为 www.tt.com/idx.html。为了缓解服务端压力和加快访问速度,决定使用阿里云 CDN 服务。 为了更好地理解工作原理,先了解一下 CDN 的接入流程。

接入流程

主要接入步骤如下:

  1. 到某域名供应商处申请一个加速域名:js.tt.com
  2. 到阿里云 CDN 平台添加加速域名 js.tt.com,同时设置其源站域名为 www.tt.com
  3. 阿里云 CDN 平台自动分配一个 CNAME 域名:js.tt.com.ali.com
  4. 到域名供应商处给加速域名 js.tt.com 添加 CNAME 记录,其值为上一步得到的 CNAME 域名:js.tt.com.ali.com

对以上步骤做进一步说明:

  • 为了使用 CDN,必需另外再申请一个加速域名,作为使用 CDN 的入口。
  • 加速域名配置的是 CNAME 记录,值为 CDN 平台提供的 CNAME 域名,该 CNAME 域名指向 CDN 系统节点。
  • 添加加速域名时需要配置源站域名,据此,CDN 平台保存了加速域名与源站域名的映射关系。
  • CNAME 域名的格式一般是:<加速域名> + <供应商主域名>。

CDN 系统架构

从功能上看,典型的 CDN 系统由分发服务系统负载均衡系统运营管理系统组成。分发服务系统主要负责资源的响应、缓存和同步。负载均衡系统主要负责对用户请求进行调度。运营管理系统则负责运营需求管理和网络系统管理。

从节点分布上看,CDN 系统主要分为 边缘层中心层。边缘层分布在 CDN 网络的边缘位置,给用户提供就近访问服务。中心层则负责完成资源同步和运营管理等功能。中心层保存了加速域名的相关配置信息,比如源站域名,也缓存了加速域名下的各种资源。在边缘层节点未命中缓存时,需要向中心层节点发起请求;而中心层节点未能命中缓存时,需要查找对应的源站域名,并向该源站域名发起请求。然后再逐层返回并缓存用户请求的资源。

访问流程

用户 A 的第一次访问流程如下图所示:

  • 第 1 步访问的是加速域名,而不是源站域名。
  • 第 3 步返回 CNAME 域名。
  • 第 5 步返回 CNAME 域名对应的 IP 地址,指向 CDN 边缘层节点。
  • 第 6 步请求的 URL (或者说 Referer )仍为 js.tt.com/idx.html
  • 第 7 步请求中心层节点时,会带上第 6 步的 URL 作为参数。
  • 第 8 步通过查询配置数据得到源站域名,进而向源站发起请求。这里的业务服务器即为 CDN 的源站。简单起见,省略了从 DNS 服务器查询 A 记录的过程。
  • 在整个过程中,URL 的域名会变化,但是 URL 的路径不会变化。

用户 A 第二次访问流程如图 2 所示:

需要进一步说明的是:

  • 由于本地 DNS 客户端拥有了加速域名的解析缓存,就不需要再查询 DNS 服务器了。
  • 由于 CDN 边缘层节点有了对应资源的缓存,就不需要再向上请求资源了。

用户 B 第一次访问流程如图 3 所示:

需要进一步说明的是:

  • 由于用户 A 和用户 B 地域相差比较远,使用不同的边缘层节点,所以边缘层节点没有对应资源的缓存,需要向中心层节点请求资源。
  • 中心层节点拥有该资源的缓存,所以就不需要回源了。

就近访问原理

CDN 系统是如何实现就近访问的呢?

CNAME 域名是 CDN 供应商提供的,CDN 供应商拥有对 CNAME 域名的配置权。CDN 供应商会把 CNAME 域名的 NS 记录设置为自己搭建的 DNS 服务器。这样一来,解析 CNAME 域名的时候就会请求 CDN 供应商搭建的 DNS 服务器。而 CDN 供应商在 DNS 服务器中实现了负载均衡,会返回离用户较近的边缘层节点的 IP 地址。如此便实现了就近访问。 在图 1 中,第 4 步是向阿里云 DNS 服务器查询的,该 DNS 服务器会根据地理位置和健康状态等信息返回多个较近的可用的 CDN 边缘节点的 IP 地址。DNS 客户端会选择其中一个 IP 地址作为解析结果,一般是第一个。