什么是 CDN?
内容分发网络(CDN,Content Distribution Network 或 Content Delivery Network)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
CDN名称解析
内容
在 CDN 领域里,“内容”其实就是 HTTP 协议里的“资源”,比如超文本、图片、视频、应用程序安装包等等。
- 资源按照是否可缓存又分为“静态资源”和“动态资源”。所谓的“静态资源”是指数据内容“静态不变”,任何时候来访问都是一样的,比如图片、音频。所谓的“动态资源”是指数据内容是“动态变化”的,也就是由后台服务计算生成的,每次访问都不一样,比如商品的库存、微博的粉丝数等。很显然,只有静态资源才能够被缓存加速、就近访问,而动态资源只能由源站实时生成,即使缓存了也没有意义。不过,如果动态资源指定了“Cache-Control”,允许缓存短暂的时间,那它在这段时间里也就变成了“静态资源”,可以被 CDN 缓存加速。
网络
CDN 的最核心原则是“就近访问”。我们知道访问网络的速度慢,忽略其他影响服务质量的因素,仅从网络传输的角度来看,一个互联网系统的速度快慢,主要取决于以下四点因素:
- 网站服务器接入网络运营商的链路所能提供的出口带宽。
- 用户客户端接入网络运营商的链路所能提供的入口带宽。
- 从网站到用户之间,经过的不同运营商之间互联节点的带宽。一般来说,两个运营商之间只有固定的若干个点是互通的,所有跨运营商之间的交互都要经过这些点。
- 从网站到用户之间的物理链路传输时延。你要是爱打游戏的话,应该就很清楚了,延迟(Ping 值)通常比带宽更重要。
那如果用户能够在本地几十公里的距离之内获取到数据,那么时延就基本上变成 0 了。
分发
用户在上网的时候就不直接访问源站,而是访问离他“最近的”一个 CDN 节点,术语叫“边缘节点”(edge node),其实就是缓存了源站内容的代理服务器,这样一来就省去了“长途跋涉”的时间成本,实现了“网络加速”。
- 被动回源:就是指由用户访问所触发的全自动、双向透明的资源缓存过程。当某个资源首次被用户请求的时候,CDN 缓存节点如果发现自己没有该资源,就会实时从源站中获取。这时资源的响应时间可粗略认为是资源从源站到 CDN 缓存节点的时间,再加上资源从 CDN 发送到用户的时间之和。
- 主动分发:源站主动发起,将内容从源站或者其他资源库推送到用户边缘的各个 CDN 缓存节点上。这个推送的操作没有什么业界标准可循,我们可以采用任何传输方式(如 HTTP、FTP、P2P 等)、任何推送策略(如满足特定条件、定时、人工等)、任何推送时间,只要与我后面要说的更新策略相匹配即可。
- CDN 如何管理(更新)资源:最常见的管理(更新)资源的做法是超时被动失效与手工主动失效相结合。超时失效是指给予缓存资源一定的生存期,超过了生存期就在下次请求时重新被动回源一次。而手工失效是指,CDN 服务商一般会给程序调用提供失效缓存的接口,在网站更新时,由持续集成的流水线自动调用该接口来实现缓存更新。
简介
CDN(Content Delivery Network)是指内容分发网络,也称为内容传送网络,这个概念始于1996年,是美国麻省理工学院的一个研究小组为改善互联网的服务质量而提出的。为了能在传统IP网上发布丰富的宽带媒体内容,他们提出在现有互联网基础上建立一个内容分发平台专门为网站提供服务,并于1999年成立了专门的CDN服务公司,为Yahoo提供专业服务。由于CDN是为加快网络访问速度而被优化的网络覆盖层,因此被形象地称为“网络加速器”。CDN网络的诞生大大地改善了互联网的服务质量,因此传统的大型网络运营商纷纷开始建设自己的CDN网络,如AT&T、德国电信、中国电信等。随着市场需求的不断增加,甚至出现了纯粹的CDN网络运营商,美国的Akamai就是其中最大的一个,拥有分布在世界各地的1000多个节点。我国第一家纯粹的CDN网络服务公司是北京蓝汛公司,已从2000年开始建立了一个专门的CDN服务网络一ChinaCache。目前CDN网络已经突破50个节点,覆盖中国六大骨干网络一中国电信、中国网通、中国移动、中国联通、中国铁通网络以及中国教育网,带宽资源储备超过35G,服务的客户数量达到300多家。
功能
归纳起来,CDN具有以下主要功能:(1)节省骨干网带宽,减少带宽需求量 (2)提供服务器端加速,解决由于用户访问量大造成的服务器过载问题 (3)服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求 (4)能克服网站分布不均的问题,并且能降低网站自身建设和维护成本 (5)降低“通信风暴”的影响,提高网络访问的稳定性
路由解析
CNAME
- CNAME记录:CNAME(Canonical Name)记录即别名记录,用来把一个域名解析成另一个域名,再由另一个域名提供源站服务。例如,您在一台服务器上存放了很多资料,使用docs.example.com访问服务器上的资源,但又希望通过documents.example.com也能访问,您可以在您的DNS解析服务商,添加一条CNAME记录,将documents.example.com指向docs.example.com,所有访问documents.example.com的请求都会被转发到docs.example.com。
- CNAME域名:在CDN控制台添加加速域名后,系统会给对应的域名分配一个*.kunlun.com形式的CNAME域名。您需要在您的DNS解析服务商处添加一条CNAME记录,将加速域名指向CNAME域名。记录生效后域名解析就正式转向CDN服务,该域名所有的请求都将转向CDN的边缘节点,达到加速效果。
解析流程
我们来看有CDN的介入,整个DNS解析过程是怎么样的?通过访问www.huaweicloud.com来看看怎么给华为云的静态页面加速的。通过 dig 或者 host 命令,我们就能很方便地得到 DNS 服务器的返回结果(结果中头 4 个 IP 的城市地址是我手工加入的,后面的其他记录就不一个一个查了),如下所示:
~# dig www.huaweicloud.com ; <<>> DiG 9.10.6 <<>> www.huaweicloud.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59710 ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.huaweicloud.com. IN A ;; ANSWER SECTION: www.huaweicloud.com. 29 IN CNAME www.huaweicloud.com.cdn.dnsv1.com. www.huaweicloud.com.cdn.dnsv1.com. 29 IN CNAME cdn-koa8myv3.sched.s2.tdnsv5.com. cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.117.243 cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 118.112.23.208 cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.115.189 cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 110.185.117.191 cdn-koa8myv3.sched.s2.tdnsv5.com. 29 IN A 182.150.11.59 ;; Query time: 3 msec ;; SERVER: 223.5.5.5#53(223.5.5.5) ;; WHEN: Fri Sep 17 11:03:53 CST 2021 ;; MSG SIZE rcvd: 204
那么,根据这个解析信息,我们可以知道,DNS 服务为“www.huaweicloud.com”的查询结果先返回了一个CNAME 记录“www.huaweicloud.com.cdn.dnsv1.com”,服务器在递归查询该 CNAME 时候,返回了另一个看起来更奇怪的 CNAME“cdn-koa8myv3.sched.s2.tdnsv5.com”。继续查询后,这个 CNAME 返回了几个位于不同的 A 记录。很明显,这些 A 记录就是分布在全国各地、存有本站缓存的 CDN 节点。由此,我们就能清晰地了解到 CDN 路由解析的具体工作过程了:
- 架设好“www.huaweicloud.com”的服务器后,将服务器的 IP 地址在你的 CDN 服务商上注册为“源站”,注册后你会得到一个 CNAME,也就是这个例子当中的“www.huaweicloud.com.cdn.dnsv1.com”。
- 接着,将得到的 CNAME 在你购买域名的 DNS 服务商上,注册为一条 CNAME 记录。
- 当第一位用户来访问你的站点时,会首先发生一次未命中缓存的 DNS 查询,域名服务商解析出 CNAME 后,会返回给本地 DNS。到这里,后续的链路解析的主导权就开始由内容分发网络的调度服务接管了。
- 本地 DNS 查询 CNAME 时,由于能解析该 CNAME 的权威服务器,只有 CDN 服务商所架设的权威 DNS,这个 DNS 服务会根据一定的均衡策略和参数,比如拓扑结构、容量、时延等等,在全国各地能提供服务的 CDN 缓存节点中挑选一个最适合的,把它的 IP 替换成源站的 IP 地址,然后返回给本地 DNS。
- 浏览器从本地 DNS 拿到了 IP 地址后,就会把该 IP 当作源站服务器来进行访问,此时该 IP 的 CDN 节点上可能有,也可能没有缓存过源站的资源。最后,经过内容分发后的 CDN 节点,就有能力代替源站向用户提供所请求的资源了。
内容存储
“内容源的存储”与“内容在 Cache节点中的存储”
- 对于CDN系统而言,需要考虑两个方面的内容存储问题。一个是内容源的存储,一个是内容在 Cache节点中的存储。
- 对于内容源的存储,由于内容的规模比较大(通常可以达到几个甚至几十个TB),而且内容的吞吐量较大,因此,通常采用海量存储架构,如NAS和SON。对于在 Cache节点中的存储,是 Cache设计的一个关键问题。需要考虑的因素包括功能和性能两个方面:功能上包括对各种内容格式的支持,对部分缓存的支持;在性能上包括支持的容量、多文件吞吐率、可靠性、稳定性。
- 其中,多种内容格式的支持要求存储系统根据不同文件格式的读写特点进行优化,以提高文件内容读写的效率。特别是对针对流媒体文件的读写。部分缓存能力指流媒体内容可以以不完整的方式存储和读取。部分缓存的需求来自用户访问行为的随机性,因为许多用户并不会完整地收看整个流媒体节目。事实上,许多用户访问单个流媒体节目的时间不超过10分钟。因此,部分缓存能力能够大大提高存储空间的利用率,并有效提高用户请求的响应时间。但是部分缓存可能导致内容的碎片问题,需要进行良好的设计和控制。
- Cache存储的另一个重要因素是存储的可靠性,目前,多数存储系统都采用了独立磁盘冗余阵列(RAID)技术进行可靠存储。但是不同设备使用的RAID方式各有不同。
内容管理
“命中”和“回源”
这里就有两个 CDN 的关键概念:“命中”和“回源”。
- “命中”就是指用户访问的资源恰好在缓存系统里,可以直接返回给用户;“回源”则正相反,缓存里没有,必须用代理的方式回到源站取。
- 相应地,也就有了两个衡量 CDN 服务质量的指标:“命中率”和“回源率”。命中率就是命中次数与所有访问次数之比,回源率是回源次数与所有访问次数之比。显然,好的 CDN 应该是命中率越高越好,回源率越低越好。现在的商业 CDN 命中率都在 90% 以上,相当于把源站的服务能力放大了 10 倍以上。
资源更新与失效
更令人感到无奈的是,由于大多数网站的开发和运维人员并不十分了解 HTTP 缓存机制,所以就导致了,如果 CDN 完全照着 HTTP Headers 来控制缓存失效和更新,效果反而会更差,而且还可能会引发其他的问题。所以,CDN 缓存的管理没有通用的准则。现在,最常见的管理(更新)资源的做法是超时被动失效与手工主动失效相结合。超时失效是指给予缓存资源一定的生存期,超过了生存期就在下次请求时重新被动回源一次。而手工失效是指,CDN 服务商一般会给程序调用提供失效缓存的接口,在网站更新时,由持续集成的流水线自动调用该接口来实现缓存更新。
额外能力
高效的传输协议
- 不少 CDN 提供商都同时对接(代售 CA 的)SSL 证书服务,这样就可以实现源站是 HTTP 协议的,而对外开放的网站是基于 HTTPS 的。
- 同理,这样的做法也可以实现源站到 CDN 是 HTTP/1.x 协议,而 CDN 提供的外部服务是 HTTP/2 或 HTTP/3 协议;或者是实现源站是基于 IPv4 网络的,CDN 提供的外部服务支持 IPv6 网络,等等。
可靠的安全防护能力
CDN通过可靠的安全防护措施,帮助您规避业务上的安全风险。
- 防盗链:用户可以选择通用的Refer、UA、URL、IP等通用鉴权方式,也可以用EdgeScript来定制鉴权方式,以防止源站资源被盗用;支持远程鉴权功能实现二次鉴权。
- DNS防劫持:HTTPDNS技术使用HTTP协议访问的服务端,获得域名解析结果,绕过运营商的Local DNS,避免域名劫持。
- HTTPS传输加密:支持采用TLS协议来加密HTTP协议内容,防止明文数据暴露在互联网上,并且可以设置TLS1.3、HSTS、keyless等高级功能。
- 源站保护:CDN产品自身具备一定的安全防护能力,也可以配置SCDN产品来提供更强的安全防护能力。
总结
CDN 发展到现在已经有二十来年的历史了,早期的 CDN 功能比较简单,只能加速静态资源。随着这些年 Web 2.0、HTTPS、视频、直播等新技术、新业务的崛起,它也在不断进步,增加了很多的新功能,比如 SSL 加速、内容优化(数据压缩、图片格式转换、视频转码)、资源防盗链、WAF 安全防护等等。网站只安心生产优质的内容,其他的“杂事”都由它去代劳。
- 由于客观地理距离的存在,直连网站访问速度会很慢,所以就出现了 CDN;
- CDN 构建了全国、全球级别的专网,让用户就近访问专网里的边缘节点,降低了传输延迟,实现了网站加速;
- GSLB 是 CDN 的“大脑”,使用 DNS 负载均衡技术,智能调度边缘节点提供服务;
- 缓存系统是 CDN 的“心脏”,使用 HTTP 缓存代理技术,缓存命中就返回给用户,否则就要回源。