转载:一文搞懂CDN
一、什么是 CDN ?
全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是 内容分发网络 。CDN让用户实现了对资源的就近访问,从而达到最优的访问效率。
- 内容 :指的是静态资源比如图片、视频、文档、JS、CSS、HTML。
- 分发网络 :指的是将这些静态资源分发到位于多个不同的地理位置机房中的服务器上,这样,就可以实现静态资源的就近访问比如北京的用户直接访问北京机房的数据。
- CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。
类似于京东的仓储运输体系,当我们在自营店下单时,会选择就近的仓库进行选货配送。
二、CDN实现效果?
假设现在用户需要获取网站中某个视频资源,在没有CDN的情况下,所有的用户请求都需要到源站处理,并从源站下载资源。
2.1 没有CDN
在这种场景下会带来几个问题:
- 由于存在跨运营商的问题,会有较大的延迟;
- 其次是跨地域的问题,数据的往返时间也会随着增加,并可能影响到业务的使用体验;
- 最后,当大量的用户请求都通过源站进行处理时,无疑会给源站点带来巨大的压力,严重的情况下甚至可能压垮站点。
2.2 使用了CDN
而在使用CDN的场景中,访问请求的架构将如下图所示。对于源站的资源请求会被分配到CDN位于各地的边缘节点,用户根据就近访问原则到分配的节点去请求资源,从而获得最优的访问效率。
三、CDN的工作原理
CDN的技术实现需要DNS的支持,这里涉及到与DNS有关的两个名词:A纪录与Cname纪录。
- A纪录:即Address记录,用于指定域名与对应的IP地址记录,例如: www.test.com --> 10.10.10.10。当访问这类记录的域名时,DNS服务器会解析出相应的IP地址,并返回给到客户端。
- Cname纪录:也称为别名记录,用于指定域名与另外一个域名的解析关系,例如:www.aaa.com --> www.bbb.com。 当访问这类域名时,DNS首先会将域名解析为对应的别名记录,然后再通过该别名去解析对应的IP地址,最后返回给到客户端。该类型的用途在于可以将自身域名委托给到第三方做解析,在CDN等场景中会经常用到。
3.1 在不使用CDN的情况下
我们通常是在DNS上配置A记录,即将域名解析到源站IP。此时,当客户端访问域名时,将使用以下的流程:
3.2 使用CDN后
源站域名解析将配置为Cname,即将域名解析到CDN域名,并最终由CDN厂商的GSLB分配IP。此时,整体的访问流程变成如下所示,浏览器将到CDN节点请求资源。
3.3 加速功能的实现
主要由GSLB(全局负载均衡器)与缓存系统两个主要功能系统来处理。
3.3.1. GSLB
GSLB系统可以基于智能的DNS技术来实现,相比于传统DNS具有功能更加强大、更加智能的特点。GSLB根据预先配置好的策略,为用户分配最适合的节点地址。基于成本和带宽的调度、基于服务等级的调度。
3.3.2. 缓存系统
缓存系统最基本的工作单元就是许许多多的Cache节点(缓存服务器),Cache节点负责直接响应最终用户的访问请求,把缓存在本地的内容快速提供给用户。同时 ,Cache节点也会与源站进行内容同步,把更新的内容以及本地没有的内容从源站点获取并保存在本地。
四、CDN应用场景
1. 网站加速
主要针对门户网站、电商等业务场景,如网易、淘宝等站点。这类站点往往有着非常多的的静态内容文件(文本、图片等),CDN可对其进行加速处理,从而显著改善页面响应时间,提升用户的使用体验。
2. 文件下载加速
文件下载加速是CDN的一项重要功能,常见的场景有软件补丁包发布、游戏安装包获取等,这类文件容量大,下载的过程中容易给源站带来性能和带宽压力。通过CDN的方式,可以有效分担这些压力,并提高客户端的下载效率。
3. 流媒体加速
流媒体加速的方式是通过将流媒体内容推送到离用户最近的边缘节点,使得用户可以就近获取内容,从而提高视频传输质量、缩短访问时间,节省骨干网络的流量。流媒体加速包含直播和点播两种,此类模式适用于各类音视频网站和应用,如:抖音、爱奇艺等。
4. 全站加速
主要针对动态内容较多的站点,通过智能路由、协议优化等动态加速技术,提升客户端到源站的网络效率,便于快速获取动态资源。
五、CDN带来的收益
1. 节省成本投入
CDN通过广泛部署的节点对流量进行分摊处理,对于静态资源的命中率通常达到90%以上,这极大的减少了源站的带宽及服务器资源需求,可较大的降低企业成本投入。
在不使用CDN的场景下,往往需要准备足够应付流量波峰的资源来应对,这样会造成资源的较大浪费。而CDN使用按量付费的模式,可有效降低这种资源浪费的情况。
2. 提升用户体验
互联网存在着一个8秒定律:用户访问一个网站时,如果等待网页打开的时间超过8秒,会有超过70%的用户放弃等待。而加载时间每多1秒,你就会流失7%的用户。这个定律表明了速度对于互联网业务的重要性。
CDN服务解决了跨区域、跨运营商等造成网络阻碍的常见问题,通过智能分配、就近接入的模式,可以有效提升用户对于相关资源的下载效率,从而极大地提升用户体验。
3. 增加安全性
当前,在互联网上的黑客攻击并不少见,像DDoS等流量攻击往往会通过大量请求将源站的资源耗尽,从而让正常用户无法进行访问。CDN通过Cname的方式,屏蔽了源站的IP信息,这使得攻击者无法对源站地址进行直接攻击,而且CDN有着广泛分布的节点,可以有效减少攻击的危害性,使得业务的安全性得到增强。
4. 降低运维复杂性
CDN厂商通常会提供一站式的服务,包括配套的监控告警、服务分析、软件工具等,可以较好地降低运维的复杂性,便于把更多精力投入到核心业务中。
5.防止资源被盗取
- 最简单的办法设置 Referer 防盗链,根据 HTTP 请求的头信息里面的 Referer 字段对请求进行限制,确认合法的请求。
- 通常情况下,我们会配合其他机制来确保静态资源被盗用,一种常用的机制是 时间戳防盗链 。相比之下,时间戳防盗链 的安全性更强一些。时间戳防盗链加密的 URL 具有时效性,过期之后就无法再被允许访问。
- 时间戳防盗链的 URL 通常会有两个参数一个是签名字符串,一个是过期时间。签名字符串一般是通过对用户设定的加密字符串、请求路径、过期时间通过 MD5 哈希算法取哈希的方式获得。
六、总结
- CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。
- 基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。
- GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个 CDN 节点之间相互协作,最常用的是基于 DNS 的 GSLB。CDN 会通过 GSLB 找到最合适的 CDN 节点。
- 为了防止静态资源被盗用,我们可以利用 Referer 防盗链 + 时间戳防盗链 。