CDN 内容分发网络
一、CDN 的定义
1、为什么需要 CDN
根本上的原因是,访问速度对互联网应用的用户体验、口碑、甚至说直接的营收都有巨大的影响,任何的企业都渴望自己站点有更快的访问速度。而 HTTP 传输时延对 web 的访问速度的影响很大,在绝大多数情况下是起决定性作用的,这是由 TCP/IP 协议的一些特点决定的。物理层上的原因是光速有限、信道有限,协议上的原因有丢包、慢启动、拥塞控制等。
要提高访问速度,最简单的做法当然就是多设置几个服务器,让终端用户离服务器更近。但存在部署困难、一致性没法保障、成本高等问题。
CDN 是一种公共服务,本身有很多台位于不同地域、接入不同运营商的服务器,而所谓的使用 CDN 实质上就是让 CDN 作为网站的门面,用户访问到的是 CDN 服务器,而非直接访问到网站。由于 CDN 内部对 TCP 的优化、对静态资源的缓存、预取,加上用户访问 CDN 时,会被智能地分配到最近的节点,降低大量延迟,让访问速度可以得到很大提升。
总的来说,CDN 的目的是解决因服务器性能带来的访问延迟问题,提高用户访问网站的响应速度和成功率。
2、什么是 CDN
CDN(Content Delivery Network)即内容分发网络,利用最靠近每位用户的服务器,更快、更可靠地将请求的资源发给用户,节省用户访问的时间。
CDN = 更智能的镜像 + 流量引流 + 缓存
3、CDN 的缺点
- 实施复杂,投资大。
- 大部分只对静态内容加速。
二、CDN 的原理
CDN 做了两件事,一是让用户访问最近的节点,二是从缓存或提供内容的站点获取资源。
在访问没有应用 CDN 的资源地址时,输入域名访问某一个站点的过程为:
- 用户提交域名
- 浏览器对域名进行解释
- DNS 解析得到目的主机的 IP 地址
- 根据 IP 地址访问发出请求
- 得到请求数据并回复
当用户访问 CDN 的资源地址时,DNS 返回的不再是 IP 地址,而是一个 CNAME(Canonical Name)别名记录,指向 CDN 的全局负载均衡,过程如下:
首先会经过本地的 DNS 解析,请求 CNAME 指向的源站 DNS 服务器,DNS 服务器根据一系列的策略确定最适合的 CDN 节点,并将解析的 IP 地址转发给用户,用户再完成重定向。
CNAME 实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是 CDN 实现的关键。
举个例子:
用户在首次访问 https://xx-cdn.com/a.svg
, 假设不委托 local DNS 服务器递归查询,会经历以下几个过程:
- 浏览器检查本地有没有这个资源的有效缓存,有则使用缓存,没有则进行对 xx-cdn.com 的 DNS 查询,获得一个 CNAME 记录 xx.map.net,多个加速域名可以解析到同一个 CNAME;
- 进行对 xx.map.net 的 DNS 查询,获得一个 A/AAAA 记录,给出地址 103.245.222.133, 这一步对 CDN 来说时十分重要的,它给出了离用户最近的边缘节点;
- 浏览器选一个返回的地址,然后进行真正的 HTTP 请求,开始向 103.245.222.133 握手,握手完了把 HTTP 请求头也发给了该边缘服务器;
- 边缘服务器检查自己的 cache 里面有没有
https://xx-cdn.com/a.svg
这个资源,有则返回给用户,如果没有,向 CDN 中心服务器发起请求; - CDN 中心服务器检查自己的 cache 里面有没有这个资源,有则返回给边缘服务器,没有则回源;
- 中心服务器发现客户配置了 xx.map.net 的回源地址(这个只有 CDN 会知道,假设是 xxx.xxx.xxx.xxx),就把 HTTP 请求发到源站地址上,源站返回后返回给请求方;
可以看出 CDN 加速的原理很大部分是跟 DNS 挂钩在一起的,CDN 供应商几乎一定需要一个智能 DNS 服务器。CDN 可以拿到所有的明文数据,所以对数据安全性、保密性要求比较高的企业会选择自建 CDN 或者设置 NS 记录,指向自建的智能 DNS 服务器。
上述步骤每一步都可以缓存,注意是每一步,所以 CDN 要清除缓存很难,因为有很多服务器上的缓存要清除。无论是用户对边缘服务器的请求,还是 CDN 服务器的回源都可以使用 HTTPS。
注意,实际环境中图中每个服务器都可以是集群,甚至 CDN 分区域中心和总中心。
三、CDN 的应用
1、网站加速
站点或者应用中大量静态资源的加速分发,可以将站点内容进行动静分离,动态文件可以结合云服务器 ECS,静态资源如各类型 HTML、CSS、JS、图片、文件、短视频等,可以结合对象存储 OSS 存储海量静态资源,有效加速内容加载速度。
适用于:
- 终端用户访问慢:网站小文件内容多打开速度太慢;
- 跨区域访问质量差:终端用户分布在不同区域,不同区域的访问速度和质量高低不一;
- 高并发压力大:运营推广期间,源站服务器压力大,容易挂掉,造成服务不可用;
- 图片格式分辨率处理复杂:无法根据适合的终端情况进行图片压缩和优化。
2、超大文件下载
网站或应用 App 的主要业务为大文件下载,例如:安装包文件 apk、音频文件 mp3、驱动程序 exe、应用更新文件 zip 等,平均单个文件大小在 20M 以上,如游戏、各类客户端下载和 App 下载商店等。
适用于:
- 终端用户无法下载或者下载太慢;
- 网络环境不稳定时,下载容易中断,重新下载会耗费额外的资源;
- 网站内容不安全,容易被劫持;
- 文件存储成本过高,同时对源站性能要求高。