CDN 即内容分发网络(Content Delivery Network)的简称,是创建在承载网基础上的虚拟分布式网络,可以将源站内容(包括各种动静态资源)智能缓存到全球各节点服务器上。这样不只方便了用户就近获取内容,提升了资源的访问速度,也分担了源站压力。html
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 记录,指向提供服务的业务服务器。markdown
提供原始资源(使用 CDN 加速的资源)的业务服务器,能够指定为域名或 IP 地址。网络
CDN 节点未缓存资源,或者缓存资源已过时时,回到源站获取资源,返回给客户端。架构
假设我创建了一个网站,域名为 www.tt.com
,用户访问的主页连接为 www.tt.com/idx.html
。为了缓解服务端压力和加快访问速度,决定使用阿里云 CDN
服务。 为了更好地理解工做原理,先了解一下 CDN 的接入流程。负载均衡
主要接入步骤以下:分布式
js.tt.com
。js.tt.com
,同时设置其源站域名为 www.tt.com
。CNAME
域名:js.tt.com.ali.com
。js.tt.com
添加 CNAME
记录,其值为上一步获得的 CNAME
域名:js.tt.com.ali.com
。对以上步骤作进一步说明:网站
CNAME
记录,值为 CDN 平台提供的 CNAME
域名,该 CNAME
域名指向 CDN 系统节点。从功能上看,典型的 CDN 系统由分发服务系统、负载均衡系统和运营管理系统组成。分发服务系统主要负责资源的响应、缓存和同步。负载均衡系统主要负责对用户请求进行调度。运营管理系统则负责运营需求管理和网络系统管理。
从节点分布上看,CDN 系统主要分为 边缘层 和 中心层。边缘层分布在 CDN 网络的边缘位置,给用户提供就近访问服务。中心层则负责完成资源同步和运营管理等功能。中心层保存了加速域名的相关配置信息,好比源站域名,也缓存了加速域名下的各类资源。在边缘层节点未命中缓存时,须要向中心层节点发起请求;而中心层节点未能命中缓存时,须要查找对应的源站域名,并向该源站域名发起请求。而后再逐层返回并缓存用户请求的资源。
用户 A 的第一次访问流程以下图所示:
js.tt.com/idx.html
。用户 A 第二次访问流程如图 2 所示:
须要进一步说明的是:
用户 B 第一次访问流程如图 3 所示:
须要进一步说明的是:
CDN 系统是如何实现就近访问的呢?
CNAME
域名是 CDN 供应商提供的,CDN 供应商拥有对 CNAME
域名的配置权。CDN 供应商会把 CNAME
域名的 NS 记录设置为本身搭建的 DNS
服务器。这样一来,解析 CNAME
域名的时候就会请求 CDN
供应商搭建的 DNS
服务器。而 CDN
供应商在 DNS
服务器中实现了负载均衡,会返回离用户较近的边缘层节点的 IP 地址。如此便实现了就近访问。 在图 1 中,第 4 步是向阿里云 DNS
服务器查询的,该 DNS
服务器会根据地理位置和健康状态等信息返回多个较近的可用的 CDN
边缘节点的 IP 地址。DNS
客户端会选择其中一个 IP
地址做为解析结果,通常是第一个。